Map API. Every URL on a website.
Send one URL and get every page on the site back, with its status code and how deep it sits. No content is fetched, so it costs 1 credit per 1,000 URLs.
- 500 free credits every month
- No card to start
- Failed requests cost nothing
Map a site in a few seconds
The demo stops at 100 URLs. Sign up free to map up to 10,000 URLs a call.






A site's structure, without the content.
Use a map to see what's on a site before you crawl it, to find pages that don't load, or to keep a list of URLs up to date.
Finds every URL
URLs are found from the links on each page, and from any sitemap or text file the map reaches. Start from a sitemap URL to list every page in it. Each URL is listed once.
maxDepthA status code for each URL
Every URL comes with the status it returned, so pages that are missing or redirect show up without a separate check.
urls[].statusHow deep each page sits
Depth is the number of links from the start URL. Pages many clicks deep are often the ones search engines and visitors miss.
urls[].depthStays where you point it
Limit how deep and how many URLs a map goes, include or skip URLs by pattern, and choose whether to follow links to other domains.
allowPatternsKnow what a crawl will cost
Every map includes an estimate of the credits a crawl of the pages that load would use, before you spend them.
estimatedCreditsLarge sites in the background
Start a map as a background job and get a signed webhook when it's done, or check on it yourself.
webhookUrlTwo ways to run a map.
Most sites map in one request. A background job gives very large sites more time.
Wait for the list
One request that returns the URLs in the response.
- Up to 10,000 URLs
- Status, depth and a crawl estimate in one response
- Stops after about a minute and returns what it found, marked partial
Run it in the background
Starts a job and returns its ID straight away, for sites that take longer than a minute to map.
- Up to 10,000 URLs
- Up to 10 minutes for each job
- Check it with
GET /map/async/{id}, or get a webhook when it's done
What customers say.
“Found Geekflare API to get markdown from URL for my AI agents. It is fast and cheaper and works on almost every website.”
Ram DasiArchitect, PA Consulting“After trying many scraping services, I selected Geekflare to scrape public directories. Mainly for two reasons - it is cheaper and fast.”
“Documentation was easy to follow. We were scraping dynamic pages within hours. Very reliable service.”
The parameters you'll use most.
What each one does and what it costs.
- urlstring—
Where the map starts. Any public URL.
- maxPagesnumber1 per 1,000 URLs
The most URLs to return. Defaults to 500, up to 10,000.
- maxDepthnumberIncluded
How many links away from the start URL to go, up to 10. Defaults to 3.
- allowPatternsstring[]Included
Only list URLs that match one of these patterns, e.g. "/blog/*".
- denyPatternsstring[]Included
Skip URLs that match, e.g. "/tag/*" or "/login".
- includeExternalbooleanIncluded
Follow links to other domains. Defaults to false.
- timeoutnumberIncluded
Seconds to look before returning what it has found.
- webhookUrlstringIncluded
HTTPS URL that gets an event when a background map finishes or fails. Only used by
/map/async.
| Parameter | Type | What it does | Credits |
|---|---|---|---|
| url | string | Where the map starts. Any public URL. | — |
| maxPages | number | The most URLs to return. Defaults to 500, up to 10,000. | 1 per 1,000 URLs |
| maxDepth | number | How many links away from the start URL to go, up to 10. Defaults to 3. | Included |
| allowPatterns | string[] | Only list URLs that match one of these patterns, e.g. "/blog/*". | Included |
| denyPatterns | string[] | Skip URLs that match, e.g. "/tag/*" or "/login". | Included |
| includeExternal | boolean | Follow links to other domains. Defaults to false. | Included |
| timeout | number | Seconds to look before returning what it has found. | Included |
| webhookUrl | string | HTTPS URL that gets an event when a background map finishes or fails. Only used by /map/async. | Included |
POST /map returns the URLs in the response. POST /map/async runs the same map as a background job. The endpoint reference has the full list.
Endpoint referenceWhat people use it for.
See a site before you crawl it
Map the site first, check what's there and what it would cost, then crawl only the sections you need.
- Every URL, grouped by depth
- A credit estimate for the crawl
- Crawl the URLs you keep with the Crawl API
POST /map
{
"url": "https://docs.example.com/",
"maxPages": 5000
}Your first map, in a few lines.
# pip install requests
import requests
response = requests.post(
"https://api.geekflare.com/map",
headers={"x-api-key": "<api-key>"},
json={"url":"https://example.com","maxPages":1000},
)
print(response.json())One API. Every stack.
One account works from an agent, a workflow builder, an SDK or your own service.
MCP server
Sign in once and Claude, ChatGPT, Cursor or Codex can use Geekflare's tools directly, with no glue code to write.
LLM & agent pipelines
LLM-ready Markdown straight into a retrieval pipeline, with the boilerplate stripped so you spend context on content, not navigation.
Workflow builders
Run any endpoint as a step in a visual scenario. Useful when the person who needs the data does not write code.
SDKs & REST
First-party typed SDKs for Python and Node. Everything else talks plain REST, from any language.
How many URLs each plan maps.
A map costs 1 credit per 1,000 URLs it returns, and nothing if it finds none. Crawling the pages costs extra, at the Crawl API's rate.
| Covered per month | Free $0/mo No card | Starter $19/mo | Most popular Growth $69/mo | Business 500K $299/mo | Business 1M $499/mo |
|---|---|---|---|---|---|
Credits a month | 500 | 20,000 | 100,000 | 500,000 | 1,000,000 |
URLs mappedEach URL with its status code and depth, without the content.1 credit per 1,000 URLs | 500,000 | 20,000,000 | 100,000,000 | 500,000,000 | 1,000,000,000 |
Pages crawled afterwardsWith the Crawl API, rendered with JavaScript.1 credit | 500 | 20,000 | 100,000 | 500,000 | 1,000,000 |
| Requests per second | 1 | 5 | 10 | 25 | 25 |
- Free$0/moNo card
- Credits a month
- 500
- URLs mapped1 credit per 1,000 URLs
- 500,000
- Pages crawled afterwards1 credit
- 500
- Requests per second
- 1
- Starter$19/mo
- Credits a month
- 20,000
- URLs mapped1 credit per 1,000 URLs
- 20,000,000
- Pages crawled afterwards1 credit
- 20,000
- Requests per second
- 5
- GrowthMost popular$69/mo
- Credits a month
- 100,000
- URLs mapped1 credit per 1,000 URLs
- 100,000,000
- Pages crawled afterwards1 credit
- 100,000
- Requests per second
- 10
- Business 500K$299/mo
- Credits a month
- 500,000
- URLs mapped1 credit per 1,000 URLs
- 500,000,000
- Pages crawled afterwards1 credit
- 500,000
- Requests per second
- 25
- Business 1M$499/mo
- Credits a month
- 1,000,000
- URLs mapped1 credit per 1,000 URLs
- 1,000,000,000
- Pages crawled afterwards1 credit
- 1,000,000
- Requests per second
- 25
Before you write the integration.
Everything else is in the endpoint docs, and our support team replies to every email.
Open the endpoint docshttps://example.com/sitemap.xml. Each URL is listed once, and links that the site's robots.txt disallows are skipped.count, how many URLs didn't respond in failedCount, and estimatedCredits for crawling the pages that load.maxPages (500 by default). POST /map stops after about a minute and returns what it found, marked partial. For very large sites, POST /map/async runs for up to 10 minutes as a background job.allowPatterns to list only matching URLs, such as "/blog/*", and denyPatterns to skip others. maxDepth limits how many links away from the start URL it goes. Links to other domains are skipped unless you set includeExternal.robots.txt disallows. It is your responsibility to use the results within the site's terms.Ask AI about Geekflare
Open the question in the assistant you already use.
Start with 500 free credits a month.
No card needed. That maps up to 500,000 URLs, or crawls up to 500 pages.