AI List Extractor for Any Website
Pricing
from $8.50 / 1,000 page extracteds
AI List Extractor for Any Website
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.
Pricing
from $8.50 / 1,000 page extracteds
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Security
Limited permissionsShare
Give web addresses, say in plain words what one item is, and bring your own OpenAI, Anthropic, Gemini, or Groq key. The actor reads each page over plain HTTP, sends its text to your model, and returns one row per item. You pay your provider directly and pay this actor per page your model answers.
Features
- No selectors and no per site code. The same input works on a careers page, a directory, or a product category.
- Your key, your model. Pick the provider and the model, and read your token counts on each page row.
fields_not_on_pagelists the keys of an item whose value does not appear in the page text, so you can check reworded or invented values first.- Follows next page links up to
max_pages_per_url. Name exact keys infieldsfor the same columns on every page. - With no key, it reads up to 3 addresses for free, so you can see whether a page is readable before spending anything.
How the data is read
Plain HTTP requests on the Apify proxy default pool, no login. No browser, no residential proxy, and no other developer's actor. Your key goes only to the provider you picked, in a request header. It is never stored, logged, or put in a prompt.
Page text goes to your model as data between random markers, and the model is told never to follow text in it. A page can still try to mislead a model, so treat extracted values as coming from the website. Nothing the model returns can trigger a fetch: next page links come from the page's own HTML, on the same host only.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
start_urls | array | Public 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_extract | string | Plain words, for example: every job: title, company, city, link. Needed when a key is given. | |
fields | array | Exact 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. | |
provider | string | openai | Whose API reads the page, on your key: openai (default), anthropic, gemini, or groq. |
api_key | string | Your 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. | |
model | string | Your 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_url | string | 3 | How 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_items | string | 1000 | The run stops after this many items. Default 1000. |
max_chars_per_page | string | 40000 | Page text past this length is not sent, which limits your provider bill. Default 40000. The row says when text was cut. |
obey_robots | string | yes | yes (default) or no. A disallowed page returns a free row. |
max_charge_usd | string | Stops before a page would pass this figure, before your model is called. This limits this actor's charges, not your provider's bill. |
Output
| Field | Type | What it holds |
|---|---|---|
row_type | string | One of: item, page, run_summary. run_summary is the one free row written when the input is refused. |
start_url | string | The address you gave that led to this page. |
source_url | string | The page this row comes from. |
page_number | integer | 1 for the start address, then 2, 3, and on as next page links are followed. |
item | object | One extracted item, with the keys you named in fields or the keys the model chose. |
item_index | integer | Position of the item on its page. |
fields_not_on_page | array | Keys of this item whose value does not appear in the page text. Check these first: a model can reword or invent a value. |
item_count | integer | On a page row, new items delivered from this page. |
title | string | The page title. |
http_status | integer | The status the page answered with. |
page_chars | integer | Characters of page text before any cut. |
text_truncated | boolean | True when the page text was longer than max_chars_per_page, so later items were not sent. |
text_preview | string | On a run with no key, the first 500 characters your model would receive. |
next_page_url | string | The next page link found on this page, if any. |
provider | string | The LLM provider, on your key. |
model | string | The model asked. |
input_tokens | integer | Input tokens your provider reported, so you can read your bill. |
output_tokens | integer | Output tokens your provider reported. |
row_key | string | Stable key for this row within a run. |
row_status | string | ok, or why this row carries no data: no_results, no_change, partial, blocked, or error. |
error_reason | string | Why the row is not ok. A refused input reads input_invalid: followed by what to fix. |
billable_events_json | string | What this row was billed as, for example {"page-extracted":1}. {} means free. |
scraped_at | string | When the row was written, UTC. |
Pricing
Pay per event. You also pay your LLM provider on your own key. Mamba Labs pays the platform costs of the run. Items, refused pages, failed provider calls, a run with no key, and a refused input are free.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
page-extracted, one page your model answered, whatever the number of items on it | $0.01 | $0.0095 | $0.009 | $0.0085 |
apify-actor-start, once per run (one per GB of memory; the default 256 MB is one) | $0.012 | $0.012 | $0.012 | $0.012 |
Per 1,000 rows of page-extracted: $10.00 on the free plan, $8.50 on Gold.
Free plan cap: 1.50 USD of evaluation a month, about 150 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.
Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
A page where your model finds no items is charged, because the read and the call ran, and the row says so. Compare with apify/ai-web-scraper at 0.03 USD a page: that price includes the model, and this one does not.
Usage examples
Clay. Number and on or off inputs are text fields, which is what Clay sends. A list input takes a JSON list, so wrap the address column in a one item list.
MCP. The Mamba Labs MCP server @mambalabsdev/mcp-ai-list-extractor-any-website exposes this actor to Claude and other MCP clients.
Error handling
| Case | What you get |
|---|---|
| Missing or unreadable input | One free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run succeeds |
| A site refuses the read, or shows a challenge page | One free row with row_status blocked. The actor does not retry on another address and does not try to get past it |
| A page has almost no text in its HTML | One free row, because it likely needs JavaScript. No model call is made |
| robots.txt disallows the page | One free row. Set obey_robots to no to change this |
| Your key is refused, out of credit, or rate limited, or the model name is wrong | One free row with the provider's message, and the run stops |
| The model does not answer with valid JSON, or the provider fails | One free row. Three in a row stop the run. Your provider may still bill those calls |
| The run is close to its timeout | The actor stops starting new work 90 seconds before the timeout and delivers what it has |
Limitations
- 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_pageis 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_pagecharacters 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 readspartial. - 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_usdlimits 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.
Mamba Labs actor suite
Built by Mamba Labs.