AI Web Data Extractor – Any URL or PDF to JSON, No API Key
Pricing
from $4.00 / 1,000 page extracted to jsons
AI Web Data Extractor – Any URL or PDF to JSON, No API Key
Turn any web page, PDF or DOCX into structured JSON with an LLM. Describe the fields in plain English or a JSON schema; output is validated. No OpenAI/OpenRouter key: tokens are billed to your Apify account via Apify's OpenRouter Actor. $4 per 1,000 pages.
Pricing
from $4.00 / 1,000 page extracted to jsons
Rating
0.0
(0)
Developer
Cemal Atakli
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
AI Web Data Extractor – Turn Any URL or PDF into Structured JSON (No API Key)
Give it web pages, PDFs or DOCX files and say what you want in plain English or as a JSON schema. It returns clean, typed JSON for every page, checked against your schema. You don't write selectors, need an OpenAI or OpenRouter key, or run a browser.
- Any page layout: product pages, job posts, company "About"/contact pages, event pages, articles, real-estate listings, research papers, price lists.
- Listings too: turn on Many records per page to get every product, job or row on a category page as an array.
- PDF and DOCX: text is read straight from the file (no OCR needed for text PDFs).
- Validated output: every answer is parsed and validated against your schema. If the JSON is invalid, the model gets one retry. Rows that still fail are free.
- Pick your model: Gemini 2.5 Flash-Lite (default, cheapest), Gemini 2.5 Flash, GPT-4.1 mini, GPT-5 mini, Claude Haiku 4.5, DeepSeek, or any OpenRouter model ID.
$4 per 1,000 pages extracted, plus the LLM tokens at OpenRouter prices billed to your Apify account. That comes to about $0.0005 per page with the default model (details below).
How it works
- Each URL is fetched over plain HTTP. robots.txt is respected and the User-Agent carries a contact address.
- HTML is cleaned to Markdown: menus, footers and cookie banners are removed, and tables and links are kept. Text is read from PDFs and DOCX files.
- The text and your instruction or schema go to an LLM through Apify's own OpenRouter Actor (apify/openrouter).
- The answer is parsed and lightly normalized (
"$1,299"→1299,"yes"→true), then validated. If it fails validation it is retried once, then saved.
Pricing: what you pay
| What | Price | Who bills it |
|---|---|---|
Page extracted to valid JSON (page-extracted) | $0.004 ($4 / 1,000) | This Actor |
| Actor start | $0.00005 | This Actor |
| LLM tokens | OpenRouter list price for the model you pick | Apify, to your account, via the apify/openrouter Actor |
| Failed pages, robots-blocked pages, JS-only pages, invalid output after retry | $0 for this Actor (you still pay any LLM tokens already used) | – |
About the LLM cost. This Actor has no AI key of its own. It calls Apify's OpenRouter proxy with your run's Apify token, so Apify charges the exact token cost to your Apify account. It shows up as usage of the apify/openrouter Actor, separate from this Actor's per-page fee. Max total charge per run limits only this Actor's per-page fee, not the token cost. Use Max pages and Max characters sent to the LLM to cap token spend.
Typical token cost per page with google/gemini-2.5-flash-lite ($0.10 per million input tokens, $0.40 per million output tokens):
| Page | Input tokens | LLM cost (paid plan) | LLM cost (Apify free plan: 10×) |
|---|---|---|---|
| Product / contact page | 1–3k | ~$0.0002–0.0004 | ~$0.002–0.004 |
| Long article, 3-page PDF | ~10k | ~$0.0012 | ~$0.012 |
Apify free plan: Apify's OpenRouter Actor charges free-plan users 10× the OpenRouter price. On any paid Apify plan you pay the plain OpenRouter price. Bigger models (GPT-5 mini, Claude Haiku) cost 3–10× more per token than Flash-Lite. Each LLM answer is capped at 2,048 output tokens.
Compared with other AI extractors
| This Actor | apify/ai-web-scraper | |
|---|---|---|
| Price per page | $0.004 + ~$0.0005 tokens | $0.03 |
| 1,000 pages (paid plan, Flash-Lite) | ≈ $4.50 | $30 |
| PDF / DOCX URLs | Yes | – |
| JSON-schema validation + retry | Yes | – |
| Failed / invalid rows | Free | – |
| Own API key needed | No | No |
(Competitor price from its Store page, Oct 2026.)
Input examples
Product pages → fixed fields (the one-click example):
{"startUrls": [{ "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html" }],"instruction": "Extract the book details. Price as a number in GBP.","fields": ["title", "price (number)", "currency", "inStock (boolean)", "availableCount (integer): copies in stock", "description"]}
Category / search page → every item with a JSON schema:
{"startUrls": [{ "url": "https://books.toscrape.com/catalogue/category/books/travel_2/index.html" }],"multipleItemsPerPage": true,"jsonSchema": {"type": "object","properties": {"title": { "type": "string" },"price": { "type": "number" },"inStock": { "type": "boolean" }},"required": ["title", "price"]}}
Crawl a site's product pages (follow same-domain links matching a pattern):
{"startUrls": [{ "url": "https://books.toscrape.com/catalogue/category/books/poetry_23/index.html" }],"followLinks": true, "maxDepth": 1, "linkFilter": "/catalogue/[^/]+_\\d+/index\\.html$", "maxPages": 50,"fields": ["title", "price (number)", "upc"]}
PDF papers or reports:
{"startUrls": [{ "url": "https://arxiv.org/pdf/1706.03762" }],"fields": ["title", "authors (string[])", "abstract", "year (integer)"],"maxPdfPages": 3}
Plain English only (the model picks the keys): "instruction": "Company name, what they sell, contact email, phone and address" with contentMode: "full", so footers that hold contact details are kept.
Chain after another Actor: set Read URLs from an Apify dataset to the output dataset of a crawler, Google Search or sitemap Actor. In an integration, use {{resource.defaultDatasetId}}.
Field list syntax
One field per line: name, name: description or name (type): description. The types are string, number, integer, boolean, date, url and string[] (a list). A JSON schema also accepts the shorthand {"name": "string", "price": "number - in USD", "tags": ["string"]}. Any field may be null when the value isn't on the page, and the model is told never to guess.
Output
One dataset row per page:
{"url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html","status": "ok","title": "A Light in the Attic | Books to Scrape - Sandbox","contentType": "text/html","data": {"title": "A Light in the Attic","price": 51.77,"currency": "GBP","inStock": true,"availableCount": 22,"description": "It's hard to imagine a world without A Light in the Attic. ..."},"model": "google/gemini-2.5-flash-lite","usage": { "promptTokens": 640, "completionTokens": 120, "totalTokens": 760, "costUsd": 0.00011, "calls": 1 },"contentChars": 1473,"contentTruncated": false,"validationErrors": null,"error": null}
(Illustrative values. Token counts and cost come from OpenRouter's response for your run.)
status:ok(charged),invalid(output failed the schema after the retry; the rawdataand thevalidationErrorsare included; free),failedorskipped(free, with the reason inerror),invalidInput.- With Many records per page,
datais an array anditemCountgives its length. usage.costUsdis the token cost OpenRouter reports for the page. The run summary (key-value storeOUTPUT) adds up tokens and LLM cost for the whole run.- The Output tab has two tables, Extracted data and Pages, tokens & errors. Export to JSON, CSV or Excel, or pull the data through the API.
Limits and good behavior
- robots.txt is respected by default, including crawl-delay. Turn it off only for sites you have permission to crawl.
- Social-media platforms are blocked: Facebook, Instagram, LinkedIn, X/Twitter, TikTok, Reddit, YouTube, Pinterest, Threads and others. These sites need logins and their terms forbid automated collection.
- JavaScript-only pages (single-page apps that send almost no HTML) are detected and returned as
failed, free. This Actor doesn't run a browser. - Scanned PDFs without a text layer return little text (no OCR). Files are capped at 25 MB.
- Pages longer than Max characters sent to the LLM (default 40,000 ≈ 10k tokens) are cut, and
contentTruncatedis set totrue. - You are responsible for having the right to process the pages you submit. Rights in model outputs follow the model provider's terms (OpenRouter terms).
FAQ
Do I need an OpenAI, Gemini or OpenRouter API key? No. The LLM is called through Apify's official OpenRouter Actor with your run's Apify token, and its cost appears on your Apify bill.
I get "OpenRouter proxy rejected this run's API token (HTTP 401/403)". The run token wasn't accepted by openrouter.apify.actor. Check that your Apify account is active and has usage left (HTTP 402 means no credit). If you start the Actor through the API with a scoped or limited token, allow that token to run Actors. The run stops calling the LLM after the first such error and charges nothing.
Which model should I use? Start with Gemini 2.5 Flash-Lite. Switch to Gemini 2.5 Flash or GPT-5 mini for long, messy pages or where you need reasoning, such as normalizing addresses or classifying items.
Why was a page invalid? The model's JSON didn't match your schema twice, for example a required object came back as a string. Loosen the schema or try a stronger model. Invalid rows are not charged.
Can it log in or click? No. It reads public pages over plain HTTP. For JavaScript-heavy sites, render them with a browser-based crawler first and pass its dataset in.
How do I cap my spend? Max pages caps both fees. Max total charge per run caps the per-page fee. Max characters sent to the LLM caps tokens per page.
Use with AI agents (Apify MCP)
Add this Actor to Claude, Cursor or any MCP client with the Apify MCP server (gazidev/ai-web-data-extractor). An agent can then call it as a tool, for example: "extract name, price and stock from these 30 product URLs as JSON". The agent gets validated JSON back instead of raw HTML, which saves context and tokens. From the API, run it synchronously with run-sync-get-dataset-items and pass startUrls, fields or jsonSchema, and model.
Related Actors
- Website to Markdown: clean Markdown and RAG chunks of whole websites (the same fetch and cleanup code).
- PDF Text Extractor / Doc to JSON: PDF and DOCX text, tables and OCR without an LLM.