API
Rate limits & page sizes
How much you can pull per request, per minute, and per export — each limit read from our code, not typed in by hand.
API
How much you can pull per request, per minute, and per export — each limit read from our code, not typed in by hand.
API
How much you can pull per request, per minute, and per export — each limit read from our code, not typed in by hand.
Each limit below is read from our code rather than typed in by hand. The REST page size and the export caps were set by measuring real leads against the response, storage and time limits each has to fit — not chosen to look good.
Reading leads
| 2,500 leads | Max per page on GET /api/v1/leads (default 50). Page with limit + offset; the response returns next_offset until you reach the end. |
| 1,000 leads | Max per MCP tool call (default 25). Lower on purpose — MCP results are fed into a model's context window, so a huge page costs you tokens you can't use. Use export for volume. |
| 120/minute | Requests per API key. Exceeding it returns 429; retry after the window. |
| 8/minute | New searches per account — searches call paid data providers, so they're metered separately from reads. |
Running searches
| 250 cities | Max cities in one bulk search, run from the Search page in the web app — POST /api/v1/search and MCP search_leads take one city per call, and an automation takes its own list of cities. A sanity ceiling on job size: your plan's daily city budget is the bound you are more likely to meet. |
| 250–550 searches/day | Searches per rolling 24 hours, by plan: Solo 250, Pro 300, Business 500, Unlimited 550 (Free 250) — never below your daily city budget, so a day of one-city searches can use all of it. Counted per search, not per city: API calls, dashboard searches and automation runs all count, including a search you cancel; enrichment requests have their own limit below. Exceeding it returns 429 with the time you can run the next one. It is a rolling window, not a daily reset: each search frees up 24 hours after it ran. |
| 100–550 cities/day | Daily city budget, by plan: Solo 100, Pro 300, Business 500, Unlimited 550 (Free 50). Exceeding it returns 429 with the time there is room; a single search larger than the whole budget is refused outright, so split it. It is a rolling 24 hours, not a daily reset: each city frees up 24 hours after the search that used it, and a queued search you cancel before any of its cities was searched gives them back. On a metered plan the city budget is far larger than the lead allotment can pay for, so the leads run out first; on Unlimited the 210,000-per-7-day-period limit is what binds. A higher budget is available on request; an account given one has it in place of its plan's, everywhere — searches, campaigns and the searches-per-day limit — and its Billing page and the 429 state its own figure. |
| 50/day | Enrichment requests (POST /api/v1/enrich, MCP enrich_domains) per account per rolling 24 hours. Exceeding it returns 429; each request frees up 24 hours after it was made. |
| 10 in flight | Max searches queued or running per account at once. A new search past that returns 429 naming the limit. Free a slot by waiting for one to complete, or cancel a queued search that hasn't delivered any leads yet with DELETE /api/v1/searches/:id. Accounts are served fairly — every account with work gets one running search at a time, in the order created — so submit large batches in waves of 10. |
Advanced search (campaigns)
| 25 at once | Campaigns running or paused per account. A new one past that returns 429; stop one to start another. |
| 40/day | New campaigns per rolling 24 hours, stopped ones included — or 250,000 searches (keywords × places), whichever comes first. A 429 past it: wait rather than retrying. |
| 5/minute | Campaign start attempts per account — a start refused for its body (a 400) counts too, since the limit is checked first. A 429 with Retry-After past it. |
| 50,000 searches | Per campaign: keywords (up to 20) × places. One API request names up to 25,000 regions and places. |
| 80% of the city budget | A campaign's batches use at most this share of your plan's daily city budget, so the rest is always left for your own searches; a campaign waiting for room says until when (status_detail, resume_at) and carries on by itself. Its batches don't count toward your searches per day, but each queued or running batch takes one of your 10 in-flight slots. |
| 100–1,000,000 leads | The range of a campaign's lead_cap and a search's max_leads; anything else is a 400. |
| 2,500 leads | Max per page on GET /api/v1/campaigns/:id/leads (default 50), paged with next_cursor. GET /api/v1/campaigns lists up to 100 (default 25), plus any still running or paused past them. |
There is no single response that can carry 50,000 leads — ours or anyone’s. A serverless response is capped at 4.5 MB and a fully verified lead is about 1 KB, so past a few thousand rows the honest answer is pagination for reading and an export job for bulk.
Bulk export (POST /api/v1/exports) — writes a file or pushes to your CRM, so it isn’t bound by the response cap:
| 50,000 leads | Per CSV or XLSX export. Returns a download link, valid for 7 days. |
| 25,000 leads | Per JSON export. Lower than CSV because JSON repeats every field name on every row — the same leads are roughly three times the bytes. |
| 5,000 leads | Per Google Sheets export — one append request, which Sheets caps by payload size. |
| 1,000 leads | Per Close or GoHighLevel export. Much lower, because CRMs take one API call per lead — this is a time limit, not a size limit. For a bigger push, export CSV and import the file. |
| 10 / minute | Exports per account, REST and MCP together (a 429 with Retry-After past it). A client paging through next_cursor makes one export a page. |
If more leads match than the limit, the export sends the best-ranked batch and the response sets truncated: true with the limit that applied and a next_cursor: call again with cursor set to it (for Google Sheets, with the spreadsheet_id it returned) for the next batch. A batch the limit cut short always says so. A library export (all=true) continued over several calls reads the library live, so a lead a search finds again between calls can be skipped or sent twice — see Exports.