Skip to Content

Schema Markup

Extract every schema.org JSON-LD entity from a live URL, including entities nested inside @graph arrays.

GEThttps://api.rankparse.com/v1/schema-markup2 credits (refunded on failure)API key

Fetches a public URL at request time and extracts every <script type="application/ld+json"> block into a flat list of schema.org entities. Use it to verify structured data (Organization, Product, FAQPage, Article and so on) after a deploy, or to compare a competitor's markup. Malformed blocks never fail the request: they are skipped and reported one by one. This is a live fetch, not link graph data.

Query parameters

urlstringrequired

Full http:// or https:// URL of the page. The same rules and limits as Page SEO apply: no fragment, public hosts only, 8 second timeout, 2 MB body cap, up to 5 redirects. A missing or invalid value returns 400 invalid_url before any charge.

Response

urlstring

The URL you sent.

dataarray

One entry per schema.org entity, flattened across blocks and @graph arrays. Empty when the page has no usable JSON-LD.

Show properties
typearray of strings

The entity's @type, normalized to an array even when the block declared a single string.

idstring | null

The entity's @id, or null.

block_indexinteger

0-based index of the <script> block the entity came from, counting every JSON-LD block on the page, malformed ones included.

sourcestring

top_level for a block's own object or array item, graph for an entity nested inside @graph.

propertiesobject

The complete parsed JSON-LD object, including @context, @type, @id and every other property.

totalinteger

Number of entities in data.

final_urlstring

The URL after redirects.

status_codeinteger

HTTP status the target returned. A 404 page is still parsed and billed.

response_time_msinteger

Fetch time in milliseconds.

has_schema_markupboolean

true when at least one entity was extracted.

typesarray of strings

Unique types across all entities, sorted alphabetically.

block_countinteger

JSON-LD blocks found on the page.

valid_block_countinteger

Blocks that parsed as JSON.

invalid_block_countinteger

Blocks that failed to parse.

invalid_blocksarray

{ index, error } for each malformed block, where index is its block index and error is the JSON parse message.

credits_usedinteger

Always 2 on success.

credits_remaininginteger

Your balance after the charge.

Behavior and limits

  • What counts as an entity. An object counts only if it has an @type. A top-level array is expanded item by item. An object that has both its own @type and an @graph yields the object itself (source: "top_level") and every graph member (source: "graph").
  • Nesting depth. Arrays and @graph nesting are followed up to 6 levels deep. Entities nested as property values (for example an author object inside an Article) stay inside properties and are not listed separately.
  • Valid JSON with no entities. A block that parses but is not an object or array (for example a bare string), or an object with neither an @type nor an @graph, counts as valid but adds nothing to data.
  • No JSON-LD. A page without structured data returns 200 with data: [], has_schema_markup: false and block_count: 0, not an error. It is billed.
  • Static HTML only. JSON-LD injected by client-side JavaScript after load is not seen. Microdata and RDFa are not read.
  • Credits: 2 per call. Failures after the charge (for example 503 fetch_failed) are refunded. Missing, malformed or private URLs are rejected before billing. No caching: every call fetches the page again.
  • Rate limit: 60 requests per minute per key. See Rate limiting.

Errors

HTTPCodeWhen
400invalid_urlMissing, malformed or non-http(s) URL; credentials, whitespace or a fragment in the URL.
400private_ipThe host, or a redirect target, is private, reserved or local.
400response_too_largeThe page body exceeded 2 MB. Refunded.
401invalid_api_keyMissing, invalid or revoked API key.
402insufficient_creditsBalance is lower than 2 credits.
402spend_cap_reachedYour monthly spend cap is reached.
429rate_limitedMore than 60 requests in a minute.
503fetch_failedTarget unreachable or redirected too many times. Refunded.
503timeoutTarget did not respond within 8 seconds. Refunded.

See Errors for the shared error format.

MCP tool: get_schema_markup (argument url).