# Website JSON-LD Structured Data Extractor

> JSON-LD extractor: read schema.org structured data from your list of URLs. Keep the original objects, see schema types and find broken JSON scripts.

URL: https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/

Category: Search, SEO & ads · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/website-jsonld-structured-data-scraper?fpr=cliqto

Read JSON-LD structured data from a list of web pages. You get the original objects and their schema types. You also see broken scripts and page errors.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `{&quot;url&quot;: &quot;https://apify.com&quot;}` in Page URLs. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Read JSON-LD structured data from public HTML pages. Get the original objects, their schema types, and the script and graph path for each object. Use this Actor for SEO checks and for moving structured web data into your own tools.





## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.001 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Page result saved | $0.0018 | One saved result for a public page, including empty pages, filtered pages, partial results and page errors. |

- One page: about $0.0028.
- 1,000 pages: about $1.80.
- Every day 100 pages, for 30 days: about $5.43 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/website-jsonld-structured-data-scraper?fpr=cliqto

## Questions

### Does it crawl the whole website?

No. It reads only the URLs you add.

### Does it fix or change the JSON-LD?

No. It keeps the original values. It does not repair invalid JSON.

### Do I pay for a page with no JSON-LD?

Yes. Each saved page result is one page event, even if it is empty.

### Does it read @graph blocks?

Yes. It reads single objects, arrays and @graph nodes, with a path for each one.

### Do I need a website account?

No. Add public pages that can be read without login.

### Do I pay if there are no matching objects?

Yes. A saved empty-page result or a filter with no matches costs one page event. The start charge and platform usage also apply.

### Can this replace a scraper that also returns meta tags?

Only the core `url`, `jsonLd`, `schemaTypes`, and `scrapeDate` fields overlap. This Actor adds source paths and statuses. Meta and social tag fields need a separate tool.

## Data fields

- `inputIndex` (integer)
- `url` (string)
- `finalUrl` (string)
- `httpStatus` (integer)
- `status` (string)
- `schemaTypes` (array)
- `jsonLd` (array)
- `objects` (array)
- `issues` (array)
- `scriptCount` (integer)
- `objectCount` (integer)
- `matchedObjectCount` (integer)
- `errorCode` (string)
- `requests` (integer)
- `retries` (integer)
- `responseBytes` (integer)
- `scrapeDate` (string)

## Input settings

- `startUrls` (array, required): 1–100 public HTTP(S) URLs. Exact duplicates are fetched once. No crawling. Use plain public URLs without login or secrets.
- `typeFilters` (array): Exact @type values, e.g. Product. Empty keeps all. Filtering does not lower page charges.
- `maxObjectsPerPage` (integer): 1–1000. A smaller value stops extraction early and marks the page partial.
- `requestTimeoutSecs` (integer): Includes redirects and retries. Reduce for slow pages.
- `maxRunSecs` (integer): Stops new pages at the time limit; saved results stay available.

## Step by step on Apify

1. Open Input.
2. Add `https://apify.com` to Page URLs (`startUrls`).
3. Keep the default settings. To keep only a website object, set `typeFilters` to `["WebSite"]`.
4. Click Start.
5. Open Pages and JSON-LD. Check `status`, `schemaTypes`, and `objects`.
6. In the key-value store, open `RUN_SUMMARY` to check unprocessed pages.

## Use cases

| Task | Input | Fields to use |
|---|---|---|
| Check JSON-LD coverage | Public page URLs; no filter | `status`, `schemaTypes`, `issues` |
| Collect product or recipe objects | Exact source type in `typeFilters` | `objects[].data`, `jsonLd` |
| Find a broken script | Public page URLs | `issues[].scriptIndex`, `issues[].code` |
| Track where a graph node came from | Pages with `@graph` | `url`, `inputIndex`, `scriptIndex`, `jsonPath` |

## Tips

- Use the schema type filter to keep only the objects you need.
- Look at the issues list to find broken scripts fast.
- Use our metadata scraper if you also need meta and Open Graph tags.

## Limits



- Only public HTTP(S) pages on standard ports. Private network IPs, URL login, and unsafe redirects are blocked.
- HTML only. UTF-8 and ASCII are supported; missing charset is read as UTF-8. A source that ignores `Accept-Encoding: identity` is rejected rather than read as broken text.
- 1 MB HTML body, measured while reading. Larger pages give `BODY_LIMIT`; they are not reported as empty pages.
- Up to 3 redirects, 2 retries, and 6 transport attempts per URL. 429 and 5xx responses can be retried within the same page deadline.
- Up to 1000 extracted objects per page. Any JSON nesting deeper than 64 levels or more than 10,000 JSON values per script gives `DEPTH_LIMIT`. That script is skipped; other scripts can still return objects. The graph walk also stops after 10,000 visited entries per page.
- 2 MB per saved page row and 8 MB total page output. Whole objects can be omitted to meet a row limit; the row becomes `partial`. Up to 200 issues are saved per page. If there are more, the issue list is shortened and a page-level `OBJECT_LIMIT` is added. A total output limit stops new saved pages. Check `unprocessedUrlCount`.
- Limits are separate: 100 large pages with 1000 objects each may hit the output or time limit first.
- JavaScript-only JSON-LD is not visible to this HTTP version. Linked contexts are kept as values; they are never loaded.

## Sample result

```json
{
  "url": "https://apify.com/",
  "finalUrl": "https://apify.com/",
  "status": "complete",
  "schemaTypes": ["Organization", "SoftwareApplication", "WebSite"],
  "objectCount": 3,
  "matchedObjectCount": 1,
  "objects": [{
    "scriptIndex": 1,
    "jsonPath": "",
    "types": ["WebSite"],
    "context": "https://schema.org",
    "data": {
      "@context": "https://schema.org",
      "@type": "WebSite",
      "@id": "https://apify.com/#website",
      "name": "Apify",
      "url": "https://apify.com/",
      "publisher": {"@id": "https://apify.com/#organization"}
    }
  }],
  "issues": [],
  "errorCode": null
}
```

## Use it from code

Actor ID: `cliqtomedia/website-jsonld-structured-data-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/website-jsonld-structured-data-scraper").call(run_input={
    "startUrls": [
        {
            "url": "https://apify.com"
        },
        {
            "url": "https://example.com"
        }
    ],
    "typeFilters": []
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~website-jsonld-structured-data-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls": [{"url": "https://apify.com"}, {"url": "https://example.com"}], "typeFilters": []}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/website-jsonld-structured-data-scraper")
result = tool.invoke({"run_input": {"startUrls": [{"url": "https://apify.com"}, {"url": "https://example.com"}], "typeFilters": []}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do.
- [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon.

## Similar tools

- [Website Contact Scraper](https://cliqtomedia.com/actors/website-contacts-scraper/)
- [Link Route Audit — Bulk HTTP Status & Redirects](https://cliqtomedia.com/actors/bulk-url-status-redirect-checker/)
- [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/)
- [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/)
- [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/)
- [Google Ads Transparency Scraper - Ad Text, No Login](https://cliqtomedia.com/actors/google-ads-transparency-scraper/)
