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.

Get a free API key
4.9average across
G2 — 4.8 out of 5Google — 4.9 out of 5Product Hunt — 5.0 out of 5
  • 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.

Try:
Trusted by teams at
PfizerNBCUniversalTCSHostingerKissflowLookoutPlivoClearSaleSparkianCBSplitOmreon
PfizerNBCUniversalTCSHostingerKissflowLookoutPlivoClearSaleSparkianCBSplitOmreon

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.

maxDepth

A 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[].status

How 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[].depth

Stays 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.

allowPatterns

Know 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.

estimatedCredits

Large 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.

webhookUrl

Two ways to run a map.

Most sites map in one request. A background job gives very large sites more time.

POST /map

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
POST /map/async

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.

Read all reviews
“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.”
Vishu SharmaCTO
“Documentation was easy to follow. We were scraping dynamic pages within hours. Very reliable service.”
Marco SilvaAnalytics Engineer

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.

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 reference

What 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
Typical request
POST /map
{
  "url": "https://docs.example.com/",
  "maxPages": 5000
}
Example output
count1,842
URLs found
urls[].depth0, 1, 2…
estimatedCredits1,790
for a crawl of the pages that load

Your first map, in a few lines.

quickstart.pyplain REST
# 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.

ClaudeChatGPTCursorCodexAny MCP client
Set up the MCP server

LLM & agent pipelines

LLM-ready Markdown straight into a retrieval pipeline, with the boilerplate stripped so you spend context on content, not navigation.

RAGAgentsClean MarkdownGrounded search
See the solutions

Workflow builders

Run any endpoint as a step in a visual scenario. Useful when the person who needs the data does not write code.

ZapierMaken8n
Browse integrations

SDKs & REST

First-party typed SDKs for Python and Node. Everything else talks plain REST, from any language.

PythonNode.jsPostman
Open the API reference

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.

2 months free
  • Free
    $0/mo
    No 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
Start freeCompare plans and credit packsEvery account starts free. Upgrade when you need more, or buy a credit pack from $10.

Before you write the integration.

Everything else is in the endpoint docs, and our support team replies to every email.

Open the endpoint docs

1 credit per 1,000 URLs it returns, rounded up, so a map of 500 URLs costs 1 credit and a map of 10,000 costs 10. A map that finds nothing costs nothing. The free plan's 500 credits cover up to 500,000 URLs a month.

Map lists a site's URLs with their status codes, without fetching the content. [Crawl](/crawl/) fetches every page and returns it as Markdown or HTML. Use Map to see what's on a site and what a crawl would cost, then Crawl the pages you want.

From the links on each page it visits, and from any sitemap or text file it reaches. To list every page in a sitemap, start from the sitemap's URL, such as https://example.com/sitemap.xml. Each URL is listed once, and links that the site's robots.txt disallows are skipped.

The URL, the HTTP status it returned, and its depth: how many links it is from the start URL. The response also has the total count, how many URLs didn't respond in failedCount, and estimatedCredits for crawling the pages that load.

Up to 10,000, set with 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.

Use 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.

Yes, for the pages on your own site: any URL that returns a 404 or another error shows up with that status. To check every link on one page, including links to other sites, use the Broken Link Checker API.

No. Map requests each page without a browser, which keeps it fast and cheap. Links that only appear after JavaScript runs aren't found. If the site has a sitemap, start from its URL to list those pages too.

Listing a site's public URLs is generally legal, but it depends on the site's terms of service. Map skips links that 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.