AI Web Data Extractor – Any URL or PDF to JSON, No API Key avatar

AI Web Data Extractor – Any URL or PDF to JSON, No API Key

Pricing

from $4.00 / 1,000 page extracted to jsons

Go to Apify Store
AI Web Data Extractor – Any URL or PDF to JSON, No API Key

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

Cemal Atakli

Maintained by Community

Actor 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

  1. Each URL is fetched over plain HTTP. robots.txt is respected and the User-Agent carries a contact address.
  2. 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.
  3. The text and your instruction or schema go to an LLM through Apify's own OpenRouter Actor (apify/openrouter).
  4. 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

WhatPriceWho bills it
Page extracted to valid JSON (page-extracted)$0.004 ($4 / 1,000)This Actor
Actor start$0.00005This Actor
LLM tokensOpenRouter list price for the model you pickApify, 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):

PageInput tokensLLM cost (paid plan)LLM cost (Apify free plan: 10×)
Product / contact page1–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 Actorapify/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 URLsYes–
JSON-schema validation + retryYes–
Failed / invalid rowsFree–
Own API key neededNoNo

(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 raw data and the validationErrors are included; free), failed or skipped (free, with the reason in error), invalidInput.
  • With Many records per page, data is an array and itemCount gives its length.
  • usage.costUsd is the token cost OpenRouter reports for the page. The run summary (key-value store OUTPUT) 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 contentTruncated is set to true.
  • 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.

  • 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.