Free AI Web Scrapers: Open-Source Tools
For a free AI web scraper in Python with a local LLM instead of a paid API key, start with Crawl4AI: it is open source (Apache-2.0), crawls pages with a headless browser into clean Markdown and extracts JSON with a model running on your machine through Ollama, so pip install -U crawl4ai and ollama pull llama3.3 are the whole setup. Pick ScrapeGraphAI (MIT) instead when you want one sentence in and JSON out from a few pages; Browser Use (an LLM that drives a browser) and LLM Scraper (TypeScript) cover clicks and Node.js. With a local model, nothing is billed per page; what stops being free at volume is the download, because sites limit how many requests one IP may send. All four accept a proxy setting, and ProxyField residential proxies go into it from $1.95/GB; start with the Easy Trial: 1 GB for $2.95.
- residential IPs
- 412M+
- from, traffic never expires
- $1.95/GB
- Easy Trial
- 1 GB for $2.95
On this page 11 sections
- Free and open-source AI web scrapers compared
- What "free" means for an AI web scraper
- Crawl4AI with a local LLM: the free Python pick
- AI web scraping in Python: a do-it-yourself scraper
- ScrapeGraphAI: describe the data, get JSON
- Browser Use: an LLM that drives the browser
- LLM Scraper: typed extraction in TypeScript
- Which free AI scraper to use
- Proxies for free AI scrapers
- Sources
- Free AI Web Scrapers FAQ
Free and open-source AI web scrapers compared
| Tool | What it does | Language | License | Models | JavaScript pages | Proxy setting | Best for |
|---|---|---|---|---|---|---|---|
| Your own script | Fetch, clean, send to a model, validate | Any | Your code | Any API or a local model | With a browser library | Your HTTP client or browser | Learning, full control, lowest cost per page |
| Crawl4AI | Crawls sites into Markdown; extracts JSON with CSS schemas or an LLM | Python 3.10+ | Apache-2.0 | Any LiteLLM provider, Ollama | Yes (headless browser) | proxy_config in the run config | Crawls for RAG and datasets |
| ScrapeGraphAI | Takes a prompt and a URL, returns JSON | Python 3.12+ | MIT | OpenAI, Groq, Azure, Gemini and others, Ollama | Yes (Playwright) | loader_kwargs → proxy | One-off extraction by prompt |
| Browser Use | An LLM agent that clicks, types and reads pages in a browser | Python 3.11+ | MIT | OpenAI, Anthropic, Google and others, Ollama | Yes (Chromium) | ProxySettings on the browser | Multi-step tasks: search, forms, pagination |
| LLM Scraper | Extracts typed data from a Playwright page with a Zod schema | TypeScript | MIT | OpenAI, Anthropic, Google, Groq, Ollama (through Vercel's ai library) | Yes (Playwright) | Playwright's proxy at launch | Node.js projects |
Versions on October 23, 2026: Crawl4AI 0.9.5, ScrapeGraphAI 2.3.1, Browser Use 0.13.11, LLM Scraper 2.0.0. All four are free for commercial use under their licenses. Crawl4AI's README asks for attribution (a badge or a link) when you use it.
What "free" means for an AI web scraper
An AI scraper has three costs, and an open-source library removes only the first:
-
The software: free
The library costs nothing to install or run.
-
The model: free only if it runs on your machine
A hosted model bills tokens for every page it reads, and a long page is thousands of tokens. A local model through Ollama costs nothing per page, but it needs a machine with enough memory, it is slower, and small models make more extraction mistakes.
-
The download: free until the site limits you
Your own IP works for a few pages. Past a few hundred pages from one site, rate limits, 403 errors and challenge pages start, and you need rotating IPs.
Hosted AI scraping apps often have free tiers too, limited by credits or pages per month; check each one's limits before you build on it. For free scrapers without AI (libraries, extensions, spreadsheet formulas), see free web scraping tools.
Crawl4AI with a local LLM: the free Python pick
Crawl4AI is the first tool to try when you want Python, no paid API key and more than a handful of pages. It crawls with a headless browser, writes each page as clean Markdown, and extracts JSON in one of two ways: CSS or XPath schemas with no model at all, or LLMExtractionStrategy, which sends the Markdown to any model LiteLLM supports, including a local one through Ollama. A local model needs no API token: the README's hint is LLMConfig(provider="ollama/llama3.3", api_token="no-token").
Setup, with Ollama installed and running:
pip install -U crawl4ai
crawl4ai-setup # installs the browser Crawl4AI drives
crawl4ai-doctor # optional: checks the install
ollama pull llama3.3 # or a smaller model, such as llama3.2, on a laptopExtraction with the local model, through a residential proxy:
import asyncio
from pydantic import BaseModel
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, LLMConfig, LLMExtractionStrategy, ProxyConfig
class Product(BaseModel):
name: str
price: float
strategy = LLMExtractionStrategy(
llm_config=LLMConfig(provider="ollama/llama3.3", api_token="no-token"), # local model, no key, no per-page bill
schema=Product.model_json_schema(),
extraction_type="schema",
instruction="Extract every product on the page with its name and price.",
input_format="markdown",
)
async def main():
config = CrawlerRunConfig(
extraction_strategy=strategy,
proxy_config=ProxyConfig(server="http://gate.proxyfield.io:7000",
username="<login>-country-us", password="<password>"),
)
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url="https://example.com/category/shoes", config=config)
print(result.markdown[:500]) # the page as Markdown
print(result.extracted_content) # JSON from the local model
asyncio.run(main())What to expect: the first run is slow because the browser and the model are downloaded once. llama3.3 is a 70-billion-parameter model and needs a machine with a lot of memory; on a laptop, start with a small model such as llama3.2 and move up only if fields come back wrong. result.extracted_content is a JSON string, so check its fields against the page before you store them. Version 0.9.5 was current on October 23, 2026. Deep crawls, CSS schemas and a comparison with Scrapy are in AI web crawlers: Crawl4AI.
AI web scraping in Python: a do-it-yourself scraper
The simplest AI scraper is 4 steps in about 30 lines: fetch the page, strip it to text, ask a model for JSON that matches a schema, and check the result. This version uses Requests and Beautiful Soup for the page and a local model through Ollama, so nothing is billed per page except the proxy traffic:
# pip install requests beautifulsoup4 (and install Ollama, then: ollama pull llama3.1)
import json
import requests
from bs4 import BeautifulSoup
PROXY = "http://<login>-country-us-city-new_york:<password>@gate.proxyfield.io:7000"
SCHEMA = {
"type": "object",
"properties": {"products": {"type": "array", "items": {
"type": "object",
"properties": {"name": {"type": "string"}, "price": {"type": "number"}, "currency": {"type": "string"}},
"required": ["name", "price"]}}},
"required": ["products"],
}
# 1. Fetch the page through a residential IP
html = requests.get("https://example.com/category/shoes", proxies={"http": PROXY, "https": PROXY}, timeout=30).text
# 2. Clean it: drop scripts, styles and navigation, keep the text
soup = BeautifulSoup(html, "html.parser")
for tag in soup(["script", "style", "nav", "header", "footer"]):
tag.decompose()
text = soup.get_text(" ", strip=True)[:12000]
# 3. Ask the local model for JSON that matches the schema
reply = requests.post("http://localhost:11434/api/chat", json={
"model": "llama3.1",
"messages": [{"role": "user", "content": "Extract every product with its name, price and currency:\n\n" + text}],
"format": SCHEMA,
"stream": False,
"options": {"temperature": 0},
}, timeout=300).json()
data = json.loads(reply["message"]["content"])
# 4. Validate before you store anything
rows = [p for p in data["products"] if p.get("name") and isinstance(p.get("price"), (int, float)) and p["price"] > 0]
print(len(rows), "products", rows[:3])Replace <login> and <password> with your credentials. <login>-country-us-city-new_york asks for an exit IP in New York, United States. Region, session and session time go in the same username: -region-<region>, -session-<id> and -ttl-<seconds> (30 to 129,600 seconds, 20 minutes by default), as in <login>-country-us-region-new_york-city-new_york-session-he9f2qga-ttl-600; every part after the login is optional.
How this scales: Ollama's format field takes a JSON schema and makes the model answer in that shape. To use a hosted model instead, send the same text and schema to its API with your own key; the fetch, clean and validate steps stay the same. For pages built by JavaScript, swap step 1 for a headless browser such as Playwright. More Python options: Python proxy setup.
ScrapeGraphAI: describe the data, get JSON
ScrapeGraphAI is a Python library that builds a scraping pipeline from a prompt: you give it a URL and a sentence such as "list every product with its price", and it fetches the page, sends it to the model and returns a dictionary. Its main pipelines are SmartScraperGraph (one page), SmartScraperMultiGraph (a list of pages), SearchGraph (the top results of a search engine) and ScriptCreatorGraph, which writes a Python scraper for you instead of extracting.
It fetches pages with Playwright, so install the browser after the package, and it takes a proxy through loader_kwargs:
# pip install scrapegraphai && playwright install
from scrapegraphai.graphs import SmartScraperGraph
graph_config = {
"llm": {"model": "ollama/llama3.2", "model_tokens": 8192, "format": "json"},
# hosted model instead: {"api_key": "YOUR_OPENAI_API_KEY", "model": "openai/gpt-4o-mini"}
"loader_kwargs": {
"proxy": {
"server": "http://gate.proxyfield.io:7000",
"username": "<login>-country-us-city-new_york",
"password": "<password>",
},
},
"headless": True,
}
scraper = SmartScraperGraph(
prompt="List every product on the page with its name and price",
source="https://example.com/category/shoes",
config=graph_config,
)
print(scraper.run())What to know: the library needs Python 3.12 or newer, and you bring your own model (a hosted API key or Ollama). Its README says proxies and anti-bot handling are your responsibility.
Browser Use: an LLM that drives the browser
Browser Use gives a model a real browser: you describe a task, and the agent clicks, types, scrolls and reads pages until it has the answer. That suits jobs a fixed scraper handles badly, such as searching a site, filling a form or paging through results whose layout you do not know in advance. It is slower and uses more tokens per page than extraction from a fetched page, so it is not the tool for 10,000 product pages.
# uv add browser-use (Python 3.11+; and install Ollama, then: ollama pull qwen3)
import asyncio
from browser_use import Agent, Browser, ChatOllama
from browser_use.browser.profile import ProxySettings
async def main():
browser = Browser(proxy=ProxySettings(
server="http://gate.proxyfield.io:7000",
username="<login>-country-us-city-new_york",
password="<password>",
))
agent = Agent(
task="Open https://example.com/category/shoes and return the first 10 products with name and price as JSON",
llm=ChatOllama(model="qwen3"), # or ChatOpenAI(...) / ChatAnthropic(...) with your own API key
browser=browser,
)
history = await agent.run()
print(history.final_result())
asyncio.run(main())The library is free and MIT-licensed, and its README shows how to run a local browser with a local model through Ollama. Hosted models bill tokens for every step. Multi-step browsing is hard for small models, so anything beyond simple tasks often needs a larger local model or a hosted one.
LLM Scraper: typed extraction in TypeScript
LLM Scraper turns a Playwright page into typed data: you define a Zod schema, and the model fills it from the page's HTML, Markdown, text or a screenshot. It works with models through the provider packages of Vercel's ai library, including OpenAI, Anthropic, Google, Groq and Ollama, and it can also generate a reusable Playwright script from the schema. The proxy goes into Playwright's launch options:
// npm i zod playwright llm-scraper ai ollama-ai-provider-v2
import { chromium } from 'playwright'
import { z } from 'zod'
import { Output } from 'ai'
import { ollama } from 'ollama-ai-provider-v2'
import LLMScraper from 'llm-scraper'
const browser = await chromium.launch({
proxy: { server: 'http://gate.proxyfield.io:7000', username: '<login>-country-us-city-new_york', password: '<password>' },
})
const scraper = new LLMScraper(ollama('llama3'))
const page = await browser.newPage()
await page.goto('https://news.ycombinator.com')
const schema = z.object({
top: z.array(z.object({ title: z.string(), points: z.number() })).length(5).describe('Top 5 stories'),
})
const { data } = await scraper.run(page, Output.object({ schema }), { format: 'html' })
console.log(data.top)
await page.close()
await browser.close()Full Node.js proxy setup: Node.js proxy guide.
Which free AI scraper to use
- You are learning, or you want the lowest cost per page: the do-it-yourself Python script above, with a local model.
- You want Python, a local LLM and no API key: Crawl4AI with Ollama, as above.
- You need a whole site as Markdown for RAG or a dataset: Crawl4AI.
- You want JSON from a few pages by writing one sentence: ScrapeGraphAI.
- The task needs clicks, searches or forms: Browser Use.
- Your stack is Node.js or TypeScript: LLM Scraper.
- You would rather not run browsers, models or IPs at all: a hosted scraping API, billed per result. ProxyField's web scraping API fetches any URL as plain HTTP or with JavaScript rendering, billed on successful results only.
Paid AI scraping tools, and how to judge them, are in AI scraping tools compared.
Proxies for free AI scrapers
Every tool above fetches pages from the machine it runs on, so the IP that reaches the site is yours until you add a proxy. One rotating gateway covers all of them:
- The same gateway in every tool:
gate.proxyfield.io:7000with a username and password, over HTTP, HTTPS or SOCKS5; with the IP allowlist, you connect to the port you set up in the dashboard instead of 7000. - A new IP on every request, or a sticky session from 30 seconds to 36 hours for agents that click through a site.
- 412M+ residential IPs in 195+ countries, with targeting by country, region (state) and city, for prices and content that change by location.
- Pay per GB, no subscription: $2.95/GB for 1 GB, falling to $1.95/GB from 1,000 GB. Browser-based tools download scripts and images as well as the HTML, so block media you do not need.
Get started: residential proxies: start with the Easy Trial (1 GB for $2.95). Traffic never expires, and all purchases are final. Scrape public pages only, and check the rules for AI use: is AI scraping legal.
Sources
Read on October 23, 2026:
- Crawl4AI README and PyPI (0.9.5, Apache-2.0, Python 3.10+)
- ScrapeGraphAI README (pipelines, models, proxies, MIT), its proxy example and PyPI (2.3.1, Python 3.12+)
- Browser Use README (Python 3.11+, MIT, models, local Ollama), its
ProxySettingsand PyPI (0.13.11) - LLM Scraper README (2.0.0, MIT, formats, providers, code generation)
- Ollama API: structured outputs (the
formatfield takes a JSON schema)
Free AI Web Scrapers FAQ
What is the best free AI web scraper?
ProxyField recommends Crawl4AI (Apache-2.0) for most free AI scraping: it crawls pages into Markdown and extracts JSON with a local model through Ollama, so it needs no paid API key. For one-sentence extraction from a few pages, ScrapeGraphAI fits better; for clicks and forms, Browser Use; for Node.js, LLM Scraper. With a local model, the only per-page cost left is proxy traffic, from $1.95/GB when a site starts limiting your IP.
Which free AI web scraper runs in Python with a local LLM instead of a paid API key?
Crawl4AI: install it with pip install -U crawl4ai and crawl4ai-setup, pull a model with ollama pull llama3.3, and set LLMConfig(provider="ollama/llama3.3", api_token="no-token") in its LLMExtractionStrategy. ScrapeGraphAI (Python 3.12+) and Browser Use (Python 3.11+) also run Ollama models. Use a small model such as llama3.2 on a laptop, and check the extracted fields on a few pages first.
Can I use AI for web scraping for free?
Yes: Crawl4AI, ScrapeGraphAI, Browser Use and LLM Scraper are free and open source (Apache-2.0 or MIT). The model can be free too if it runs locally through Ollama. Hosted AI scrapers often have free tiers, limited by credits or pages per month.
Is there an open-source AI web scraper?
Several. Crawl4AI (Apache-2.0) crawls sites into Markdown and JSON, ScrapeGraphAI (MIT) extracts data from a prompt, Browser Use (MIT) lets a model drive a browser, and LLM Scraper (MIT) extracts typed data in TypeScript. All four are on GitHub and take a proxy in their settings.
How do I do web scraping with AI in Python?
Fetch the page with Requests, or Playwright if it needs JavaScript, strip it to text with Beautiful Soup, and send the text with a JSON schema to a model, then validate the fields before you store them. Libraries such as ScrapeGraphAI and Crawl4AI wrap those steps into one call.
What are the steps to scrape a website with AI?
Pick a tool that downloads the pages and a model that reads them: a library such as Crawl4AI or ScrapeGraphAI, or your own script, plus a hosted model or a local one. Describe the fields you want, run it on a few pages, check the output against the pages, and add rotating proxies before you scale up.
Do I need my own LLM API key for an AI scraper?
For the open-source libraries, yes, unless you run a local model: they send pages to the model you configure and bill nothing themselves. A local model through Ollama needs no key. Hosted AI scraping services include the model in their price instead.
Do open-source AI scrapers work with any LLM provider?
Mostly. Crawl4AI accepts any provider LiteLLM supports, LLM Scraper works through the provider packages of Vercel's ai library (OpenAI, Anthropic, Google, Groq, Ollama), ScrapeGraphAI lists OpenAI, Groq, Azure, Gemini and local Ollama models, and Browser Use has wrappers for OpenAI, Anthropic, Google and Ollama. Check the library's model list before you pick a smaller provider.
What is ScrapeGraphAI and how does it work?
A Python library (MIT) that turns a prompt into a scraping pipeline: it loads the page with Playwright, sends it to the model you configure and returns the fields you asked for as a dictionary. Its ScriptCreatorGraph writes a reusable Python scraper instead.
Is ScrapeGraphAI on GitHub, and does it have an API?
Yes: the open-source library is on GitHub at ScrapeGraphAI/Scrapegraph-ai under the MIT license, and on PyPI as scrapegraphai. Its API is a Python one: you build a pipeline such as SmartScraperGraph from a prompt, a URL and a config, and call run() to get a dictionary back.
Show 5 more questionsShow fewer questions
How does ScrapeGraphAI compare to Beautiful Soup or Scrapy?
Beautiful Soup and Scrapy extract with selectors you write, which is exact and costs nothing per page but breaks when a layout changes. ScrapeGraphAI finds the fields from a prompt, which adapts to new layouts but costs model time on every page and needs its output checked. For large crawls, Scrapy costs less per page.
Does ScrapeGraphAI work with JavaScript-heavy websites?
Yes, in most cases: it loads pages in a Playwright browser, so content built by scripts is rendered before the model reads it. Pages behind logins, infinite scroll or bot checks may still need extra settings or a different tool.
Why is ScrapeGraphAI not working on my target?
Usually because the site blocked the request, the page was too long for the model's context, or the model was too small for the prompt. Check the downloaded content first; if it is a block page, add rotating residential proxies and slow down, and if it is the right page, try a larger model or a narrower prompt.
Are there open-source ChatGPT scrapers on GitHub?
There are many GitHub projects that pair a scraper with OpenAI's models; the maintained ones are the general libraries above, which accept OpenAI models among others. ChatGPT itself can read pages in a chat, but it is not a scraper you can run on a list of URLs: can ChatGPT scrape websites.
What is the best open-source web scraper for AI agents?
ProxyField recommends Browser Use (MIT) for an agent that must click through a site, because the model controls the browser itself. For an agent that needs pages as text, Crawl4AI or a browser MCP server returns Markdown or page snapshots the agent can read: web crawl and scraping MCP servers. Both take a proxy, and a sticky session of up to 36 hours keeps one IP while the agent works.
Related pages
Easy Trial: 1 GB for $2.95.
Try for the price of 1 GB, no subscription, traffic never expires.