LLM Web Data Extractor for OpenAI, Anthropic, Gemini Keys icon

AI & documents · Coming soon

LLM Web Data Extractor

Give page links and the fields you want. The Actor reads each page and asks an AI model for the values. You get one JSON row per page. You use your own API key.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

urlhttps://apify.com/pricing
finalUrlhttps://apify.com/pricing
providergemini

How it will work: 3 steps

  1. Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: https://apify.com/pricing in Page URLs. Each start is one run.
  3. Download the resultsWhen 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.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Turn public web pages into structured JSON with your own OpenAI, Anthropic or Google Gemini API key: give page URLs and the fields you want, and get one row per page with the values and the tokens your key used.

  • Values that are not on the page come back as null. The model is told never to guess.
  • List mode returns every record on a page (all plans, all products, all people) in data.items.

Good for

  • The same fields (name, price, date, contact page, specs) from pages on many different sites.
  • Pricing tables, product pages, team pages, event pages, job posts: anything readable in the page HTML.
  • Teams that already have an OpenAI or Gemini key and want to pay their provider directly for tokens.

Not a good fit

  • Pages that build their content with JavaScript. They are reported as JS_REQUIRED and no model call is made.
  • Pages behind a login, paywall or bot protection. The Actor never logs in and never bypasses them; HTTP 401/403 pages are errors.
  • Crawling a whole site. The Actor reads only the URLs you give (up to 300 per run). It does not follow links.
  • Guaranteed accuracy. LLMs can make mistakes; check important values.

Who uses it

Analysts

Pull price, date or specs from pages on many sites.

Developers

Get JSON that matches your schema, without writing scraping code.

Researchers

Collect plans, team members or events from public pages.

Price

Prices will be shown after release.

Questions

Do I need my own API key?

Yes. Use a key from Google Gemini, OpenAI or Anthropic. Your provider bills the tokens.

Is Anthropic tested?

Not yet with a live key. It follows the public API docs. Gemini and OpenAI are tested.

Does it work on pages that need JavaScript?

No. Those pages are marked JS_REQUIRED and no model call is made.

What if a value is not on the page?

It comes back as null. The model is told not to guess.

Is Anthropic supported?

The Anthropic option follows the public API docs, but Anthropic: not tested with a live key yet. Gemini and OpenAI are tested.

Are the values always correct?

No guarantee: LLMs can make mistakes. The model sees only the page text, is told to use null instead of guessing, and treats the page as untrusted data. Check important values.

How fresh is the data?

Each page is downloaded during the run; fetchedAt shows when. Nothing is cached.

Details

Step by step on Apify
  1. Open the Input tab. The form is prefilled with https://apify.com/pricing and two fields: plan_name and monthly_price, in list mode.
  2. Keep LLM provider = Google Gemini (default) or pick OpenAI.
  3. Paste your key into Your API key.
  4. Click Start.
  5. Open the Output tab and check status and data.items.
Use cases
TaskInputYou getKey fieldsNext step
Compare competitor pricingurls + fields, mode: listone row per pricing pagedata.items, status, fetchedAtGoogle Sheets, CSV export
Product specs from many shopsurls + jsonSchemaone row per product pagedata, truncated, statusDataset API, webhook to your database
Company facts from About pagesurls + fieldsone row per company pagedata, pageTitle, finalUrlCRM import via Make or Zapier
Track token use per pageanyone row per pageinputTokens, outputTokens, modelyour cost report
Tips for better results
  • Use list mode when a page has many records, like a pricing table.
  • Limit page text to keep token costs low.
  • Check important values. AI models can make mistakes.
Limits and good to know
  • Max total charge (Apify run option): when the next page would go over it, the run stops, marks the rest skipped / CHARGE_LIMIT and ends PARTIAL. The model is not called for a page that cannot be charged
  • No data at the start: if the model finds none of your fields on 10 pages before any page had data, the run stops with PARTIAL / NO_DATA_STREAK to save your tokens
  • Dead sites or provider: after 10 timeouts or connection/model errors in a row, or when no page finishes for 120 s, the run stops with PARTIAL / SOURCE_FAILING and marks the rest skipped
  • Up to 300 URLs per run. Default timeout 300 s, memory 1 GB
  • Server HTML only, no JavaScript rendering, no login, no paywall or bot-protection bypass. Private and internal addresses are blocked
  • Pages up to 5 MB of HTML; text sent to the model up to maxPageChars
  • Each request to a site identifies itself as llm-web-extractor-apify-actor

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "url": "https://apify.com/pricing",
  "finalUrl": "https://apify.com/pricing",
  "status": "complete",
  "data": { "items": [
    { "plan_name": "Free", "monthly_price": "$0" },
    { "plan_name": "Starter", "monthly_price": "$19" },
    { "plan_name": "Scale", "monthly_price": "$199" },
    { "plan_name": "Business", "monthly_price": "$999" }
  ] },
  "provider": "gemini",
  "model": "gemini-flash-lite-latest",
  "inputTokens": 4906,
  "outputTokens": 121,
  "reasoningTokens": 0,
  "pageTitle": "Apify pricing - flexible plan + pay as you go · Apify",
  "pageChars": 28144,
  "truncated": false,
  "fetchedAt": "2026-10-22T05:50:56.165Z",
  "error": null
}
Data fields (14)
FieldTypeMeaning
urlstringPage URL from the input.
finalUrlstringURL after redirects; null when the page was not downloaded.
statusstringcomplete = data extracted; not_found = HTTP 404/410, or the model found none of the requested data (error.code NO_DATA, only the $0.001 page read charged); error = see error.code; skipped = not processed (quota, budget, timeout); api_key_required / api_key_invalid = key problem, nothing processed.
dataobjectExtracted fields. Values not on the page are null. In list mode the records are in data.items. null unless status is complete or not_found with NO_DATA (then it holds the empty answer).
providerstringgemini, openai or anthropic.
modelstringModel id used.
inputTokensintegerPrompt tokens the provider billed to your key for this page. null when no model call was made.
outputTokensintegerOutput tokens billed to your key, including reasoning or thinking tokens.
reasoningTokensintegerPart of outputTokens spent on reasoning, when the provider reports it.
pageTitlestringPage title.
pageCharsintegerCharacters of clean page text before any cut.
truncatedbooleanTrue when the page text was cut to maxPageChars before it was sent.
fetchedAtstringWhen the row was written, ISO 8601.
errorobjectWhy the row is not complete: code (e.g. QUOTA_EXCEEDED, JS_REQUIRED, HTTP_ERROR, LLM_TRUNCATED) and a short message. null for complete rows.
Input settings (11)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Page URLs requiredurlsarray["https://apify.com/pricing"]
Fields to extractfieldsarray[{"key": "plan_name", "value": "Name of the pricing plan"}, {"key": "monthly_price", "v…
One record or a list per pagemodestring"list"
LLM providerproviderstring"gemini"
Your API keyapiKeystring
Modelmodelstring
JSON Schema (advanced)jsonSchemaobject
Extra instructionsinstructionsstring
Max page characters sentmaxPageCharsinteger40000
Pages at the same timemaxConcurrencyinteger3
Keep navigation and footerkeepBoilerplatebooleanfalse

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure