AI List Extractor for Any Website
Last updated November 9, 2026
Describe a list in plain words and give web addresses. Your own OpenAI, Anthropic, Gemini, or Groq key reads each page and returns one row per item, with a check that flags values not found on the page. No selectors and no per site code.
Features
- Describe one item in plain words, with no selectors and no per site code.
- Runs on your own OpenAI, Anthropic, Gemini, or Groq key.
- Follows next page links, and flags values not found on the page.
- A refused page, a failed provider call, and a run with no key are free.
- Pay per event: Page extracted at $0.01.
Input
start_urlsarrayoptionalPublic list pages that answer without a login, for example a careers page or a category page. A page that needs JavaScript or refuses plain requests returns a free row.
what_to_extractstringoptionalPlain words, for example: every job: title, company, city, link. Needed when a key is given.
fieldsarrayoptionalExact keys each item must carry, for the same columns on every page. Empty lets the model choose. In Clay, wrap a column in a one item list.
providerstringoptionalWhose API reads the page, on your key: openai (default), anthropic, gemini, or groq.
api_keystringoptionalYour own key. It goes only to the provider you picked and is never stored, logged, or sent to the model. With no key the actor reads up to 3 addresses for free and sends nothing to a model.
modelstringoptionalYour provider's model name. Defaults: openai gpt-4o-mini, anthropic claude-haiku-4-5-20251001, gemini gemini-2.5-flash, groq llama-3.3-70b-versatile.
max_pages_per_urlstringoptionalHow many pages to read from each address by following next page links. Default 3, at most 100. Each page your model answers is charged.
max_itemsstringoptionalThe run stops after this many items. Default 1000.
max_chars_per_pagestringoptionalPage text past this length is not sent, which limits your provider bill. Default 40000. The row says when text was cut.
obey_robotsstringoptionalyes (default) or no. A disallowed page returns a free row.
max_charge_usdstringoptionalStops before a page would pass this figure, before your model is called. This limits this actor's charges, not your provider's bill.
Output schema
{
"row_type": "string",
"start_url": "string",
"source_url": "string",
"page_number": "integer",
"item": "object",
"item_index": "integer",
"fields_not_on_page": "array",
"item_count": "integer",
"title": "string",
"http_status": "integer",
"page_chars": "integer",
"text_truncated": "boolean",
"text_preview": "string",
"next_page_url": "string",
"provider": "string",
"model": "string",
"input_tokens": "integer",
"output_tokens": "integer",
"row_key": "string",
"row_status": "string",
"error_reason": "string",
"billable_events_json": "string",
"scraped_at": "string"
}Pricing
| Event | Free plan price |
|---|---|
| Page extracted | $0.01 |
| Actor Start | $0.005 |
Pay per event on the Apify platform. Paid Apify plans pay less per event. No subscription, no seat license.
On the Apify free plan the actor stops at $1.50 of charges a month, about 150 pages. Any paid Apify plan removes the cap.
Limits
- Fixtures and the refused key path are the test. No key of ours is used, so no real model has answered through this actor yet, and the first buyer's key is the live test. The per page charge, the item rows, and the default model names were tested on fixtures only. A default model name may be out of date: if your provider refuses it, set model.
- Item accuracy depends on your model. fields_not_on_page is a text match: a value the model reformatted is listed even when it is right, and a wrong value copied from elsewhere on the page is not listed.
- No JavaScript. A page that builds its list in the browser returns a free row and no items.
- No login, no captcha handling, and no route around a refusal. Many large sites refuse plain requests, and those return free rows. Paywalled text is not read.
- Only the first max_chars_per_page characters of a page go to the model, 40,000 by default. Later items on a longer page are missing, and the row says the text was cut. A model can also stop at its own output limit, and the row reads partial.
- Next page links are found by rel=next, a link reading Next, or a next class. A page using a load more button or numbered links only ends at page 1.
- max_charge_usd limits this actor's charges, not your provider's bill. A run restarted by the platform during a model call can repeat that page, which can bill you twice at your provider.
- Pages are read one at a time, so a run of many pages takes time.
- You are responsible for following the terms of the sites you read and of your LLM provider.