Introduction
DataFuel gives you one API for scraping protected pages and querying AI answer engines through residential proxies. Send a target, get structured results — no browser farms, no proxy management.
Authentication
Every request needs your API key in the
X-API-Key header. Keys look like
dfk_… — keep them server-side.
Credits are deducted per completed task. Check remaining credits with GET /users/@me/balance; concurrency and monthly limits are on GET /users/@me.
Tasks, jobs, map and crawl
Synchronous, one target.
POST /task holds the
connection until the scrape finishes and returns the
result in the response. Set client timeouts to 120s+.
Asynchronous batch.
POST /job takes many targets,
returns a job id instantly. Poll
progress, then fetch
results.
Synchronous URL discovery.
POST /map reads the site’s
sitemaps and the links on the page and returns one
deduplicated list of same-site URLs. Flat price, no
scraping. Details.
multithreaded: true. Need the
URLs of a site → map. Need the content of a site → crawl.
Idempotency
POST /task,
POST /map,
POST /job and
POST /crawl accept an
Idempotency-Key header (1–255 chars,
unique per account). Retrying with the same key returns the
original task or job instead of creating and billing a new
one; a sync task that is still running is waited for. The key
is bound to the request: the same key with a different type,
attributes or proxy settings is rejected with
422 IDEMPOTENCY_KEY_REUSED.
MCP server
The same API is exposed as a
Model Context Protocol
server for agents and AI IDEs: streamable HTTP, stateless,
JSON responses. Authenticate with the same
X-API-Key header. Every tool call is
billed exactly like its REST counterpart.
url, search, limit, sitemap, include_subdomains, ignore_sitemap, sitemap_only, proxy_type, proxy_country.POST /map
next_cursor back as cursor.GET /crawl/{id}/results
scrape and
map block until the result is ready (up to 10
minutes); the job and crawl tools return immediately and are
polled.
Errors
Errors return a consistent envelope:
Pricing
Credits deducted per completed task. Unlocker cost depends on
the proxy plan (proxy_type) and
whether the page is fetched with a plain request or rendered
in a real browser (js_rendering: true).