ScraperCity logo

Lead Database API API Documentation

Lead Database API

Query the B2B lead database via API. Access millions of contacts with emails, phone numbers, titles, and company data. Requires $149/mo plan.

Included with $149/mo planGET /api/v1/database/leads

Database APIs are included with the $149/mo plan.

Parameters

NameTypeRequiredDescription
pagenumberOptionalPage number (default: 1)Default: 1Example: 1
limitnumberOptionalResults per page (max: 100)Default: 50Example: 100
titlestringOptionalFilter by job title (partial match)Example: CTO
industrystring[]OptionalFilter by industry (multiple allowed)Example: Technology
countrystring[]OptionalFilter by country name, e.g. "United States" (multiple allowed). US, USA, UK and UAE also work.Example: United States
statestring[]OptionalFilter by state (multiple allowed)Example: California
citystringOptionalFilter by city (partial match)Example: San Francisco
companyNamestringOptionalFilter by company name (partial match)Example: Google
companyDomainstringOptionalFilter by company domain (partial match). Accepts multiple domains, comma or space separated.Example: google.com, stripe.com
senioritystring[]OptionalFilter by seniority levelExample: VP
departmentstring[]OptionalFilter by departmentExample: Engineering
hasEmailbooleanOptionalOnly return leads with email addressesDefault: falseExample: true
hasPhonebooleanOptionalOnly return leads with phone numbersDefault: falseExample: true
minEmployeesnumberOptionalMinimum company employee countExample: 50
maxEmployeesnumberOptionalMaximum company employee countExample: 500
socialUrlstringOptionalMatch by social profile URLExample: x.com/username
keywordsstring[]OptionalCompany keywords: leads at companies tagged with any of these (whole-word match). Comma separated or repeated.Example: saas, fintech
revenueMinnumberOptionalMinimum company annual revenue in USDExample: 1000000
revenueMaxnumberOptionalMaximum company annual revenue in USDExample: 50000000
companyCountrystring[]OptionalCompany headquarters country (multiple allowed). Separate from country, which is where the person is.Example: United States
companyStatestring[]OptionalCompany headquarters state (multiple allowed)Example: Texas
companyCitystringOptionalCompany headquarters cityExample: Austin
notTitlestringOptionalLeave out leads whose title contains any of these (comma separated)Example: assistant, intern
notKeywordsstring[]OptionalLeave out companies tagged with any of these keywords. Comma separated or repeated.Example: staffing, recruiting
notIndustrystring[]OptionalLeave out these industries (multiple allowed)Example: Staffing and Recruiting
technologiesstring[]OptionalCompanies whose website runs ANY of these technologies (multiple allowed, repeat the parameter). Names as in the Tech Stack Scraper's list, any capitalization.Example: HubSpot
technologiesAllstring[]OptionalCompanies whose website runs ALL of these technologies (multiple allowed, repeat the parameter). Keep it to 1-3: every one you add narrows the search.Example: Klaviyo
notTechnologiesstring[]OptionalLeave out companies whose website runs any of these technologies (multiple allowed, repeat the parameter). Only companies whose website technologies are known are returned when this is set.Example: Facebook Pixel
urlstringOptionalA people-search URL: the address of a saved people search, with its filters. Those filters are used as the search, and any other filter you send overrides the matching one. The response lists what was applied, what was made broader, and what is not supported in search_translation. A URL with no filters the database can use returns 400. For a long URL, send the request as a POST with a JSON body (see the example).Example: https://<people-search URL with filters>
excludeDeliveredbooleanOptionalSkip leads you already have: anything this account got from this API before or unlocked in the dashboard. Use it for daily pulls so each run returns only new leads. With this on, request page=1 every time (or use after), because the leads you just received are skipped on the next call.Default: falseExample: true
afterstringOptionalCursor paging for large pulls: returns leads after this id, in id order. Send after=0 on the first call, then send the next_after value from each response until it comes back null. Faster than page numbers deep into a big search. pagination.total is still the whole search.Example: 0

Examples

Daily pull of only new leads (for n8n, Make, Zapier, or a cron job)

curl "https://app.scrapercity.com/api/v1/database/leads?title=CTO&country=United%20States&hasEmail=true&excludeDelivered=true&limit=100" \
  -H "Authorization: Bearer YOUR_API_KEY"

Page through a large search with a cursor

# First call: after=0. Then pass pagination.next_after from each response as after, until it is null.
curl "https://app.scrapercity.com/api/v1/database/leads?title=CTO&country=United%20States&hasEmail=true&after=0&limit=100" \
  -H "Authorization: Bearer YOUR_API_KEY"

Search for CTOs in California tech companies

curl "https://app.scrapercity.com/api/v1/database/leads?title=CTO&country=United%20States&state=California&industry=Technology&hasEmail=true&limit=100" \
  -H "Authorization: Bearer YOUR_API_KEY"

Search with the filters of a people-search URL

curl -G "https://app.scrapercity.com/api/v1/database/leads" \
  --data-urlencode "url=YOUR_PEOPLE_SEARCH_URL" \
  --data-urlencode "limit=100" \
  -H "Authorization: Bearer YOUR_API_KEY"

Long search URL or long lists: POST the same parameters as JSON

# A query string over about 16KB is refused, so send long requests as a POST body.
curl -X POST "https://app.scrapercity.com/api/v1/database/leads" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "YOUR_PEOPLE_SEARCH_URL", "limit": 100}'

SaaS companies with $1M-$50M revenue, no staffing firms

curl "https://app.scrapercity.com/api/v1/database/leads?keywords=saas&revenueMin=1000000&revenueMax=50000000&notKeywords=staffing&title=CEO&limit=100" \
  -H "Authorization: Bearer YOUR_API_KEY"

CEOs of companies on Klaviyo, PayPal and Shopify that do not run Facebook Pixel

curl "https://app.scrapercity.com/api/v1/database/leads?title=CEO&technologiesAll=Klaviyo&technologiesAll=PayPal&technologiesAll=Shopify&notTechnologies=Facebook%20Pixel&limit=100" \
  -H "Authorization: Bearer YOUR_API_KEY"

Get leads from a specific company

curl "https://app.scrapercity.com/api/v1/database/leads?companyDomain=google.com&limit=50" \
  -H "Authorization: Bearer YOUR_API_KEY"

Paginate through VP-level leads

curl "https://app.scrapercity.com/api/v1/database/leads?seniority=VP&hasEmail=true&page=2&limit=100" \
  -H "Authorization: Bearer YOUR_API_KEY"

Use Cases

  • •Build targeted outreach lists programmatically
  • •Enrich your CRM with B2B contact data
  • •Power cold email campaigns at scale
  • •Feed leads into your sales automation pipeline

Best Practices

  • •Use filters to narrow results - avoid pulling the entire database
  • •Rate limit: 100 leads per request, 100,000 new leads per day. Leads you already have do not count again
  • •Every lead the API returns is saved to your account, so excludeDelivered=true can skip it next time. It also shows in your unlocked leads in the dashboard
  • •For big pulls use after + next_after (cursor paging) instead of high page numbers
  • •Paginate with page and limit parameters for large result sets
  • •Combine filters for more targeted results (e.g. title + industry + location)
  • •Each lead includes company_industry, company_size, employees_count, company_website, company_annual_revenue, company_city, company_state, company_country and keywords when we have them
  • •Company filters (keywords, revenue, company location) need company data that is still being prepared right after launch. Until it is ready, a request using them returns 409 with filters_not_applied_yet listing them, and nothing counts toward your daily limit
  • •A search that takes too long to run returns 503. Narrow it (fewer titles or keywords, or add a location or company size) and try again
  • •Requires $149/mo plan - upgrade at /dashboard/billing
  • •Daily limit resets at midnight UTC

Every scrape returns a runId. Poll GET /api/v1/scrape/status/{runId} until it completes, then download via GET /api/downloads/{runId}?format=csv.

Authenticate every request with Authorization: Bearer YOUR_API_KEY. See the full API reference for authentication, rate limits and error codes.