Extract JSON-LD and Microdata, then score Schema.org markup quality

Structured Data Scraper & Validator crawls a URL list and extracts Schema.org JSON-LD and Microdata, validates markup syntax, and flags missing fields. Each page gets a numeric quality score and letter grade plus errors and warnings. This is schema markup extract-and-validate, not a head Open Graph / Twitter / robots audit and not a page-body text extract.

Open Structured Data Scraper & Validator on Apify

JSON-LD and Microdata validation, not head tags or body text

Use this page when the job is extracting and scoring Schema.org structured data. Use Meta Tag & OpenGraph Scraper when the job is title, canonical, robots, Open Graph, Twitter Card, and hreflang in the HTML head. Use Website Content Extractor when the job is cleaned docs, product, pricing, policy, or help-center body text.

This Actor Meta Tag & OpenGraph Scraper Website Content Extractor
Intent Extract and validate JSON-LD and Microdata schema markup Technical SEO audit of head metadata, social previews, robots, and a JSON-LD type/name listing Clean docs, product, pricing, policy, and help-center HTML
What it reads Page HTML for Schema.org JSON-LD and Microdata HTML head tags (OG, Twitter, robots, canonical, hreflang) plus embedded JSON-LD type/name Live page HTML for cleaned markdown, text, or HTML body
Primary output Per-page jsonLd, microdata, errors, warnings, and score (0–100 and A–F) Title, description, canonical, robots, Open Graph, Twitter Card, hreflang, JSON-LD listing, issue flags web_content rows: title, markdown/text, word count, optional metadata
Max URLs 200 per run 500 per run 200 per run
Not this job Head OG/Twitter/robots audits; cleaned page body Microdata extract, schema completeness score, error/warning lists JSON-LD or Microdata validation

The live schema description is: Validate JSON-LD and Microdata structured data across multiple pages. Detect missing or malformed Schema.org markup. The Store description is: Crawl websites to extract JSON-LD and Microdata, validate schema markup syntax, and flag missing fields across massive URL lists. Live input is a urls list, maximum 200 per run — not a sitemap URL field.

Use cases

Published Key Features: JSON-LD and Microdata extraction (both formats); quality scoring 0–100 with an A–F grade per page; error detection for missing @type, invalid JSON, and missing @context; warnings for sparse data and missing recommended properties; bulk processing up to 200 URLs per run; webhook delivery for SEO monitoring workflows.

How is Structured Data Scraper & Validator different from Meta Tag & OpenGraph Scraper and Website Content Extractor?

This Actor extracts Schema.org JSON-LD and Microdata from page HTML, validates syntax, flags missing types/contexts and recommended properties, and returns a 0-100 score with an A-F grade plus errors and warnings. Required input is urls (maximum 200). The live schema description is: Validate JSON-LD and Microdata structured data across multiple pages. Detect missing or malformed Schema.org markup. Meta Tag & OpenGraph Scraper is a technical SEO metadata audit of HTML head fields: title, description, canonical, robots, charset, viewport, Open Graph, Twitter Card, hreflang, and a JSON-LD type/name listing with issue flags. It does not produce this per-page schema score, Microdata extract, or error/warning lists. Website Content Extractor cleans docs, product, pricing, policy, and help-center pages into markdown or text. It does not extract or validate JSON-LD or Microdata. Use this Actor for schema markup extract-and-validate. Use Meta Tag & OpenGraph Scraper for head OG/Twitter/robots audits. Use Website Content Extractor for body text.

What input is required?

urls is required: list of page URLs to check for Schema.org structured data (JSON-LD, Microdata). Max 200. Schema editor is stringList. Schema prefill is https://www.google.com, https://github.com. Optional live schema fields are delivery (dataset or webhook, default dataset), webhookUrl (used when delivery is webhook; Slack, Discord, or any HTTP endpoint), concurrency (integer, default 3, minimum 1, maximum 10), dryRun (boolean, default false), and maxChargeUsd (number, default 1, minimum 0). additionalProperties is false. README examples that send includeWarnings, sitemapUrl, limit, vocabularies, or emitNullRateReport are not live schema fields.

Field Type Default Notes
urls array required (prefill https://www.google.com, https://github.com) Page URLs to check for Schema.org JSON-LD and Microdata. Max 200. Schema editor is stringList.
delivery string dataset dataset or webhook. Dataset saves to Apify Dataset (recommended).
webhookUrl string Used when delivery is webhook. Slack, Discord, or any HTTP endpoint.
concurrency integer 3 Parallel requests; minimum 1, maximum 10. README FAQ: 1–10 parallel requests. README tip: keep concurrency ≤ 5 on production sites.
dryRun boolean false Run without saving results or sending webhooks
maxChargeUsd number 1 Safety cap. Billable rows beyond this cap are returned as no-charge limit_reached summaries. Minimum 0. Not in the README input table.

The schema sets additionalProperties to false. Live schema names are urls, delivery, webhookUrl, concurrency, dryRun, and maxChargeUsd.

Published README Input Example (schema-valid urls plus concurrency):

{
  "urls": ["https://www.google.com", "https://github.com", "https://schema.org"],
  "concurrency": 3
}

Published Store example run input:

{
  "urls": [
    "https://www.google.com",
    "https://schema.org"
  ],
  "concurrency": 3,
  "delivery": "dataset",
  "dryRun": false
}

Run a JSON-LD and Microdata audit on Apify

Which README input examples are not live schema fields?

README examples labeled Single page validation, Sitemap-driven crawl, and Audit batch with null-rate report send includeWarnings, sitemapUrl, limit, vocabularies, and emitNullRateReport. Those names are not in the live input schema. additionalProperties is false, so do not send them. The schema-valid README Input Example is urls plus concurrency. The published Store example run input is urls, concurrency, delivery, and dryRun. Live schema also includes maxChargeUsd (default 1), which is not in the README input table.

What does a result row contain?

The published README output table lists meta, results, and per-page fields results[].url, jsonLd, microdata, errors, warnings, score, error, and checkedAt. The published README sample is a single page object (https://www.google.com) with jsonLd type WebSite, context https://schema.org, name Google, _keyCount 7, empty microdata, empty errors and warnings, and score total 80 grade A. error and checkedAt are in the field table and not shown on that sample. The sample is a README illustration, not a live coverage guarantee.

Published README output example:

{
  "url": "https://www.google.com",
  "jsonLd": [
    { "type": "WebSite", "context": "https://schema.org", "name": "Google", "_keyCount": 7 }
  ],
  "microdata": [],
  "errors": [],
  "warnings": [],
  "score": { "total": 80, "grade": "A" }
}

There is no published full-page markdown or article-body field. For cleaned page body, send docs, product, or policy URLs to Website Content Extractor. For head OG/Twitter/robots fields, use Meta Tag & OpenGraph Scraper.

Published README FAQ: if an input URL is unreachable, the Actor records an error row with the failure reason and continues processing successful URLs. Recurring runs can use Apify Schedules (hourly, daily, weekly) with webhook delivery for change alerts.

How do dataset, webhook, and dry-run delivery work?

delivery defaults to dataset (saves to Apify Dataset; recommended). Set delivery to webhook and provide webhookUrl to send results to a URL. webhookUrl works with Slack, Discord, or any HTTP endpoint. dryRun true runs without saving results or sending webhooks, for testing. maxChargeUsd defaults to 1 as a safety cap; billable rows beyond that cap are returned as no-charge limit_reached summaries. Store Quickstart: start with Quickstart (Dataset) to validate the score and error model on two public pages; Batch Validation for multi-page quality scoring; Webhook Alert to catch schema errors on recurring runs.

README tips: results are dataset-first; use Apify API run-sync-get-dataset-items for JSON in CI; enable dryRun before a paid cron schedule; run a tiny URL count first, then scale. README FAQ also notes webhook delivery with a Zapier, Make, or n8n catcher, or the Apify REST API from Apps Script / Airtable automations.

How is Structured Data Scraper & Validator priced?

Billing is pay per event. The published Store card is from $9.00 per 1,000 results. Live Store events are Actor Start at $0.001 (charged when the Actor starts; number of events depends on Actor memory, one event per GB, minimum one event) and result at $0.009 (single result in the default dataset). Platform usage is listed as included on the pricing page. The README Cost section still quotes actor-start $0.01 plus dataset-item $0.003 ($3.01 for 1,000 items); live Store billing currently uses the $9.00 / 1,000 card and the $0.001 / $0.009 events.

From $9.00 per 1,000 results ($0.009 per default-dataset result; Actor Start $0.001)

See Structured Data Scraper & Validator pricing on Apify

Limits to keep in mind

Open Structured Data Scraper & Validator on Apify

Related pages