Skip to main content
Get a clean list of a site’s URLs, such as every product, article or listing page, without fetching their content. Crawl follows the links from one start URL, keeps the ones that match your patterns, normalizes and deduplicates them, and hands you the full list as one file. Use it to plan a scrape, audit a site or feed a Batch job. Uses: Crawl with include_patterns, exclude_patterns, depth and max_items, and the download endpoint

Ask your AI agent

With the Zenrows MCP server connected to Claude, Cursor or any MCP client, paste this prompt. Your agent picks the right Zenrows tools and settings on its own.

How patterns steer the crawl

include_patterns decides two things: which URLs Crawl returns, and which links it opens to find more. Plan your patterns around the path that leads to your items, not just the items themselves. depth sets how many link steps Crawl follows from the start URL: 1 returns the links on the start page. max_items sets how many URLs Crawl keeps and max_pages how many pages it opens, both 100 by default. Each opened page is billed as one Fetch request.

Map the site and export a CSV

Start a crawl without output_format, wait until it ends, download every URL as NDJSON, then write a CSV.
The CLI takes --include-patterns and --exclude-patterns once per pattern. See the CLI guide.

Example output

The Python run printed:
urls.jsonl holds one URL per line:
And urls.csv is ready for a spreadsheet:
Fifteen opened pages found 131 URLs: 12 listing pages and 119 products. stop_reason: max_pages means the site holds more, so raise max_pages to map the rest. URLs come back normalized: http and https, www. and trailing-slash spellings of one URL count as one, and tracking parameters such as utm_* are removed.

Map one level

For a quick inventory of what a single page links to, set depth: 1. Crawl opens the start page once and returns its matching links:
cURL
On the catalog’s first page that returns 22 URLs, 16 products and 6 pagination links, for the cost of one page.

Customize it

Troubleshooting

  • Few URLs, all from the first page: your include patterns skip the pages that link onward. Add the pagination or category path, such as /page/.
  • status: failed with no_items_found: no link matched your patterns. Check the patterns against real URLs on the start page; patterns match plain text anywhere in the URL.
  • The list stops short: stop_reason is max_items or max_pages. Start a new crawl with higher values.
  • A download is missing URLs: the X-Crawl-Status header read running. Download again once the crawl has ended.
  • 429 with too_many_crawls: your account’s Crawl and Batch jobs are all running. Wait the Retry-After seconds, then start the crawl.

Crawl a website from a start URL

Crawl and store each page’s HTML in the same run.

Scrape a list of URLs

Turn your URL inventory into pages or data with Batch.

Get structured JSON from any page

Extract fields from each mapped page.

Build a RAG knowledge base from a website

From a mapped site to markdown chunks for retrieval.