What Is a Scraper API? Scrape, Crawl and Map Endpoints
A scraper API is a web service that fetches pages for you: you send a URL and your API key in one HTTP request, and it returns the page's HTML, Markdown or extracted data as JSON, with proxy rotation, JavaScript rendering and retries done on the provider's side. Its endpoints differ by scope: scrape is "give me this page" (one URL, answered in the same response); crawl is "explore this site and give me the pages' content" (a start URL plus a page limit, depth and URL patterns, run as an asynchronous job that returns a job ID you poll or receive by webhook); map is "tell me which pages exist" (a list of a site's URLs, with no page content). Scraper APIs charge per request or credit, per successful result or, for proxy-style products, per GB. ProxyField's Web Scraping API is designed to bill successful results only.
- residential IPs
- 412M+
- from, traffic never expires
- $1.95/GB
- Easy Trial
- 1 GB for $2.95
On this page 9 sections
- How a scraper API works
- Scrape, crawl and map endpoints explained
- How do web scraping APIs charge: per request, per successful result or per GB?
- What a scraper API handles for you
- How to use a web scraping API
- Scraper API vs proxies vs an official API
- Who benefits from a scraper API
- How reliable is a scraper API?
- What Is a Scraper API? Scrape FAQ
Its design prices plain HTTP pages at $0.50 per 1,000 successful results, or $0.20 from 10,000 results in one purchase; it is in development, so access is through Contact sales. To run your own scraper today, ProxyField residential proxies start with the Easy Trial: 1 GB for $2.95.
How a scraper API works
A scraper API wraps the whole fetching side of a scraper behind one endpoint. A typical call goes through six steps:
- You send a request with the target URL and options: the country to fetch from, whether to render JavaScript, the device type, sometimes the fields you want.
- The API picks an IP from its proxy pool, in the country you asked for.
- It fetches the page, either as a plain HTTP request or in a headless browser that runs the page's scripts.
- It checks the response. In a typical scraper API, a block page, a CAPTCHA page, a 403 or a 429 counts as a failure, and the API retries with another IP.
- It parses the result when the API offers parsing: it returns the HTML as is, or turns it into JSON or Markdown.
- It returns the result to you and records whether the request counts for billing.
From your side, scraping a page becomes one HTTP call. This is the request format of ProxyField's Web Scraping API as designed in the API documentation; the API is in development, so access is through Contact sales:
curl https://api.proxyfield.io/v1/scrape \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.example-shop.com/product/42", "render": false, "country": "us", "output": "json"}'{
"metadata": {"id": "req_41ac7e93d05f2b68", "api": "web_scrape", "status": "success", "billed": true, "cached": false, "tag": null},
"status_code": 200,
"final_url": "https://www.example-shop.com/product/42",
"content_type": "text/html; charset=utf-8",
"content": "<!DOCTYPE html><html>…</html>"
}The parameters that decide the result: url; render (false is plain HTTP, true loads the page in a browser and sets the price); country, a two-letter code from the pool's 195+ countries; output (html, markdown, text, json or screenshot); and, with rendering, wait_for (a CSS selector) and up to 20 browser actions such as click and scroll. metadata.billed and the X-Billed header say whether the call counted. In this design, blocked pages are retried on new IPs within the request's timeout (120,000 ms by default), and the retries are not billed.
Scrape, crawl and map endpoints explained
Scraper APIs split the work by scope: one page, a whole section of a site, or only the list of its pages.
| Feature | Scrape | Crawl | Map |
|---|---|---|---|
| You send | One URL | A start URL and rules | A domain or start URL |
| You get back | That page's HTML, Markdown, text, screenshot or extracted fields | The content of many pages, found by following links | A list of URLs, with no page content |
| How it runs | Synchronous: the answer comes in the same HTTP response | Asynchronous: the call returns a job ID at once; you poll the job's status or receive a webhook when it finishes; large results come back in pages | Usually synchronous, and fast, because it reads sitemaps and links without fetching every page in full |
| Controls it typically takes | Rendering on or off, a wait for a selector or a time, browser actions, country, output format, timeout | Page limit, link depth, include and exclude path patterns, subdomains on or off, whether to use the sitemap, and the scrape options applied to each page | A search term to filter URLs, a result limit, subdomains, whether to use the sitemap |
| Use it when | You already know which pages you need | You need every product, article or listing under a section | You want to see a site's structure first, or choose URLs yourself |
| Billed as | One result per URL fetched; in ProxyField's design, one billed result per URL, and a batch of up to 1,000 URLs is one result per URL | Every page the crawl fetches, including the category, filter and pagination pages it passes through | Usually one call; with ProxyField's design you map by fetching the sitemap, which is one billed result for the sitemap file |
In one line each: scrape is "give me this page", crawl is "explore this site and give me the pages' content", map is "tell me which pages exist".
The three chain together. Map finds the URLs, you filter them (for example, keep only /product/ pages), and scrape fetches each one. Crawl does map and scrape in one job, which is simpler but gives you less control over which pages you pay for. Two other endpoint types are common: search or SERP endpoints take a query and return parsed results, and batch endpoints take a list of known URLs and return a job.
What a crawl and a map call look like
The shape below is typical of scraper APIs that have crawl and map endpoints. It is a generic example on a placeholder host, not ProxyField's API: ProxyField's design has no crawl or map endpoint (see the next sections). Field names vary by provider; the flow does not.
1. Start a crawl. The call returns a job ID at once, not the pages:
curl -X POST https://api.scraper.example/v1/crawl \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.example-shop.com/category/shoes/", "limit": 500, "max_depth": 2,
"include_paths": ["/product/"], "exclude_paths": ["/cart", "/login"],
"webhook": "https://your-app.example.com/hooks/crawl"}'{"id": "crawl_9f2c41d7", "status": "queued", "url": "https://api.scraper.example/v1/crawl/crawl_9f2c41d7"}2. Poll the job (or wait for the webhook). While it runs you see progress; finished pages come back in pages of results, with a link to the next page:
curl https://api.scraper.example/v1/crawl/crawl_9f2c41d7 -H "Authorization: Bearer <api_key>"{
"id": "crawl_9f2c41d7",
"status": "running",
"completed": 120,
"total": 500,
"next": "https://api.scraper.example/v1/crawl/crawl_9f2c41d7?skip=100",
"data": [
{"url": "https://www.example-shop.com/product/42", "status_code": 200, "markdown": "# Trail Runner 3\n\nPrice: $129.95 …"}
]
}The status moves from queued to running to completed (or failed). limit is the hard page cap and max_depth the link depth; without them a crawl stops only at the provider's default cap.
3. A map call is a single synchronous request that returns URLs only:
curl -X POST https://api.scraper.example/v1/map \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.example-shop.com", "search": "product", "limit": 1000}'{"links": ["https://www.example-shop.com/product/42", "https://www.example-shop.com/product/43", "…"]}How to configure a crawl job
A crawl job needs limits, or it will fetch far more pages than you meant to pay for. Set these before you start one:
- Start URL and scope: the section to crawl (
/blog/or/category/shoes/), and whether subdomains count. - Depth: how many links away from the start URL to follow. Depth 2 or 3 covers most category trees.
- Page limit: a hard cap on pages, so a calendar or a filter combination cannot loop forever.
- Include and exclude patterns: keep
/product/, skip/cart,/login,?sort=and?page=duplicates. - Sitemap: use the site's sitemap to find pages faster, skip it, or crawl only the URLs it lists.
- Rendering: turn JavaScript rendering on only if the pages need it, because it usually costs more per page.
- Delivery: poll the job status, or receive a webhook when it finishes, and verify the webhook's signature.
Check permission before you set the limit. A crawl follows links on its own, so it reaches pages you never looked at. Read the site's robots.txt first: RFC 9309 defines its User-agent, Allow and Disallow rules, and a crawl should stay out of disallowed paths. Read the site's terms as well, because robots.txt is not the whole answer: an API makes fetching easier, but it does not give you permission to collect or republish a site's content. Scrape public pages only, and follow the site's terms.
Map then scrape, with ProxyField's API design
ProxyField's API design has a scrape endpoint and batch jobs rather than separate crawl and map endpoints, so you build map-then-scrape from those two. Most sites list their pages in an XML sitemap, which the sitemaps protocol caps at 50,000 URLs per file; robots.txt, defined in RFC 9309, usually names it in a Sitemap: line.
-
Map
Fetch the sitemap through
POST /v1/scrapewith{"url": "https://www.example-shop.com/sitemap.xml", "render": false, "output": "text"}. That is one billed result. -
Filter
Keep the
<loc>URLs you want, such as those containing/product/. -
Scrape in batches
Send up to 1,000 URLs per call to
POST /v1/jobs/batch:
{
"api": "web_scrape",
"params": {"render": false, "country": "us", "output": "json"},
"items": [{"url": "https://www.example-shop.com/product/42"}, {"url": "https://www.example-shop.com/product/43"}],
"callback_url": "https://your-app.example.com/hooks/proxyfield",
"tag": "shop-products"
}- Collect: each finished job is
POSTed to yourcallback_url, signed with anX-ProxyField-Signatureheader (an HMAC-SHA256 of the body with your webhook secret), or you pollGET /v1/batches/{id}, which returns counts per status and one job ID per URL, in the order you sent them:
{
"id": "bat_7e19c4a2d0f5b683",
"api": "web_scrape",
"created_at": "2026-10-26T15:20:00Z",
"counts": {"total": 1000, "queued": 0, "running": 12, "done": 975, "failed": 13},
"jobs": [
{"index": 0, "id": "job_a1b2c3d4e5f60718", "status": "done"},
{"index": 1, "id": "job_a1b2c3d4e5f60719", "status": "done"}
]
} GET /v1/jobs/{id} returns one job's result once its status is done. Results are kept 48 hours, and the status calls are not billed. An account runs 20 direct requests at once; higher limits go through sales.
What this map-then-scrape run costs: 1 sitemap fetch plus 1,000 product pages is 1,001 billed results, about $0.50 at the plain-HTTP entry price of $0.50 per 1,000, or $0.20 when the results come from a purchase of 10,000 or more. With JavaScript rendering on every product page, the same run costs about $2.00, or $1.00 at the volume price. A crawl job that follows every link instead also pays for the category, filter and pagination pages it passes through.
How do web scraping APIs charge: per request, per successful result or per GB?
All three exist. Per request or credit is the common model for general scraper APIs, per successful result bills only the calls the provider counts as a success, and per GB belongs to proxies, unblockers and scraping browsers, where you pay for the bytes that pass through.
They often sit side by side at one provider: per request or credit (each call, or a credit cost per call that rises with rendering and hard targets), per successful result (only the calls the provider counts as a success) or per GB (the bytes that pass through). ProxyField's scraper APIs are designed to bill per successful result: $0.50 per 1,000 plain-HTTP pages and $2.00 per 1,000 rendered pages, or $0.20 and $1.00 from 10,000 results in one purchase. The same comparison in brief, with its FAQ, is on the pricing page.
| Model | What you pay for | What raises the bill | Watch for |
|---|---|---|---|
| Per request | Each call | Retries you send yourself | Whether failed calls count; providers differ |
| Per successful result | Each result the provider counts as a success | Rendering and premium targets, if priced higher | How "success" is defined: are a 404 and a 200 sign-in page billed? |
| Credits | A bundle of credits, usually in a monthly subscription; a plain page costs 1 credit | Rendering, hard targets and premium IPs cost several credits or dozens each | Unused credits that expire at the end of the month |
| Per GB | Bytes of traffic; common for proxies, unblockers and scraping browsers | Heavy pages, JavaScript, images and retries | Page weight, which is hard to predict before you test |
Credits make a bill hard to forecast. As an illustration with no provider named: if a plain page costs 1 credit and a rendered page 10, then 100,000 rendered pages use 1,000,000 credits, ten times the plain-page plan you might have sized for. A per-result price for the same job is a single figure: 100 × $1.00 = $100 in ProxyField's design (the worked example below).
Before you choose any provider, check four things:
- Are retries billed, or only the final result?
- Are 404s and sign-in pages billed?
- What multiplier do rendering and hard targets carry?
- Does every response say what it cost, in a header or a field?
ProxyField's scraper APIs are designed to bill on successful results only, priced per 1,000 results, with no credits and no per-target multiplier: the price depends on the API and, on the Web Scraping API, on render. That is the only multiplier: a rendered page costs 4 times a plain one at the entry price ($2.00 vs $0.50 per 1,000) and 5 times from 10,000 results ($1.00 vs $0.20).
Which responses are billed in ProxyField's design:
| Response | Billed? |
|---|---|
| The page you asked for, fetched | yes, one result |
| The site's 404 or 410 (the HTTP status codes for a missing page) | yes, as is the market norm |
| A sign-in page the site serves with a 200 status | yes |
| An error response | no |
| A blocked or timed-out request | no |
| Our internal retries on new IPs | no |
An AI answer the engine did not show (no_result) | no |
Every response carries metadata.billed and an X-Billed header. There is no subscription: the APIs are paid from the same crypto balance as the proxies, and the balance never expires.
| API | What it returns | Price per 1,000 successful results |
|---|---|---|
| Web Scraping API, plain HTTP | Any URL | $0.50, or $0.20 from 10,000 results |
| Web Scraping API, JavaScript rendering | Any URL, rendered in a browser | $2.00, or $1.00 from 10,000 results |
| Google SERP API | The Google results page as JSON, with the AI Overview, People Also Ask and the local pack parsed | $1.20, or $0.80 from 10,000 results |
| Google AI Mode, ChatGPT and Perplexity APIs | The AI answer | $1.50, or $1.00 from 10,000 results |
| Amazon scraper API | Amazon product and search pages | $0.60, or $0.30 from 10,000 results |
The lower price applies from 10,000 successful results in one purchase. Details: web scraping API, pricing.
Worked example: 100,000 pages, three ways
| Way to fetch 100,000 pages | Assumption | Cost |
|---|---|---|
| Web Scraping API, plain HTTP | 100,000 results bought in one purchase | 100 × $0.20 = $20 |
| Web Scraping API, JavaScript rendering | the same | 100 × $1.00 = $100 |
| Your scraper + residential proxies, light pages | about 100 KB per page, so about 10 GB | 10 GB × $2.79 = $27.90, plus your servers |
| Your scraper + residential proxies, heavy pages | about 500 KB per page, so about 50 GB | 50 GB × $2.65 = $132.50, plus your servers |
Per-GB pricing rewards light pages and punishes heavy ones; per-result pricing costs the same whatever a page weighs.
Break-even: per result or per GB?
A plain-HTTP result at $0.20 per 1,000 costs $0.0002 a page. At $2.79/GB, that buys about 72 KB of proxy traffic, so pages lighter than 72 KB cost less through your own proxies and heavier ones cost less through the API (before your servers and your time). The break-even page weight for each API price:
| API price per 1,000 results | Cost per page | Break-even page weight at $2.79/GB (10–49 GB) | At $1.95/GB (1,000+ GB) |
|---|---|---|---|
| Plain HTTP, $0.50 | $0.0005 | about 179 KB | about 256 KB |
| Plain HTTP, $0.20 from 10,000 | $0.0002 | about 72 KB | about 103 KB |
| Rendered, $2.00 | $0.002 | about 717 KB | about 1,026 KB |
| Rendered, $1.00 from 10,000 | $0.001 | about 358 KB | about 513 KB |
Measure your own pages first: the HTML of a product page alone is often far lighter than the full page with images and scripts that a browser loads, and only the bytes your scraper fetches count. (1 KB = 1,000 bytes and 1 GB = 1,000,000 KB here.) ProxyField residential proxies cost $2.95/GB for 1 GB, $2.79 from 10 GB, $2.65 from 50 GB, $2.49 from 100 GB, $2.29 from 250 GB, $2.09 from 500 GB and $1.95 from 1,000 GB, with no subscription; the traffic never expires and all purchases are final. The full comparison: scraper API vs proxies.
What a scraper API handles for you
The reason to pay for a scraper API is the work it takes off your hands. With your own scraper, each of these is your job:
| Task | Do it yourself | Scraper API |
|---|---|---|
| IP rotation and the proxy pool | You buy proxies and rotate them | Included in the price |
| Geotargeting | You pick proxy locations | A country parameter |
| JavaScript rendering | You run and scale headless browsers | A render option |
| Block detection and retries | You detect block pages and retry | Done by the API; billing rules for failures vary by provider |
| Headers and browser fingerprints | You keep them realistic | Managed by the provider |
| Parsing | You write and fix selectors | Optional parsed output on some APIs |
| Infrastructure | Servers, queues, monitoring | None |
You still decide what to scrape, how often, and what to do with the data. You also stay responsible for scraping lawfully: an API does not change what is allowed. See is web scraping legal.
How to use a web scraping API
Using a scraper API takes five steps:
-
Get an API key
From the provider's dashboard.
-
Test one URL
In the provider's playground, or with cURL, to see what the response looks like.
-
Choose the options per target
Country, rendering on or off, and output format. Use the lowest-cost option that returns the data, which is usually plain HTTP.
-
Call the API from your code
And parse the response. A short Python version, in the request format of ProxyField's design:
# pip install requests beautifulsoup4
import requests
from bs4 import BeautifulSoup
resp = requests.post(
"https://api.proxyfield.io/v1/scrape",
json={"url": "https://www.example-shop.com/product/42", "render": False, "country": "us", "output": "json"},
headers={"Authorization": "Bearer <api_key>"},
timeout=130,
)
resp.raise_for_status()
data = resp.json()
print(data["metadata"]["billed"], data["status_code"])
print(BeautifulSoup(data["content"], "html.parser").title.get_text(strip=True))- Scale it. Send requests concurrently up to your account's limit, or use batch jobs for long URL lists. Log failures and the cost per page, so you can see which targets need rendering.
Rendered requests take longer, so give them a generous timeout. AI agents can call a scraper API the same way, or through an MCP server: see web scraping MCP servers.
Scraper API vs proxies vs an official API
A scraper API sits between two other ways to get web data:
| Feature | Official API of the site | Scraper API | Your scraper + proxies |
|---|---|---|---|
| What you get | The data the site chooses to expose, in a stable format | Any public page, as HTML or parsed JSON | Anything your code can fetch and parse |
| Who handles IPs and blocks | Nobody needs to: you are an allowed client | The provider | You |
| Cost model | Free tier or the site's own pricing | Per request, per successful result or credits | Servers plus proxy traffic per GB |
| Control | Low: only the fields and rate limits the site allows | Medium: the API's parameters | Full |
| Best for | Sites with a good public API | Teams without scraping infrastructure | High volume on a few sites you know well |
If the site has an official API that covers your data, use it first: web scraping vs API compares the two.
Who benefits from a scraper API
A scraper API pays off for:
- Teams without a scraping engineer: analysts, marketers and founders who can make an HTTP call but do not want to run browsers and proxy pools.
- Many different targets: when you scrape hundreds of sites a little each, writing block handling per site costs more than the API.
- Projects that need data this week, not after a month of building a crawler.
- AI agents and pipelines that need one dependable "fetch this URL" tool.
It pays off less for a team that scrapes a few sites at high volume and can maintain its own code. There, residential proxies billed per GB can cost less per page, as the worked example shows. ProxyField residential proxies rotate the IP on every request or hold a sticky session from 30 s to 36 h, with unlimited concurrent threads: see rotating proxies.
How reliable is a scraper API?
How reliable a scraper API is depends on the target, not on the API alone. The same API can return nearly every page of a simple site and fail often on a heavily protected one. Three things tell you what to expect:
- Test on your own targets. Run a few hundred real URLs through the API and count the successes and the cost per successful page.
- Check what counts as success. A 200 response can still be a block page or an empty template, so validate the fields you need, not only the status code.
- Prefer billing on successful results, and read how the provider defines a successful result.
Keep a fallback for the targets that matter most: a second API, or your own scraper with proxies for the pages the API cannot fetch.
What Is a Scraper API? Scrape FAQ
What is a scraper API?
ProxyField's Web Scraping API is one scraper API: it is designed to fetch any URL, plain HTTP or with JavaScript rendering, for $0.50 per 1,000 successful results ($0.20 from 10,000) or $2.00 ($1.00 from 10,000) rendered, and it is in development, through Contact sales. In general, a scraper API is a web service that fetches pages for you, with the proxies, rendering and retries on the provider's side.
Is a scraper API the same as a web scraping API?
Yes. "Scraper API", "scraping API" and "web scraping API" name the same kind of service: an endpoint that fetches a URL and returns its HTML or data. Some providers also sell site-specific scraper APIs, for example for search results or a marketplace, which return parsed fields for one kind of page.
How does a scraper API work?
You call its endpoint with a target URL and options such as country and rendering. The API fetches the page through its proxy pool, in a headless browser if you asked for rendering, and in a typical design retries with another IP when it gets a block page. Then it returns the HTML or parsed data and records whether the call is billed.
What's the difference between a scraper API's scrape, crawl and map endpoints?
Scrape fetches one URL and returns its content in the same response. Crawl takes a start URL plus a page limit, depth and URL patterns, follows links and runs as an asynchronous job that you poll or receive by webhook. Map returns only a list of a site's URLs, with no content, so you can choose the pages to scrape.
What is a map endpoint in a scraper API?
An endpoint that lists a site's URLs, usually from its sitemaps and links, without fetching each page's content. It is usually much faster than a crawl and often takes a search term to filter the list. You then send the URLs you want to the scrape or batch endpoint.
What is a crawl API?
A crawl API is an endpoint that crawls a site for you: you give it a start URL, a depth and a page limit, and it follows links, fetches every matching page and delivers the results as a job. You collect the results by polling the job or receiving a webhook. It saves you from writing link-following, de-duplication and queue logic.
Is a crawl endpoint synchronous or asynchronous?
Asynchronous in almost every scraper API: the call returns a job ID at once, and the pages arrive later. You check the job's status until it is done, or give a webhook URL that receives the result, and large results come back in pages.
How do I get the results of a crawl or batch job from a scraper API?
Either poll the job's status URL until it reads done and then page through its results, or give a webhook URL when you start the job and the API posts each result to it; check the webhook's signature before you trust the body. In ProxyField's API design, GET /v1/batches/{id} returns counts per status and one job ID per URL, a callback is signed with an HMAC-SHA256 X-ProxyField-Signature header, and results are kept 48 hours.
How do I configure a crawl job in a crawler API?
Set the start URL and scope, a link depth (2 or 3 covers most category trees) and a hard page limit. Add include and exclude URL patterns to skip carts, logins and sorted duplicates, decide whether to use the sitemap, and turn on JavaScript rendering only if the pages need it. Then choose how to receive results: polling or a webhook.
How do I use a web scraping API?
Get an API key, test one URL in the provider's playground or with cURL, and then call the endpoint from your code with the URL and options as parameters. Use plain HTTP where it returns the data and rendering only where needed. Log failures and the cost per page as you scale.
Show 5 more questionsShow fewer questions
How reliable is a scraper API?
It depends on the target: the same API can fetch almost every page of a simple site and fail often on a heavily protected one. Test a few hundred of your real URLs, check the returned fields rather than only the status code, and prefer billing on successful results, after checking how the provider defines a success.
Who benefits from a scraper API?
Teams that need web data but have no one to run browsers and proxy pools. It also suits projects that touch many different sites, work that needs results quickly, and AI agents that need a "fetch this URL" tool. Teams that scrape a few sites at high volume can pay less with their own scraper and proxies.
What are the benefits of a web scraping API?
You skip the infrastructure: no proxy pool, no headless browsers, no block detection to maintain. You get geotargeting and rendering as parameters, and with billing per successful result you pay only for the results the provider counts as successful. The trade-off is less control over how each page is fetched, and a higher cost per page at large volume.
How much more does JavaScript rendering cost in a scraper API?
It depends on the provider: credit-based APIs usually charge several credits for a rendered page instead of one, and per-result APIs set a separate rendered price. In ProxyField's Web Scraping API design, a rendered page costs 4 times a plain one at the entry price ($2.00 vs $0.50 per 1,000 successful results) and 5 times from 10,000 results ($1.00 vs $0.20). Turn rendering on only for pages that need it.
What's the difference between a web scraping tool and a web scraping API?
A web scraping tool is software you run, such as a library, a framework or a point-and-click app, and you supply the IPs and fix it when sites change. A web scraping API is a hosted service you call over HTTP, and it runs the fetching, proxies and retries for you. Many teams combine them: their own parser on top of pages fetched by an API.
Related pages
Easy Trial: 1 GB for $2.95.
Try for the price of 1 GB, no subscription, traffic never expires.