↑ ↓ to move ↵ to open

Web Crawling API

Crawl a whole site and get every page as Markdown.

The Web Crawling API starts at one page, follows its links across the same site and returns every page it reaches as Markdown. Use it to load a documentation site into a search index, or to read a whole site at once.

Call it

curl https://data.upscrape.com/crawl \  -H "Authorization: Bearer $UPSCRAPE_API_KEY" \  -H "Content-Type: application/json" \  -H "Prefer: wait=30" \  -d '{"url": "https://docs.stripe.com/payments", "max_pages": 10}'

Each page in results[0].data.pages has its url, title, depth and full markdown. From a run on staging on 16 October 2026:

Output
https://docs.stripe.com/payments Payments | Stripe Documentationhttps://docs.stripe.com/ Stripe Documentationhttps://docs.stripe.com/get-started Get started | Stripe Documentationhttps://docs.stripe.com/revenue Revenue | Stripe Documentationhttps://docs.stripe.com/risk Risk | Stripe Documentation…

A crawl of many pages can take more than 30 seconds. The call then answers 202 and you fetch the job when it's done; Long-running calls has a loop that uses this same crawl.

Shape the crawl

InputWhat it does
max_pagesPages to fetch in this call, up to 100. 10 by default.
max_depthHow many links away from the start page to go, up to 10. 2 by default.
include_patterns, exclude_patternsOnly follow, or never follow, URLs that match, such as "path:/docs/*".
include_subdomainsAlso crawl other subdomains of the same site, such as docs. and blog..
respect_robotsOn by default: follow the site's robots.txt.
delay_msA pause between requests to the site, up to 5 seconds.

Crawl in parts

completion_reason says why it stopped: every page reached, or the max_pages you set. When there is more, the response includes a continuation_token: send it back with the same options and the crawl carries on where it stopped, without repeating pages.

A very large crawl

delivery: "hosted" returns the pages as a file to download, instead of inside the JSON, when there is too much for one response. auto, the default, chooses for you.

Something missing or unclear? Ask the team that builds the endpoints.