JSON-LD Structured Data Lookup — Schema.org Extractor API avatar

JSON-LD Structured Data Lookup — Schema.org Extractor API

Pricing

from $2.00 / 1,000 successful lookups

Go to Apify Store
JSON-LD Structured Data Lookup — Schema.org Extractor API

JSON-LD Structured Data Lookup — Schema.org Extractor API

Extract every schema.org JSON-LD object (Product, Article, JobPosting, Organization, and more) already embedded in a page's HTML for SEO. No rendering, no third-party API — reads what the page already publishes. Charged only when structured data is found.

Pricing

from $2.00 / 1,000 successful lookups

Rating

0.0

(0)

Developer

Adrian Voss

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

JSON-LD Structured Data Lookup

Extract every schema.org JSON-LD object already embedded in a page's HTML — Product, Article, JobPosting, Organization, BreadcrumbList, FAQPage, and more. No third-party API, no rendering: this reads exactly what the page already publishes in its <script type="application/ld+json"> blocks for search engines, and hands it back as clean structured JSON.

Features

  • Full object extraction. Every JSON-LD block on the page is parsed and returned, including objects nested inside a top-level @graph.
  • Type summary. A deduplicated list of every @type found on the page (Product, Article, JobPosting, etc.), so you can see what's there without scanning the raw objects.
  • Resilient parsing. A malformed JSON-LD block is skipped on its own — one bad block doesn't fail the whole page.
  • Bulk-friendly. Feed in a list of URLs with adjustable maxConcurrency.

How to use JSON-LD Structured Data Lookup — Schema.org Extractor API

  1. In the Apify Console. Open the actor page and click Start — the items field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~jsonld-structured-data-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"items":["https://www.nytimes.com"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Input

{
"items": ["https://example.com/product/123"],
"maxConcurrency": 5,
"proxyConfiguration": { "useApifyProxy": true }
}

items is the only required field — a list of page URLs (a scheme is added automatically if missing, defaulting to https://). One dataset row is returned per URL; rows with "found": false are never charged. maxConcurrency (default 5, up to 20) controls how many requests run in parallel. proxyConfiguration routes requests through Apify Proxy.

Output

{
"query": "https://example.com/product/123",
"found": true,
"data": {
"url": "https://example.com/product/123",
"objectCount": 2,
"types": ["Product", "BreadcrumbList"],
"objects": [
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless Headphones",
"sku": "WH-1000",
"offers": { "@type": "Offer", "price": "199.00", "priceCurrency": "USD" }
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [ "..." ]
}
],
"truncated": false
},
"scrapedAt": "2026-08-20T12:00:00.000Z"
}

objects holds up to 25 raw JSON-LD objects found on the page; truncated: true means more than 25 were present and the rest were cut off. A page with no application/ld+json blocks — or where every block fails to parse — gets a dataset row with "found": false, so you always get one row per input URL, but you're never charged for it.

Use cases

  • SEO audits — confirm your product, article, or job pages actually emit the structured data you think they do, across a whole site.
  • Competitive SEO research — see exactly what schema types and fields a competitor publishes for rich results.
  • Content pipeline enrichment — pull structured Product/Article/JobPosting data out of pages without writing a custom parser per site.
  • Schema coverage monitoring — track structured-data presence across a URL list over time to catch regressions after a site redesign.

Pricing

$4 per 1,000 results, plus a $0.00005 start fee. Misses (found:false) are never charged.

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~jsonld-structured-data-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"items":["https://www.nytimes.com"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~jsonld-structured-data-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"items":["https://www.nytimes.com"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~jsonld-structured-data-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"items":["{{value}}"]}, mapping the row's value into the items array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "JSON-LD Structured Data Lookup | Apify" — the agent will find and run this actor.

FAQ

What counts as "not found"? A page with no <script type="application/ld+json"> block, or where every block on the page fails to parse as JSON, returns "found": false and is never charged.

Does this render JavaScript to find dynamically-injected JSON-LD? No — this reads the raw HTML response as delivered by the server. If a site injects JSON-LD client-side after page load via JavaScript, it won't be captured.

Not every page type carries rich JSON-LD — is that expected? Yes. Coverage depends entirely on what the site chooses to publish: product, article, recipe, and job-posting pages tend to carry the richest markup, while general informational or homepage-type URLs often have little or none. A found: false result on a page you expected to have data is worth spot-checking in your browser's "View Page Source" first.

What happens if one JSON-LD block on the page is broken? It's skipped individually — a malformed block doesn't prevent extraction of the other valid blocks on the same page.

Are objects inside a top-level @graph included? Yes — @graph arrays are flattened automatically, so every object inside one appears in objects and contributes to types.

Can I check thousands of URLs at once? Yes — maxConcurrency controls how many requests run in parallel (default 5, up to 20).