Website Crawler API
Crawl any website to clean Markdown for LLMs and RAG, map every URL from its sitemap, or batch scrape a list of URLs, each with one API call. Crawls run as jobs with a status URL or a signed webhook, obey robots.txt, and bill only the pages that come back.
50 free credits on signup, enough to map a site and crawl 10 pages. No card.
{ "data": { "url": "https://scavio.dev/", "links": [ { "url": "https://scavio.dev/alternatives/apify", "source": "sitemap", "lastmod": "2026-07-21T09:15:48.223Z" }, { "url": "https://scavio.dev/alternatives/apify-youtube-actor", "source": "sitemap", "lastmod": "2026-07-21T09:15:48.223Z" }, { "url": "https://scavio.dev/alternatives/bing-web-search-api", "source": "sitemap", "lastmod": "2026-07-22T11:45:26.904Z" }, { "url": "https://scavio.dev/alternatives/nimble-api", "source": "sitemap", "lastmod": "2026-07-21T09:15:48.223Z" }, { "url": "https://scavio.dev/alternatives/perplexity-api", "source": "sitemap", "lastmod": "2026-07-22T11:45:26.904Z" }, { "url": "https://scavio.dev/alternatives/scrapingdog", "source": "sitemap", "lastmod": "2026-07-21T09:15:48.223Z" } ], "total_found": 9, "returned": 6, "truncated": true, "sitemaps_read": 1 }, "response_time": 4556, "credits_used": 1, "credits_remaining": 35330}Live map call against the real endpoint, first 25 URLs. 2 free runs, then it's your own key.
What is the Scavio Website Crawler API?
The Scavio Website Crawler API crawls a site from one URL and returns its pages as Markdown, text or HTML. Map lists a site's URLs from its sitemap for 1 credit, crawl discovers and extracts same-site pages as a job, and batch extracts up to 1,000 URLs. Each successful page costs 1 credit; failed pages are free.
- 1
- credit per successful page (2 on ultra)
- 10,000
- pages per crawl on Growth
- 3 days
- results kept after a job finishes
Crawl, map and batch scrape with one key
No crawler to run, no queue to manage. Start a job, then poll or take a webhook.
Crawl a whole site to Markdown
POST /api/v1/extract/crawlOne POST starts a crawl from any URL. Same-site pages are found from the sitemap and the links on each page, breadth-first, pages under your start path first, and every page comes back as clean Markdown, plain text or HTML.
Map every URL from the sitemap
POST /api/v1/extract/mapGet a site's page URLs in one synchronous call for 1 credit, from its sitemaps, sitemap indexes and start page, with lastmod dates, path globs and a keyword filter. Plan a crawl, or feed the list straight into batch.
Batch scrape a URL list
POST /api/v1/extract/batchSend up to 1,000 URLs from any number of sites and get each one back as Markdown in input order. Duplicates are removed and invalid URLs are reported up front, never billed.
Pay only for pages that come back
POST /api/v1/extract/crawlEach successful page costs 1 credit (2 on the hardest-pages tier). Failed pages, 404s, robots-skipped pages, sitemap reads, polling and cancelling cost nothing, and a crawl that runs out of credits stops cleanly.
Signed webhooks or polling
POST /api/v1/extract/crawlPoll the status URL for progress and paged results, or set webhook_url and get one HMAC-SHA256 signed POST when the job completes, fails or is cancelled, retried twice.
Robots.txt obeyed, same site only
POST /api/v1/extract/crawlCrawl and map follow the site's robots.txt rules and Crawl-delay, never leave the site unless you allow subdomains, and never fetch a URL twice.
Every Extract endpoint
Map is synchronous. Crawl and batch return a 202 with a job id; their status and cancel calls are free. Per-page prices are Extract's: normal 1, advanced 1, ultra 2 credits.
| Endpoint | Returns | Credits |
|---|---|---|
Map/api/v1/extract/map | A site's page URLs from its sitemaps and start page, with source and lastmod, filtered by path or keyword. Up to 5,000 per call, robots.txt obeyed | 1 |
Crawl/api/v1/extract/crawl | Starts a crawl of one site: same-site pages discovered breadth-first within depth, page and path limits, each as Markdown, text or HTML. 202 with a job id. 2 per page on ultra | 1 per page |
Crawl statusGET /api/v1/extract/crawl/{id} | Progress, page counts and credits used, plus the page results paged by cursor | Free |
Cancel crawlDELETE /api/v1/extract/crawl/{id} | Stops the crawl; nothing further is fetched or billed | Free |
Batch extract/api/v1/extract/batch | Up to 1,000 URLs in one job, results in input order, invalid URLs reported and never billed. 202 with a job id. 2 per page on ultra | 1 per page |
Batch statusGET /api/v1/extract/batch/{id} | Progress and the page results in input order, paged by cursor | Free |
Cancel batchDELETE /api/v1/extract/batch/{id} | Stops the batch; nothing further is fetched or billed | Free |
Extract one URL/api/v1/extract | One page as Markdown, text or HTML, synchronously. 2 credits on ultra | 1-2 |
Screenshot/api/v1/extract/screenshot | A full-page PNG of any URL as a base64 data URI. 5 credits on ultra | 1-5 |
Failed, 404 and robots-skipped pages are never billed. Free plan: 10 pages per crawl. See plans
Crawl a site to Markdown from code
Start a crawl, poll it, then page through the Markdown. The response on the right is a real capture of a three-page crawl of the Hono docs, field names and all.
import time
from scavio import ScavioClient
client = ScavioClient(api_key="sk_live_your_key")
# 1. Start a crawl: 202 with a job id, 0 credits so far
job = client.extract.crawl("https://hono.dev/docs", max_pages=200, include_paths=["/docs"])
job_id = job["data"]["id"]
# 2. Poll progress (free) until the job ends
while True:
s = client.extract.crawl_status(job_id, include_content=False)
if s["data"]["status"] in ("completed", "failed", "cancelled"):
break
time.sleep(5)
# 3. Page through the Markdown, 100 pages per response
cursor = None
while True:
page = client.extract.crawl_status(job_id, status="succeeded", limit=100, cursor=cursor)
for r in page["data"]["results"]:
save(r["url"], r["content"]) # your vector store, files, RAG index...
cursor = page["data"]["next_cursor"]
if not cursor:
break{
"data": {
"id": "crawl_01a12d21-fb42-7000-88cf-6887f653ee5d",
"type": "crawl",
"status": "completed",
"stopped_reason": "max_pages",
"error": null,
"url": "https://hono.dev/docs",
"format": "markdown",
"mode": "normal",
"pages": {
"discovered": 3,
"queued": 0,
"succeeded": 3,
"failed": 0,
"skipped": 0
},
"credits_used": 3,
"created_at": "2026-10-11T22:42:35.162Z",
"started_at": "2026-10-11T22:42:36.162Z",
"completed_at": "2026-10-11T22:42:44.162Z",
"expires_at": "2026-10-14T22:42:44.162Z",
"webhook": null,
"status_url": "https://api.scavio.dev/api/v1/extract/crawl/crawl_01a12d21-fb42-7000-88cf-6887f653ee5d",
"results": [
{
"url": "https://hono.dev/docs/concepts/motivation",
"depth": 1,
"status": "succeeded",
"status_code": 200,
"content_length": 7329,
"truncated": false,
"error": null,
"skip_reason": null,
"credits": 1,
"content": "- Title: Philosophy - Hono\n\n...\n\nIn this section, we talk about the concept, or philosophy, of Hono.\n\n...\n\nAt first, I just wanted to create a web application on Cloudflare Workers. But, there was no good framework that works on Cloudflare..."
},
{
"url": "https://hono.dev/docs/concepts/routers",
"depth": 1,
"status": "succeeded",
"status_code": 200,
"content_length": 9924,
"truncated": false,
"error": null,
"skip_reason": null,
"credits": 1,
"content": "- Title: Routers - Hono\n\n...\n\nThe routers are the most important features for Hono.\n\nHono has five routers.\n\n...\n\n**RegExpRouter** is the fastest router in the JavaScript world..."
}
],
"next_cursor": null
}
}Scavio vs Firecrawl, Apify and Jina for crawling
What each one's own public page says, read on 11 October 2026.
Firecrawl, Apify Website Content Crawler, Jina Reader
- Firecrawl: 1 credit per page for scrape, crawl and map; a page that returns an error status such as 403 or 404 still costs 1 credit
- Firecrawl: 1,000 free credits a month; Hobby is $16 a month billed yearly for 5,000 credits
- Apify Website Content Crawler: pay per platform usage, about $0.2 per 1,000 pages without a browser and $0.5 to $5 per 1,000 with one, by its own estimate
- Jina Reader: one URL per request, billed by output tokens
Scavio Website Crawler API
- 1 credit per successful page (2 on ultra); failed, 404 and robots-skipped pages cost nothing
- Map, crawl and batch as plain REST calls with job status, cursor paging, cancel and signed webhooks
- $0.002 per page on Growth billed yearly; 50 free credits on signup, plans from $30 a month
- The same key covers Google search and 50+ platform APIs, so crawling sits next to the rest of your data
Competitor details from firecrawl.dev/pricing, apify.com/apify/website-content-crawler and jina.ai/reader as of October 2026; check their pages for current terms.
What developers build with it
RAG and LLM knowledge bases
Crawl a documentation site, help center or blog to Markdown with links kept, chunk it and load it into a vector store. Re-crawl on a schedule and compare lastmod dates from map to refresh only what changed.
map + crawlSitemap to Markdown
Map a site to get every URL its sitemap lists, keep the paths you care about with include_paths, and batch extract them to Markdown in one job instead of one request per page.
map + batchReplace a hand-written crawl loop
If your script loops single-page Extract over one site, one crawl call replaces it: no per-request concurrency errors, no out-of-credits failure mid-loop (the job stops cleanly), and results you can page through later.
crawlCompetitor and content monitoring
Crawl a competitor's pricing, changelog or docs pages on a schedule and diff the Markdown, or map their sitemap to spot new pages by lastmod.
map + crawlAgent tools that read whole sites
Give an agent a crawl or batch tool through the agent skill, so it can read a site or a list of sources end to end and cite them.
crawl + batch + agent skillSEO audits and site inventories
List every URL a site publishes with source and lastmod, then pull titles and content for each page to check coverage, thin pages and broken sections.
map + batchHow to crawl a website to Markdown
- 1
Get an API key
Sign up for a Scavio account and copy your key from the dashboard. You get 50 free credits on signup, with no card: enough to map a site and crawl 10 pages on the Free plan.
- 2
Start a crawl
POST {"url": "https://example.com/docs", "max_pages": 10} to https://api.scavio.dev/api/v1/extract/crawl with an Authorization: Bearer header. The response is a 202 with a job id and a status_url, and no credits are used yet.
- 3
Collect the pages
Poll the status_url (free) until status is completed, then page through results by cursor; each succeeded result carries the page as Markdown. Or set webhook_url and Scavio POSTs a signed event when the crawl ends.
Website Crawler API FAQ
What is a website crawler API?
+
A website crawler API crawls a site for you and returns its pages as data. With Scavio you POST a start URL to /api/v1/extract/crawl; the crawl discovers same-site pages from the sitemap and from links, breadth-first within your depth, page and path limits, and returns each page as Markdown, plain text or HTML. It runs as a job: a 202 with an id, then results from a status URL or a signed webhook. Map lists a site's URLs for 1 credit, and batch extracts up to 1,000 URLs you already have.
Does the crawler respect robots.txt?
+
Yes, always. Crawl and map read the site's robots.txt and skip disallowed pages, which appear in crawl results as skipped with skip_reason robots and cost nothing. A Crawl-delay is honoured up to 5 seconds. There is no override. Batch behaves like single-page Extract: you named each URL, so it is fetched as you asked.
How many pages can I crawl?
+
Up to 10,000 pages per crawl, depending on your plan: Free 10, PAYG 100, Project 500, Bootstrap 2,000, Startup 5,000 and Growth 10,000. Active crawl and batch jobs at once are 1, 1, 2, 3, 5 and 10, and URLs per batch are 10, 50, 100, 500, 1,000 and 1,000. Map returns up to 500 links on Free, 1,000 on PAYG and 5,000 on paid plans. A request above your plan's limit returns a 400 that names the cap.
Does it render JavaScript?
+
Yes, set mode to advanced. The default normal mode covers static pages, docs and most blogs; advanced renders JavaScript for pages whose content is built in the browser, at the same 1 credit per page; ultra handles the hardest pages at 2 credits per page. The mode applies to every page in the crawl or batch.
How much does the website crawler API cost, and do I pay for failed pages?
+
You pay only for pages that come back: 1 credit per successful page on normal and advanced, 2 on ultra. Failed pages, 404s, robots-skipped pages, the robots.txt and sitemap reads, polling and cancelling are free, and map costs 1 credit per call. On the Growth plan billed yearly ($2 per 1,000 credits) that is $0.002 per page. New accounts get 50 free credits with no card, and paid plans start at $30 per month for 7,000 credits.
What happens if I run out of credits mid-crawl?
+
Credits are taken page by page as the crawl runs, with nothing reserved up front. If your balance runs out, the crawl stops cleanly with stopped_reason insufficient_credits, keeps every page it already fetched, and those pages stay readable from the status URL. You need one page's cost to start a job.
How do crawl webhooks work?
+
Set webhook_url to a public https URL. When the job completes, fails or is cancelled, Scavio sends one POST with event, the job summary and sent_at, and a Scavio-Signature header of the form t=<unix>,v1=<hex>, where v1 is the HMAC-SHA256 of the timestamp, a dot and the raw body, keyed with the webhook_secret returned in the 202. Verify it in constant time and reject old timestamps. A delivery without a 2xx is retried 30 seconds and 5 minutes later. Webhook verification code in Python and JavaScript
Can I get Markdown for LLMs and RAG?
+
Yes. Markdown is the default format for crawl and batch, with links kept as absolute URLs, so each page is ready to chunk and embed. Use text for plain text or html for the raw page. Each result also carries its URL, depth, HTTP status and content_length, which make good metadata for a vector store.
How does map find a site's URLs?
+
Sitemap first. Map reads the sitemaps listed in robots.txt and the site's sitemap.xml, follows sitemap indexes and gzipped sitemaps, then adds the links on the start page. Each link says whether it came from the sitemap or the page, with the site's lastmod date when it publishes one. Filter with include_paths, exclude_paths and search, and set sitemap to only or skip to use one source. One call returns up to 5,000 links for 1 credit.
How do I turn a sitemap into Markdown?
+
Call map with sitemap set to only to get the URLs the sitemap lists, keep the ones you want, then send them to batch extract, up to 1,000 per job depending on plan. Batch returns each URL as Markdown in input order and bills only the pages that come back. Or start a crawl with sitemap set to only to fetch the sitemap's pages without following links.
Can I cancel a crawl?
+
Yes. DELETE /api/v1/extract/crawl/{id} stops a queued or running crawl straight away. No further pages are fetched or billed, the pages already fetched stay readable for 3 days, and a cancelled event goes to your webhook if you set one. Cancelling also frees an active-job slot.
How long are crawl results kept?
+
3 days after the job finishes; the status response gives the exact expires_at. Each page stores up to 2 MB of content (marked truncated beyond that), each job up to 250 MB, and a job runs for at most 6 hours. Copy the pages you need into your own storage.
Is Scavio a Firecrawl alternative?
+
For crawl, map and batch scraping to Markdown, yes, with differences worth knowing. Both charge about 1 credit per page. Firecrawl's pricing page (October 2026) says a page that responds with an error status such as 403 or 404 still costs 1 credit; Scavio bills only successful pages. Firecrawl's paid plans include monthly credits starting at Hobby, $16 per month billed yearly for 5,000; Scavio has 50 free credits once, then plans from $30 per month for 7,000 credits, and the same key also covers search and 50+ platform APIs. Firecrawl offers features Scavio does not, such as JSON extraction formats, an interact API and a recurring free tier.
Does the crawl stay on one site?
+
Yes. A crawl only fetches pages on the start URL's site, where www and the bare domain count as one site. Set allow_subdomains to include subdomains such as docs.example.com. Pages under the start URL's path are crawled first, query-string variants count as one page by default, and no URL is fetched twice.
Explore more of Scavio
Screenshot API
A full-page PNG of any URL, from the same Extract family.
Website text extractor
Free tool: paste a URL and get its text, no signup.
Crawl docs
Params, plan limits, webhooks and real responses.
Map docs
Sitemap-first URL discovery for 1 credit.
Search API for AI agents
Search plus 50+ platform APIs on the same key.
Pricing
Credit packs and plans, no per-endpoint surcharge.
Crawl your first site today
50 free credits on signup, no card. Your first crawl is one POST with a URL in it.