Skip to content
Book a CallCreate AccountLogin

Unlocker API

One call returns any page past any protection, as Markdown or structured JSON. Anti-bot handling, proxy rotation, CAPTCHA solving and JavaScript rendering all happen inside the request.

  • Cloudflare, Akamai, DataDome, PerimeterX and every major CAPTCHA, handled inside the call
  • 99.6% success on protected targets
  • Proxies are automatically managed: tier, rotation and retry-on-ban
  • JavaScript rendering with waits and page actions
  • HTML, Markdown, screenshot or JSON output, auto-parsed fields
  • AI parsing with your own model key
From 1 credit per page. Failed requests are free. No card to start.
MCP readyConnect your agent in one command:npx -y @datafuel/mcp initClaudeOpenAI / ChatGPTGeminiCursorMistral
Datafuel / Unlocker
www.amazon.com
United States
/s?k=wireless+headphones
1Request
2Retrieve
3Format
4Ready
www.amazon.com
Opening the source page

One request starts the example.

Everything in one request

The scannable summary. Deep dives below.
Anti-bot & WAF bypassCloudflare, Akamai, DataDome, PerimeterX, Imperva. Fingerprints and TLS handled per request.
CAPTCHA solvingreCAPTCHA, hCaptcha, Turnstile, DataDome slide: solved inside the call, no third-party solver.
Rotation & retry-on-banA blocked IP is swapped and the request retried before it reaches your code.
Basic / Premium / Mobile tierPick the proxy tier per request; escalate automatically when a cheaper exit is blocked.
Geo-targetingproxy_country routes the request through 195+ countries; state and city on Premium.
Sticky sessionsproxy_session_id keeps the same IP across several requests for logins and carts.
JavaScript renderingA real browser with wait_for_selector, wait_for and page actions before extraction.
Headers, cookies, deviceCustom headers, cookies, user agent and device profile on every call.
Seven output formatsHTML, Markdown, text, JSON, screenshot, PDF or structured fields from one result_format.
AI parsing, your keyA prompt and a JSON schema turn any page into fields; tokens billed on your provider key.
Async bulk jobsPOST /job with hundreds of URLs, multithreaded, with an id at once and paged results.
Pay per success, analyticsFailed requests are free; usage per key and per endpoint in the dashboard.
01 · AI parsing

AI parsing with your own API key

Send a prompt and a JSON schema with the request. The page is fetched through our network, then handed to your model on your key: OpenAI, Anthropic, Google or Mistral. You get the fields, not the HTML, and the model tokens are billed by your provider, not by us.

1curl -X POST https://scraping-api.datafuel.ai/api/v1/task \
2 -H "X-API-Key: $DATAFUEL_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "type": "unlocker",
6 "proxy_type": "Basic",
7 "proxy_country": "US",
8 "attributes": {
9 "url": "https://example.com/product/123",
10 "method": "GET",
11 "result_format": "json",
12 "result_use_ai": true,
13 "result_ai_prompt": "Extract product name, price and stock status",
14 "result_ai_format": {
15 "title": "string",
16 "price": "number",
17 "in_stock": "boolean"
18 },
19 "ai_provider": "openai",
20 "ai_model": "gpt-4o-mini",
21 "ai_api_key": "$OPENAI_API_KEY"
22 }
23}'
ai_provider accepts openai, anthropic or google; ai_model is any model your key can call. The page is billed as a normal request; AI parsing adds no credits.
02 · Protections

Anti-bot and proxy management

Cloudflare, Akamai, DataDome, PerimeterX and every major CAPTCHA are cleared inside the request: fresh TLS fingerprint per call, rotation on ban, escalation from Basic to Premium when a datacenter exit is blocked. proxy_session_id pins one IP across calls when a login or a cart needs it.

1curl -X POST https://scraping-api.datafuel.ai/api/v1/task \
2 -H "X-API-Key: $DATAFUEL_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "type": "unlocker",
6 "proxy_type": "Premium",
7 "proxy_country": "GB",
8 "proxy_session_id": "checkout-8f3a",
9 "attributes": {
10 "url": "https://example.com/account/orders",
11 "method": "GET",
12 "result_format": "json"
13 }
14}'
proxy_type auto lets the engine pick the cheapest tier that gets through; Premium and Mobile can be forced per request.
03 · Bulk jobs

Bulk jobs, asynchronous

Hundreds of URLs across many sites in one POST /job. The id comes back at once, tasks run in parallel up to your plan's concurrency, and GET /job/{id}/results returns one entry per URL. An Idempotency-Key makes retries safe; failed tasks are not billed.

1# 1. queue the batch → {"id": "9f2c7a1e-…"}
2curl -X POST https://scraping-api.datafuel.ai/api/v1/job \
3 -H "X-API-Key: $DATAFUEL_API_KEY" \
4 -H "Idempotency-Key: batch-2026-09-13-a" \
5 -H "Content-Type: application/json" \
6 -d '{
7 "type": "unlocker",
8 "multithreaded": true,
9 "proxy_type": "Basic",
10 "attributes": {
11 "urls": [
12 "https://amazon.com/dp/B0DEMO123",
13 "https://walmart.com/ip/demo-456",
14 "https://tripadvisor.com/Hotel_Review-demo"
15 ],
16 "result_format": "markdown"
17 }
18}'
19
20# 2. poll progress → {"status": "processing", "tasks_count": 3, "tasks_done": 1, "tasks_remaining": 2, "total_cost": 1}
21curl https://scraping-api.datafuel.ai/api/v1/job/$JOB_ID -H "X-API-Key: $DATAFUEL_API_KEY"
22
23# 3. fetch every result once status is completed
24curl https://scraping-api.datafuel.ai/api/v1/job/$JOB_ID/results -H "X-API-Key: $DATAFUEL_API_KEY"
multithreaded: true runs tasks concurrently; the plan's concurrency limit is the ceiling.
04 · Rendering

JavaScript rendering

js_rendering: true loads the page in a real browser, waits for the selector you name, runs your page actions (click, scroll, type) and only then extracts. Images, fonts and media are never fetched, so rendering stays fast and costs 5 credits instead of 1.

1curl -X POST https://scraping-api.datafuel.ai/api/v1/task \
2 -H "X-API-Key: $DATAFUEL_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "type": "unlocker",
6 "proxy_type": "Basic",
7 "proxy_country": "US",
8 "attributes": {
9 "url": "https://app.example.com/product",
10 "method": "GET",
11 "js_rendering": true,
12 "wait_for_selector": "#price",
13 "result_format": "json"
14 }
15}'
wait_for_selector, wait_for (ms) and actions[] run before extraction; block_resources is on by default.
Pricing

Pay only for successful requests

Pick a monthly plan, buy credits once, or run unlimited threads. Failed requests are never billed.

Every plan includes every endpoint and every interface (API, MCP). One shared credit balance: you only pay for volume, and only for successful requests.

How many requests a month?995,860
≈ 995,860 credits · Growth
1K300K1M3.5M12MCustom
Free

Test every endpoint with real credits. No card, no expiry pressure.

$0/ mo, billed monthly
1,000 credits / month1,000 basic pages2 concurrent threads
  • 1,000 trial credits
  • Every endpoint, API + MCP
  • Community support
GrowthBest fit

For production crawlers and agents that need headroom.

$79/ mo, billed monthly
1,000,000 credits / month1,000,000 basic pages25 concurrent threads$0.079 per 1K basic$0.395 per 1K JS
  • Everything in Starter
  • Auto top-up
  • Priority chat support
Business

For teams shipping data products on a schedule.

$199/ mo, billed monthly
3,500,000 credits / month3,500,000 basic pages50 concurrent threads$0.057 per 1K basic$0.284 per 1K JS
  • Everything in Growth
  • Usage alerts per API key
  • Account manager
Scale

High volume at the lowest per-page rate. Checks out instantly.

$499/ mo, billed monthly
12,000,000 credits / month12,000,000 basic pages150 concurrent threads$0.042 per 1K basic$0.208 per 1K JS
  • Everything in Business
  • Dedicated IP pool
  • 99.9% SLA
Enterprise

Committed volume, invoicing and governance.

Custom
Custom credits / month250+ concurrent threads
  • Custom volume pricing
  • Custom concurrency (250+)
  • SSO · audit log · DPA
Compare
FreeStarterGrowthBusinessScaleEnterprise
Credits / month1K trial300K1M3.5M12MCustom
Concurrent threads2102550150250+
API keys131025UnlimitedUnlimited
JS rendering
Residential proxies
AI in-flight (your key)
Geo-targeting · 195+ countries
Batch multi-URL
Unlocker · Crawl · Map · LLM Scraper
Auto top-up
SupportCommunityEmailPriority chatAccount managerSlack + phoneDedicated + SLA
What does a request actually cost?1 credit = 1 basic page · costs don't stack: JS + Residential is 20 credits, not 5 + 10
Basic HTTPSimple HTML, datacenter proxy
JS RenderingHeadless browser for dynamic sites
10×Residential proxyReal residential IPs
20×JS + ResidentialFull power for protected sites
FreeAI In-FlightLLM extraction on any Unlocker request, zero extra credits
FAQ

Frequently asked questions

The real objections, answered straight.

Requests & outputWhat you send and what comes back.
What counts as a successful request?
A response with the content you asked for: a 2xx from the target with a body, or, with AI extraction, a JSON object that matches your result_ai_format. Blocks, CAPTCHAs we could not solve, timeouts and empty bodies are failures and cost nothing.
Which output formats are supported?
json, csv, txt, markdown, png, jpeg and pdf via result_format. Markdown is the usual choice for LLM pipelines; set result_use_ai with a prompt and a JSON shape to get structured fields.
When do I need js_rendering?
Only when the page builds its content in the browser: infinite scroll, client-side prices, single-page apps. Try without it first, plain requests are 5x cheaper and faster. wait_for_selector tells the browser when the content is ready.
Do I need my own AI key?
No. AI extraction runs on Datafuel by default and is included in the request price. If you prefer your own provider and contract, pass ai_provider (openai, anthropic or google), ai_model and ai_api_key and the model runs on your account.
Protections & billingBlocks, limits and what you pay.
Which protections are supported?
Cloudflare, Akamai, DataDome, PerimeterX (HUMAN) and the major CAPTCHA types, plus generic anti-bot systems and rate limiters. They are handled inside the request; there is no flag to set per protection.
What happens when a target blocks me?
The Unlocker retries automatically on a fresh IP with a new fingerprint. If it still cannot get a usable response, the request fails and costs 0 credits. Per-domain analytics show success rate and cost for every target, so you see exactly where that happens.
Are there rate limits or a concurrency cap?
Concurrency is per account: GET /users/@me shows current_concurrency and concurrency_limit, and you can raise it from the dashboard or by talking to us. For large batches use POST /job, which queues URLs and can notify a webhook when the job completes.
Can I keep the same IP across several requests?
Yes. Pass a proxy_session_id and every request carrying that id exits from the same IP, which is what multi-step flows such as login, page and checkout need.
Get started

Ready to build?

Start with the free tier and scale as your project grows. No credit card, no sales call.

Talk to an engineer, not a chatbot.