JSON-LD Structured Data Lookup — Schema.org Extractor API
Pricing
from $2.00 / 1,000 successful lookups
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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
@typefound 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
- In the Apify Console. Open the actor page and click Start — the
itemsfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - 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"]}'
- 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/JobPostingdata 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).