AI Web Scraper — Structured Data from Any Site, No Selectors avatar

AI Web Scraper — Structured Data from Any Site, No Selectors

Pricing

from $3.00 / 1,000 page extracteds

Go to Apify Store
AI Web Scraper — Structured Data from Any Site, No Selectors

AI Web Scraper — Structured Data from Any Site, No Selectors

Give URLs and a plain-English instruction (optionally a JSON schema) and get clean structured JSON per page: products, prices, contacts, articles, listings. Cheap LLM via Apify's OpenRouter, billed at cost to your own account. $3 per 1,000 pages plus tokens.

Pricing

from $3.00 / 1,000 page extracteds

Rating

0.0

(0)

Developer

ActorForge

ActorForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

AI Web Extractor - Structured Data from Any Website with AI

Give URLs and a plain-English instruction (optionally a JSON schema) and get clean structured JSON per page: products, prices, contacts, articles, listings. Cheap LLM via Apify's OpenRouter, billed at cost to your own account. $3 per 1,000 pages plus tokens.

Turn any web page into structured JSON with one plain-English sentence. Give it a list of URLs and an instruction like "Extract the product name, price and stock status" or "List every job opening with title, location and link", optionally with the exact fields you want (a simple field list or a full JSON schema), and it returns clean structured data per page: one JSON object per page, or (list mode) one row per item for listings, search results, catalogues, directories and tables. No CSS selectors, no XPath, no scraper to maintain when the site changes its layout. Each page is fetched as static HTML, cleaned and converted to compact Markdown (navigation, cookie banners, scripts and images removed), cut to your token budget and sent to a fast, cheap AI model (default Google Gemini 2.5 Flash Lite; any OpenRouter model works: GPT-4o mini, GPT-4.1 nano, Gemini 2.5 Flash, Claude, Llama, Mistral…) in JSON mode, then validated and repaired if the model's reply was cut off. Optional same-site crawl (depth 1–2) with include/exclude patterns. Use it for AI web scraping of product and price data, lead lists and company details, real estate and job listings, event pages, article metadata, LLM-ready datasets and RAG pipelines, and for AI agents that need structured web data. It is a lighter, cheaper alternative to browser-based AI scrapers: $3 per 1,000 pages plus the AI tokens at cost.

Two lines on your bill (please read)

  1. This actor's fee: page-extracted, $0.003 per successfully extracted page (one charge per page even when a list page yields 50 rows). Failed pages are free.
  2. AI tokens, billed directly to your own Apify account by Apify's official OpenRouter actor at OpenRouter's rates (the run calls it with your run's own token; there is no extra API key and nothing is marked up by us). With the default model a typical page costs about $0.0002–0.0005 in tokens on a paid Apify plan. On the Apify free plan, Apify charges AI tokens at 10× the OpenRouter rate (about $0.002–0.005 per page), plus a tiny per-call start fee.

Every row shows its own inputTokens, outputTokens and llmCostUsd (the estimated token charge on your account, with the 10× free-plan rate applied when it applies), and the run summary totals them. maxLlmCostUsd (default $0.10) is a hard cap on the token side: the worst-case cost of each page is reserved before the call and the run stops cleanly before passing it. Every call also has a max_tokens limit. The run's maximum total charge caps this actor's own fee. If the AI service is unavailable or your account has no credit left, you get one free row explaining what happened, and the run still succeeds.

What data does it return?

Every run outputs clean, schema-validated rows like these:

urlitemIndexdatamodelinputTokensoutputTokensllmCostUsd
https://books.toscrape.com/0{"title": "A Light in the Attic", "price": "£51.77"}google/gemini-2.5-flash-lite19351120.00024
https://books.toscrape.com/1{"title": "Tipping the Velvet", "price": "£53.74"}google/gemini-2.5-flash-lite000
https://www.example-shop.com/product/42{"name": "Trail Running Shoe X2", "price": 129.0, "currency": "EUR", "inStock": true}google/gemini-2.5-flash-lite2410380.00026

How much does it cost?

Transparent pay-per-event pricing — you only pay for what you get, and the actor always respects your run budget: set a maximum total charge and it stops cleanly at the cap instead of overrunning.

EventPriceChargedWorked example
page-extracted$0.003per page successfully extracted (one charge per page, any number of rows)1,000 product pages = $3.00 (+ AI tokens on your account, ≈ $0.30 on a paid plan with the default model)
apify-actor-start$0.00005per run per GB of memory (platform start fee)One run at 0.5 GB = $0.000025

Input options

FieldTypeRequiredDefaultDescription
startUrlsarrayyes—The web pages to extract data from. Each page is fetched as static HTML (no browser), converted to compact Markdown and sent to the AI model with your instruction.
instructionstringyes—Plain-English instruction, e.g. "Extract the product name, price, currency and whether it is in stock" or "List every job opening with title, location and link". The model only uses what is on the page and returns null for missing values.
outputModestringno"object"Object: one row per page with one JSON object. List: the model returns every matching item on the page (products, jobs, articles…) and you get one row per item. Either way a page is charged once.
schemaobjectno—Optional. Either a simple map of field names to descriptions, e.g. {"name": "product name", "price": "number, no currency sign", "inStock": "true/false"}, or a full JSON Schema ({"type": "object", "properties": {…}}), which is also sent to the model as a structured-output schema. In list mode it describes one item.
modelstringno"google/gemini-2.5-flash-lite"Any OpenRouter model id (see openrouter.ai/models), e.g. google/gemini-2.5-flash-lite (default: cheap, fast, good at extraction), openai/gpt-4o-mini, openai/gpt-4.1-nano or google/gemini-2.5-flash (smarter, ~6× the output price). Tokens are billed to your Apify account at OpenRouter rates.
maxLlmCostUsdnumberno0.1Hard cap on the AI token charges this run may cause on your Apify account (estimated, including the 10× free-plan rate when it applies). Before each page the worst-case cost (its input plus maxOutputTokens) is reserved; the run stops cleanly when the next page would pass the cap. This is separate from the actor's own per-page fee, which the run's maximum total charge limits.
maxPagesintegerno10Stop after this many successfully extracted (charged) pages. Failed pages are free and don't count.
maxCrawlDepthintegerno00 = only the URLs above. 1 or 2 = also extract pages linked from them on the same site (same host), up to maxPages. Use include/exclude patterns to keep the crawl on the pages you want.
includeGlobsarrayno—When crawling, only follow URLs matching one of these glob patterns, e.g. https://example.com/products/** (** = anything, * = anything except /).
excludeGlobsarrayno—When crawling, skip URLs matching any of these glob patterns, e.g. /login or /cart.
maxInputTokensintegerno8000Page Markdown is cut to about this many tokens before it is sent to the model (rows say truncated: true). Lower = cheaper; raise it for long pages.
maxOutputTokensintegerno1500max_tokens for each model reply. A list of 50 items needs roughly 1,500–3,000. If a reply is cut off, the complete items are kept and the row says truncated: true.
includeLinksbooleannotrueKeep link URLs in the Markdown sent to the model, so it can return product/article URLs. Switch off to save tokens when you don't need URLs.
onlyMainContentbooleannofalseSend only the main article (Mozilla Readability) instead of the whole page body. Good for news and blog posts; leave off for listings and product pages.
includeMarkdownbooleannofalseAdd the exact Markdown the model saw to each page's first row (handy for checking results).
allowPersonalDatabooleannofalseOff (default): the model is told not to return private individuals' personal contact details, and personal-looking email addresses in the output are replaced (role mailboxes like info@ or sales@ are kept). Switch on only if you have a lawful basis to process personal data.
respectRobotsTxtbooleannotrueSkip pages the site's robots.txt disallows (free status row). Recommended.

Limits & honest notes

  • AI tokens are a second, separate charge on your own Apify account, made by apify/openrouter at OpenRouter's rates (10× on the Apify free plan). They are not part of this actor's pay-per-event price and are not limited by the run's maximum total charge: use maxLlmCostUsd (default $0.10) to cap them. Each row's llmCostUsd is an estimate from the usage OpenRouter reports; your Apify billing page is authoritative.
  • No browser: pages are fetched as static HTML. Sites that render their content with JavaScript only (empty app shells) get a free status row "needs-javascript" and are not charged. Pages behind logins, CAPTCHAs or bot walls are not supported, and the actor does not try to get around them (no proxies, no browser fingerprints).
  • robots.txt is respected by default (RFC 9309), and requests identify themselves honestly as ActorForge-AIWebExtractor. Internal and private network addresses are refused at every redirect hop.
  • AI models can make mistakes. The model is told to use only what is on the page and return null for missing values, but check important data. Long pages are cut to maxInputTokens (rows say truncated: true); raise it if the data you need is far down the page.
  • Page text is treated as data: the model is told to ignore instructions inside pages (prompt-injection defence), but no defence is perfect.
  • Personal data: by default the model is told not to return private individuals' personal contact details, and personal-looking email addresses in the output are replaced (role mailboxes like info@ and sales@ are kept). Only switch allowPersonalData on if you have a lawful basis.
  • Crawling is same-host only and limited to depth 2 and maxPages charged pages; failed pages are free and don't count toward maxPages.
  • If the AI service rejects the request (no credit, rate limit, unknown model id, outage), the run stops with one free status row "llm-unavailable" explaining why, and still finishes as SUCCEEDED.

Changelog

  • 2026-10-23 — Initial release: URLs + plain-English instruction (+ optional field list or JSON schema) → structured JSON per page or per item, via apify/openrouter billed to the running account; default google/gemini-2.5-flash-lite; maxLlmCostUsd cap; same-site crawl; free status rows.

Built and maintained by ActorForge. Reliability first: every actor in the portfolio is monitored by an automated nightly self-test, and breakages are typically fixed the same day.