JSON-LD Extractor – Schema.org Data & Rich Snippets avatar

JSON-LD Extractor – Schema.org Data & Rich Snippets

Pricing

from $0.50 / 1,000 results

Go to Apify Store
JSON-LD Extractor – Schema.org Data & Rich Snippets

JSON-LD Extractor – Schema.org Data & Rich Snippets

Extract Schema.org JSON-LD and microdata from any URLs: Product, Article, Recipe, Event, Organization & more, one row per entity with full data. For SEO audits, e-commerce & RAG.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

ninhothedev

ninhothedev

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

2

Monthly active users

5 days ago

Last modified

Share

JSON-LD Extractor – Schema.org Structured Data & Rich Snippets Scraper

JSON-LD Extractor pulls the Schema.org structured data that websites publish in <script type="application/ld+json"> blocks – Product, Offer, Article, NewsArticle, Recipe, Event, Organization, LocalBusiness, FAQPage, BreadcrumbList, WebSite and every other type – from any list of URLs. Each entity becomes one clean row with its @type, name and the full original JSON-LD object; @graph containers and arrays are flattened automatically, and legacy HTML microdata (itemscope / itemprop) can be extracted too. Export structured data to JSON, CSV, Excel or Google Sheets – no API key, no browser, pay only per extracted entity.

Built for SEO specialists auditing rich-snippet markup, agencies comparing competitors' schema, e-commerce teams collecting product and price data from structured markup, and developers feeding clean, typed page data into RAG pipelines, knowledge graphs or databases.

What data can you extract?

FieldExampleDescription
urlhttps://www.bbc.com/newsPage the entity was found on (normalized input URL)
schema_typeWebPageSchema.org @type as published (string, or array for multi-typed entities)
nameBBC News - Breaking news, video and …First of name, headline or title (null if none)
data{"@type": "WebPage", "publisher": {…}}Complete original JSON-LD / microdata object with all nested properties
sourcejson-ldjson-ld or microdata
entity_idc7dd25dc4371…Stable SHA-256 ID of page URL + source + entity content (for dedupe and change tracking)
scraped_at2026-10-15T18:04:56+00:00UTC timestamp of extraction

Whatever the site publishes inside data is kept as-is – e.g. offers.price, aggregateRating, author, datePublished, recipeIngredient, address, geo or sameAs social profiles.

How to use the JSON-LD Extractor

  1. Open the actor and paste page URLs into Page URLs – full URLs or bare domains (example.com, HTTPS is assumed). Duplicates are removed.
  2. Set Max entities (default 5 – raise it to e.g. 500 for real jobs) and enable Include microdata if the site uses itemscope / itemprop markup. Click Start.
  3. Download the entities as JSON (best for nested data), CSV or Excel, or send them to Google Sheets, Make, Zapier or n8n.

Example input:

{
"urls": ["https://www.python.org/", "https://www.bbc.com/news"],
"maxItems": 100,
"includeMicrodata": false
}

If a page has no JSON-LD at all, microdata is used as an automatic fallback even when Include microdata is off.

Output example

Real output from local test runs (default input https://www.python.org/, plus https://www.bbc.com/news; entity_id shortened):

[
{
"url": "https://www.python.org/",
"schema_type": "WebSite",
"name": null,
"data": {
"@context": "https://schema.org",
"@type": "WebSite",
"url": "https://www.python.org/",
"potentialAction": {
"@type": "SearchAction",
"target": "https://www.python.org/search/?q={search_term_string}",
"query-input": "required name=search_term_string"
}
},
"source": "json-ld",
"scraped_at": "2026-10-15T18:04:47.144982+00:00",
"entity_id": "f69d62ecbeaef5af..."
},
{
"url": "https://www.bbc.com/news",
"schema_type": "WebPage",
"name": "BBC News - Breaking news, video and the latest top stories from the U.S. and around the world",
"data": {
"@context": "https://schema.org",
"@type": "WebPage",
"url": "https://www.bbc.com/news",
"publisher": {
"@type": "NewsMediaOrganization",
"name": "BBC News",
"sameAs": ["https://www.facebook.com/BBCGlobalFB/", "https://twitter.com/bbc"]
}
},
"source": "json-ld",
"scraped_at": "2026-10-15T18:04:56.464269+00:00",
"entity_id": "c7dd25dc4371cb53..."
}
]

Every run also stores a RUN_SUMMARY record in the key-value store with per-URL coverage (complete, empty, limited, fetch_error, parse_error) and the number of entities found on each page.

Pricing

This actor uses pay-per-event pricing – you pay per extracted entity (dataset row), not per page:

  • $0.50 per 1,000 entities ($0.0005 per result)
  • $0.00005 per actor start (per GB of memory)

Examples:

ScenarioCost
Default test run (up to 5 entities)≈ $0.003
100 product pages × ~3 entities each≈ $0.15
1,000 entities from a site audit≈ $0.50
1,000 pages × ~1 entity, re-checked monthly≈ $0.50 / month

Use Max entities to cap spending precisely. No proxies or third-party APIs are used, so there are no hidden costs.

Use cases

  • SEO schema audits – inventory which Schema.org types every page publishes and spot pages missing Product, Article, FAQPage or BreadcrumbList markup.
  • Competitor structured data analysis – compare how competitors mark up products, reviews and FAQs to win rich snippets.
  • E-commerce data collection – read product names, prices, availability and ratings straight from Product / Offer JSON-LD.
  • Local business and company data – extract Organization and LocalBusiness addresses, phone numbers, logos and social profiles.
  • RAG and AI pipelines – feed clean, typed entities instead of noisy HTML into LLMs, vector stores or knowledge graphs.
  • Markup change monitoring – schedule runs and compare entity_id values to detect when structured data changes.

Integrations and API

Run the structured data extractor from the Apify API, CLI or any integration: Make, Zapier, n8n, Google Sheets, Slack, Airbyte or webhooks.

Python example with the official apify-client:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("ninhothedev/json-ld-extractor").call(
run_input={"urls": ["https://www.python.org/", "https://www.bbc.com/news"], "maxItems": 100}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["url"], item["schema_type"], item["name"])

FAQ

Is it legal to extract JSON-LD? JSON-LD is public markup that websites publish specifically so search engines and other machines can read it. The actor only reads publicly accessible HTML pages. Respect each site's terms and applicable data-protection rules when you reuse the data.

Does it validate my schema for Google rich results? No. It extracts the structured data exactly as published so you can audit it; it does not run Google's Rich Results Test or Schema.org validation.

What are the limits? Up to 1,000 URLs and 1,000 entities per run. Pages are fetched sequentially with a 20-second timeout, up to 3 redirects and a 2 MB size limit. Only public HTML pages on standard ports are supported.

Does it render JavaScript? No. It reads the server-delivered HTML, which is where almost all sites put their JSON-LD. Markup injected only by client-side JavaScript is not seen.

What if a site blocks the request or a page fails? No proxies are used. If any page cannot be fetched or contains malformed JSON-LD, all entities from the other pages are still saved, but the run is marked as failed so you notice – check RUN_SUMMARY for the affected URLs.

Can I schedule it? Yes – create an Apify Schedule and connect the dataset to Google Sheets or a webhook to monitor structured data over time.

Something does not work? Open an issue on the actor's Issues tab with the run ID and an example URL – we usually respond within a day.