Nexscope

Page Structured Data

Extract the structured data (schema markup) found on a page. Call the Page Structured Data API via REST or MCP to automate SEO research in your app or AI agent.

CostEstimated 10 credits / call
Try online
POST · https://api.nexscope.ai/seo/pageStructuredDataMCP · nexscope_page_structured_data

What this API does

Extract the structured data (schema markup) found on a page. The request accepts pageUrl, task_id. Its documented result includes documents.fields, documents.format, documents.types, testSummary.error, testSummary.fatal, testSummary.info, testSummary.warning, missingFields.field.

Page Structured Data API use cases

Investigate a website quality issue

To investigate a website quality issue, a search marketer submits pageUrl and task_id to Page Structured Data. The returned documents.fields, documents.format, documents.types help locate the pages or resources behind the reported issue.

Prioritize pages for technical review

A search marketer uses Page Structured Data with pageUrl and task_id to prioritize pages for technical review. The returned documents.fields, documents.format, documents.types help choose affected pages for the next technical investigation.

Record evidence before a site change

For this workflow, a search marketer calls Page Structured Data with pageUrl and task_id to record evidence before a site change. The result helps compare saved evidence before and after a site correction.

Page Structured Data API FAQ

What does the Page Structured Data API return?

Extract the structured data (schema markup) found on a page. The documented output includes documents.fields, documents.format, documents.types, testSummary.error, testSummary.fatal, testSummary.info, testSummary.warning, missingFields.field. It corresponds to the supplied pageUrl, task_id. Optional fields can be absent; a missing value should not be interpreted as a measured zero. Example values illustrate the response shape, rather than live account results.

How many credits does the Page Structured Data API cost?

The current documented cost is Estimated 10 credits / call. This is the same cost shown at the top of this page. If a range or estimate is displayed, the final charge depends on the request. Review your available credits and the pricing page before calling the API, and check API usage records for the actual charge.

How do I call the Page Structured Data API from my app or an MCP client?

Send a POST request to https://api.nexscope.ai/seo/pageStructuredData with your API key as a Bearer token and the JSON inputs shown in API integration. In a compatible MCP client such as Claude or Cursor, connect Nexscope and call nexscope_page_structured_data. Use the MCP arguments shown in the MCP guide, or switch Online test to MCP to review its request before adding it to your app.

View plans and creditsConnect this API with MCP

Try this API
Endpoint
https://api.nexscope.ai/seo/pageStructuredData
MCP method
nexscope_page_structured_data

Step 1 of 3 · Authenticate

Authentication

All run endpoints require a user API key. Send it as a bearer token in the Authorization header.

Authorization: Bearer nk-xxxxxxxxxxxxxxxxx
Missing or invalid API keys return an authentication error. Manage keys from .

Step 2 of 3 · Send a request

POSThttps://api.nexscope.ai/seo/pageStructuredData

Run an API

Send a JSON request body using the parameters described below.

Example request

Replace YOUR_API_KEY, then run this command in your terminal.

curl -X POST 'https://api.nexscope.ai/seo/pageStructuredData' \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "pageUrl": "https://www.nexscope.ai/",
  "task_id": ""
}'

Code example

{
  "pageUrl": "https://www.nexscope.ai/",
  "task_id": ""
}

Step 3 of 3 · Inspect the result

Check the response

Read code for the request status and data for the result. Open the parameter and response reference for the full field definitions.

HTTP status codes

CodeDescription
200Default HTTP response for both success and many business errors. Only outer JSON code 0 indicates success or asynchronous acceptance; inspect data for the result.
429Execution admission rate limit; honor Retry-After when present.
503Execution admission is temporarily unavailable; honor Retry-After when present.
Opt-inX-Nexscope-Http-Status: semantic maps controller-handled business errors to HTTP status on run and task routes. Pre-authentication failures, such as a missing or invalid API key (code 11209, including an incomplete or corrupted copy) or an expired website login session (code 12001), may still return HTTP 200 before this mapping. Always check the outer JSON code; malformed requests and infrastructure failures may also return non-200 HTTP responses.
All categories/ Website & On-Page SEO
POSThttps://api.nexscope.ai/seo/pageStructuredData

Run this API

Send a JSON request to execute this API and receive the documented response payload.

Endpoint

MethodPOST
Pathhttps://api.nexscope.ai/seo/pageStructuredData
AuthBearer API key
Content-Typeapplication/json

Request parameters

NameTypeRequiredDescription
pageUrlstringrequired
Page url value used by this API operation.
Format: uri
Maximum length: 2048
task_idstringrequired
Task id value used by this API operation.
Minimum length: 1
Maximum length: 64

Response example

Example response envelope from the documented SEO API contract.

{
  "code": 0,
  "cost": "-1",
  "data": {
    "callId": "synthetic-call",
    "completedAt": null,
    "coverage": {
      "missing": [
        {
          "field": "synthetic",
          "reason": "UPSTREAM_FIELD_MISSING"
        }
      ],
      "status": "PARTIAL"
    },
    "requestedAt": "123",
    "result": {
      "coverage": {
        "invalidItemCount": 1,
        "limit": 1,
        "maxCrawlPages": 9007199254740992,
        "offset": 1,
        "pagesCrawled": 9007199254740992,
        "providerTotal": 9007199254740992,
        "returnedCount": 1,
        "sampled": false,
        "stopReason": "synthetic",
        "truncated": false
      },
      "items": [
        {
          "documents": [
            {
              "fields": [
                {
                  "children": [
                    {
                      "children": null,
                      "issues": null,
                      "name": null,
                      "types": null,
                      "values": null
                    }
                  ],
                  "issues": [
                    {
                      "level": null,
                      "message": null
                    }
                  ],
                  "name": "synthetic",
                  "types": [
                    "synthetic"
                  ],
                  "values": []
                }
              ],
              "format": "synthetic",
              "types": [
                "synthetic"
              ]
            }
          ],
          "testSummary": {
            "error": 9007199254740992,
            "fatal": 9007199254740992,
            "info": 9007199254740992,
            "warning": 9007199254740992
          }
        }
      ],
      "missingFields": [
        {
          "field": "synthetic",
          "reason": "synthetic"
        }
      ],
      "source": {
        "candidateId": "synthetic",
        "collectedAt": 9007199254740992,
        "observationKind": "synthetic",
        "product": "synthetic",
        "provider": "synthetic",
        "queriedAt": 9007199254740992,
        "sourceCallId": "synthetic",
        "sourcePlanVersion": "synthetic",
        "sourceSchemaVersion": "synthetic"
      },
      "warnings": [
        "synthetic"
      ]
    },
    "schemaVersion": "synthetic",
    "source": "synthetic",
    "status": "PARTIAL",
    "usage": {
      "billingStatus": "UNAPPROVED",
      "chargedCredits": "0"
    }
  },
  "msg": null,
  "time": "2026-01-01 00:00:00",
  "traceId": "synthetic-trace",
  "ts": "9007199254740993"
}

Response fields

NameTypeRequiredDescription
codeintegerrequired
0 is a successful envelope; inspect data.status separately.
Allowed: 0, 42008, 42009
coststringrequired
Elapsed processing milliseconds; not price. -1 for non-web context.
dataobjectrequired
Data value used by this API operation.
data.callIdstring | nulloptional
Call id value used by this API operation.
data.completedAtstring | integer | nulloptional
Completed at value used by this API operation.
data.coverageobjectoptional
Coverage value used by this API operation.
data.coverage.missingarrayoptional
Missing value used by this API operation.
data.coverage.missing[]objectrequired
Item in data coverage missing.
data.coverage.missing[].fieldstringoptional
Field value used by this API operation.
data.coverage.missing[].reasonstringoptional
Reason value used by this API operation.
data.coverage.statusstringoptional
Status value used by this API operation.
data.requestedAtstring | integer | nulloptional
Requested at value used by this API operation.
data.resultobject | nullrequired
Result value used by this API operation.
data.result.coverageobjectrequired
Coverage value used by this API operation.
data.result.coverage.invalidItemCountintegerrequired
Invalid item count value used by this API operation.
Minimum: 0
data.result.coverage.limitintegerrequired
Limit value used by this API operation.
Minimum: 0
data.result.coverage.maxCrawlPagesinteger | nullrequired
Max crawl pages value used by this API operation.
Minimum: 0
data.result.coverage.offsetintegerrequired
Offset value used by this API operation.
Minimum: 0
data.result.coverage.pagesCrawledinteger | nullrequired
Pages crawled value used by this API operation.
Minimum: 0
data.result.coverage.providerTotalinteger | nullrequired
Provider total value used by this API operation.
Minimum: 0
data.result.coverage.returnedCountintegerrequired
Returned count value used by this API operation.
Minimum: 0
data.result.coverage.sampledbooleanrequired
Sampled value used by this API operation.
Constant: true
data.result.coverage.stopReasonstring | nullrequired
Stop reason value used by this API operation.
data.result.coverage.truncatedbooleanrequired
Truncated value used by this API operation.
data.result.itemsarrayrequired
Items value used by this API operation.
Maximum items: 1
data.result.items[]objectrequired
Item in data result items.
data.result.items[].documentsarrayrequired
Documents value used by this API operation.
Maximum items: 200
data.result.items[].documents[]objectrequired
Item in data result items[] documents.
data.result.items[].documents[].fieldsarrayrequired
Fields value used by this API operation.
Maximum items: 200
data.result.items[].documents[].fields[]objectrequired
Item in data result items[] documents[] fields.
data.result.items[].documents[].fields[].childrenarrayrequired
Children value used by this API operation.
Maximum items: 200
data.result.items[].documents[].fields[].issuesarrayrequired
Issues value used by this API operation.
Maximum items: 100
data.result.items[].documents[].fields[].issues[]objectrequired
Item in data result items[] documents[] fields[] issues.
data.result.items[].documents[].fields[].issues[].levelstringrequired
Level value used by this API operation.
Allowed: fatal, error, warning, info
data.result.items[].documents[].fields[].issues[].messagestringrequired
Message value used by this API operation.
Maximum length: 4096
data.result.items[].documents[].fields[].namestringrequired
Name value used by this API operation.
data.result.items[].documents[].fields[].typesarrayrequired
Types value used by this API operation.
Maximum items: 100
data.result.items[].documents[].fields[].types[]stringrequired
Item in data result items[] documents[] fields[] types.
data.result.items[].documents[].fields[].valuesarrayrequired
Values value used by this API operation.
Maximum items: 100
data.result.items[].documents[].fields[].values[]anyrequired
Item in data result items[] documents[] fields[] values.
data.result.items[].documents[].formatstringrequired
Format value used by this API operation.
Constant: JSON_LD
data.result.items[].documents[].typesarrayrequired
Types value used by this API operation.
Maximum items: 100
data.result.items[].documents[].types[]stringrequired
Item in data result items[] documents[] types.
data.result.items[].testSummaryobjectrequired
Test summary value used by this API operation.
data.result.items[].testSummary.errorinteger | nullrequired
Error value used by this API operation.
Minimum: 0
data.result.items[].testSummary.fatalinteger | nullrequired
Fatal value used by this API operation.
Minimum: 0
data.result.items[].testSummary.infointeger | nullrequired
Info value used by this API operation.
Minimum: 0
data.result.items[].testSummary.warninginteger | nullrequired
Warning value used by this API operation.
Minimum: 0
data.result.missingFieldsarrayrequired
Missing fields value used by this API operation.
Maximum items: 10000
data.result.missingFields[]objectrequired
Item in data result missingFields.
data.result.missingFields[].fieldstringrequired
Field value used by this API operation.
data.result.missingFields[].reasonstringrequired
Reason value used by this API operation.
data.result.sourceobjectrequired
Source value used by this API operation.
data.result.source.candidateIdstringrequired
Candidate id value used by this API operation.
Constant: MD-PW-13
data.result.source.collectedAtinteger | nullrequired
Collected at value used by this API operation.
Minimum: 0
Maximum: 9007199254740991
data.result.source.observationKindstringrequired
Observation kind value used by this API operation.
Constant: CRAWL_SAMPLE
data.result.source.productstringrequired
Product value used by this API operation.
Constant: on_page
data.result.source.providerstringrequired
Provider value used by this API operation.
Constant: DATAFORSEO
data.result.source.queriedAtintegerrequired
Queried at value used by this API operation.
Minimum: 0
Maximum: 9007199254740991
data.result.source.sourceCallIdstring | nullrequired
Source call id value used by this API operation.
data.result.source.sourcePlanVersionstring | nullrequired
Source plan version value used by this API operation.
data.result.source.sourceSchemaVersionstring | nullrequired
Source schema version value used by this API operation.
data.result.warningsarrayrequired
Warnings value used by this API operation.
Maximum items: 1000
data.result.warnings[]stringrequired
Item in data result warnings.
data.schemaVersionstring | nulloptional
Schema version value used by this API operation.
data.sourcestring | nulloptional
Source value used by this API operation.
data.statusstringoptional
Status value used by this API operation.
Allowed: SUCCESS, PARTIAL, EMPTY, PROCESSING, UNKNOWN, FAILED
data.usageobject | nulloptional
Usage value used by this API operation.
data.usage.billingStatusstring | nulloptional
Billing status value used by this API operation.
data.usage.chargedCreditsstring | integer | nulloptional
Charged credits value used by this API operation.
msgstring | nullrequired
Available upstream msg/errmsg/message is preferred for success and failure; Chinese is translated to English. Missing successful message is null. Platform-only errors and task states use platform English. Message text never determines success or retry.
timestringrequired
yyyy-MM-dd HH:mm:ss
traceIdstring | nullrequired
Trace id value used by this API operation.
tsstringrequired
Epoch milliseconds; global long serializer.

One of option 1 — requires kind, value

NameTypeRequiredDescription
data.result.items[].documents[].fields[].values[]objectrequired
Item in data result items[] documents[] fields[] values.
data.result.items[].documents[].fields[].values[].kindstringrequired
Kind value used by this API operation.
Constant: STRING
data.result.items[].documents[].fields[].values[].valuestringrequired
Value value used by this API operation.
Maximum length: 4096

One of option 2 — requires kind, value

NameTypeRequiredDescription
data.result.items[].documents[].fields[].values[]objectrequired
Item in data result items[] documents[] fields[] values.
data.result.items[].documents[].fields[].values[].kindstringrequired
Kind value used by this API operation.
Constant: NUMBER
data.result.items[].documents[].fields[].values[].valuenumberrequired
Value value used by this API operation.

One of option 3 — requires kind, value

NameTypeRequiredDescription
data.result.items[].documents[].fields[].values[]objectrequired
Item in data result items[] documents[] fields[] values.
data.result.items[].documents[].fields[].values[].kindstringrequired
Kind value used by this API operation.
Constant: BOOLEAN
data.result.items[].documents[].fields[].values[].valuebooleanrequired
Value value used by this API operation.

One of option 4 — requires kind, value

NameTypeRequiredDescription
data.result.items[].documents[].fields[].values[]objectrequired
Item in data result items[] documents[] fields[] values.
data.result.items[].documents[].fields[].values[].kindstringrequired
Kind value used by this API operation.
Constant: NULL
data.result.items[].documents[].fields[].values[].valuenullrequired
Value value used by this API operation.

Accepted processing response

code 0 confirms acceptance. Use data.callId to query the same request; processing is not completion.

NameTypeRequiredDescription
codeintegerrequired
0 is a successful envelope; inspect data.status separately.
Constant: 0
coststringrequired
Elapsed processing milliseconds; not price. -1 for non-web context.
dataobjectrequired
Data value used by this API operation.
data.callIdstring | nullrequired
Call id value used by this API operation.
data.reasonstringrequired
Reason value used by this API operation.
Constant: IN_PROGRESS
data.retryablebooleanoptional
Retryable value used by this API operation.
data.statusstringrequired
Status value used by this API operation.
Constant: PROCESSING
data.taskIdstring | nulloptional
Task id value used by this API operation.
msgstring | nullrequired
Available upstream msg/errmsg/message is preferred for success and failure; Chinese is translated to English. Missing successful message is null. Platform-only errors and task states use platform English. Message text never determines success or retry.
timestringrequired
yyyy-MM-dd HH:mm:ss
traceIdstring | nullrequired
Trace id value used by this API operation.
tsstringrequired
Epoch milliseconds; global long serializer.

Error response

NameTypeRequiredDescription
codeintegerrequired
0 is a successful envelope; inspect data.status separately.
coststringrequired
Elapsed processing milliseconds; not price. -1 for non-web context.
dataobjectrequired
Data value used by this API operation.
data.callIdstring | nullrequired
Call id value used by this API operation.
data.reasonstring | nullrequired
Reason value used by this API operation.
data.retryablebooleanoptional
Retryable value used by this API operation.
data.statusstring | nullrequired
Status value used by this API operation.
data.taskIdstring | nulloptional
Task id value used by this API operation.
msgstring | nullrequired
Available upstream msg/errmsg/message is preferred for success and failure; Chinese is translated to English. Missing successful message is null. Platform-only errors and task states use platform English. Message text never determines success or retry.
timestringrequired
yyyy-MM-dd HH:mm:ss
traceIdstring | nullrequired
Trace id value used by this API operation.
tsstringrequired
Epoch milliseconds; global long serializer.

Retrieve a processing result

A response withPROCESSING and a callIdmeans the result is still being prepared. Use the result query below with the returned identifier. This lookup reads the stored result and does not spend credits.

curl -X GET https://api.nexscope.ai/seo/pageStructuredData/calls/{callId} \
  -H "Authorization: Bearer nk-xxxxxxxxxxxxxxxxx"

Responses

CodeDescription
200Default HTTP response for both success and many business errors. Only outer JSON code 0 indicates success or asynchronous acceptance; inspect data for the result.
429Execution admission rate limit; honor Retry-After when present.
503Execution admission is temporarily unavailable; honor Retry-After when present.
Opt-inX-Nexscope-Http-Status: semantic maps controller-handled business errors to HTTP status on run and task routes. Pre-authentication failures, such as a missing or invalid API key (code 11209, including an incomplete or corrupted copy) or an expired website login session (code 12001), may still return HTTP 200 before this mapping. Always check the outer JSON code; malformed requests and infrastructure failures may also return non-200 HTTP responses.

Data source, freshness, and limitations

Source, freshness, coverage, rate limits, and estimation notes are not specified in this API definition unless they appear in the request or response field documentation above. Do not assume official marketplace data or real-time freshness when it is not explicitly documented.

Step 1 of 2 · Connect your MCP client

MCP

V2 recommended

Connect remote agents through the standard MCP 2025-11-25 Streamable HTTP endpoint. Use OAuth 2.1 Authorization Code with PKCE, or an API key for compatibility.

POST https://api.nexscope.ai/mcp
MCP-Protocol-Version: 2025-11-25
Content-Type: application/json
Authentication

OAuth clients request the mcp:tools scope. The endpoint's 401 response advertises protected-resource metadata for authorization discovery.

Step 2 of 2 · Call the tool

Call a tool

{
  "jsonrpc": "2.0",
  "id": "tool-call-1",
  "method": "tools/call",
  "params": {
    "name": "nexscope_page_structured_data",
    "arguments": {
      "pageUrl": "https://www.nexscope.ai/",
      "task_id": ""
    }
  }
}

Legacy MCP v1

Existing API-key clients can continue using the compatibility endpoint. New integrations should use MCP v2.

GET / POST /mcp/legacy

What can you do with this API?

Data explained and practical use cases

AI Guide

Question

What structured-data information can Page Structured Data provide, and how might I use it?

AI answer

Page Structured Data reports JSON-LD documents found in a sampled page result, including their types, fields, and reported issues. It supports inspection of the returned markup; the schema does not establish that every markup format on the page is covered.

Data categoryDocumented fieldsWhat the values mean
Markup format and typesdocuments.format, documents.typesThe document format, documented as JSON_LD, and the types declared in each document.
Properties and valuesdocuments.fields[].name, documents.fields[].valuesThe names and values of properties found in a document.
Nested structuredocuments.fields[].children, documents.fields[].typesChild fields and types associated with a property.
Field issuesdocuments.fields[].issues[].level, documents.fields[].issues[].messageReported issue severity and explanation for a field.
Issue totalstestSummary.fatal, testSummary.error, testSummary.warning, testSummary.infoCounts of reported issues by severity, when available.
Missing datamissingFields[].field, missingFields[].reason, coverage.truncatedFields the result could not supply, the stated reasons, and whether the sample was cut short.
  • Check whether a product or article page declares the expected JSON-LD type.
    • Prompt example: “I am reviewing an ecommerce website. Could you check whether a product or article page declares the expected JSON-LD type? Show the relevant returned evidence and tell me what input you need from me.”
  • Inspect the returned property values before publishing a markup change.
    • Prompt example: “I am reviewing an ecommerce website. Could you inspect the returned property values before publishing a markup change? Show the relevant returned evidence and tell me what input you need from me.”
  • Triage fatal errors and warnings using the field-level messages and summary counts.
    • Prompt example: “I am reviewing an ecommerce website. Could you triage fatal errors and warnings using the field-level messages and summary counts? Show the relevant returned evidence and tell me what input you need from me.”
  • Review missing-field reasons before interpreting an absent property as absent from the page.
    • Prompt example: “I am reviewing an ecommerce website. Could you review missing-field reasons before interpreting an absent property as absent from the page? Show the relevant returned evidence and tell me what input you need from me.”

Related APIs