company logo

Salesforge Helpdesk

Go to Salesforge
Agent FrankLeadsforge - Search Engine For LeadsPrimeforge - Google & MS365Mailforge - Distributed Email InfrastructureInfraforge - Private Email InfrastructureWarmforge - Email Deliverability Center
All collectionsAPI & DevelopersLeadsforge Public API

Leadsforge Public API

Leadsforge public API: what you can do, free monthly search quota, credits, access without a subscription, error codes and rate limits

API docs: https://api.leadsforge.ai/public/swagger/index.html

The Leadsforge public API gives you programmatic access to lead sourcing and enrichment, so you can use Leadsforge directly in your own workflows, scripts and tools. The base URL is https://api.leadsforge.ai/public/v1.

What you can do with the API

  • Search leads: use the same ICP filters as the app, with cursor pagination. The output matches the CSV download (locations are split into city and country). You can skip contacts you already own with the exclusion filters excludeEmails, excludeDomains and excludeLinkedInURLs, or target specific companies with companyDomains.include. POST /search/count returns how many leads match a filter set without paginating.

  • Enrich contacts: find work emails, phone numbers and LinkedIn URLs. Single lookups (/enrichment/email and /enrichment/phone) answer immediately. Bulk jobs (/enrichment/emails, /phones and /linkedin) run in the background. A LinkedIn URL is only returned if you enrich for it.

  • Lookalike companies: give up to 10 company domains and get similar companies. /lookalikes/preview returns company data only. To get people, pass a returned domain into POST /search with companyDomains.include.

  • Company followers: start a background search for the people who follow a company on LinkedIn, then fetch the job status and results.

  • Maps discovery: find local businesses from Google Maps by category and radius, then look up their owners (/maps-discovery/enrich-owners, up to 200 businesses from one search job).

  • Filter values and balance: the /filters endpoints list the accepted values for controlled filters such as industries, seniorities and locations. Use the exact values they return, because some are case-sensitive. GET /balance returns your credit balance.

API access and credits

  • API key: the key works at account level and uses the credits of the whole account.

  • No subscription needed: your API key works whether your subscription is active or cancelled, as long as you have credits. If you bought credits and only need the API now and then, you don't have to keep a plan running.

  • Credits: same credit system as in the app. For background jobs, credits are reserved upfront and you are only charged for successful results. GET /balance shows your available credits, reserved credits and the current price of each action.

Free monthly requests

Every account gets a free allowance each calendar month. After it is used up, each request costs 1 credit.

  • POST /search: 1,000 free requests, then 1 credit per request. Every cursor page counts as one request.

  • POST /search/count: 1,000 free requests, then 1 credit per request.

  • POST /lookalikes/preview: 300 free requests, then 1 credit per request.

Light and regular use usually stays within the free allowance. The limits keep search fast and reliable for everyone.

What else costs credits

  • Enrichment: charged per enriched contact, as in the app. A single email lookup costs 1 credit when an email is found and nothing when it isn't. A single phone lookup costs 10 credits when a number is found.

  • Lookalike search: 1 credit per company returned. Credits are reserved before the search and charged for the actual results.

  • Company followers and Maps discovery: credits are reserved when the job starts and settled when it finishes. Check GET /balance for current prices.

Enrichment jobs

  • A bulk job accepts up to 500 people. If you send more, the API returns 400. Leadsforge doesn't queue the rest for you, so split bigger lists into several requests of 500 or fewer.

  • Send either personIDs from a search, or a people list with a LinkedIn URL, or first name, last name and company.

  • Add your own externalID (up to 128 characters) to match results to your records. Duplicate people are merged, which can drop some of their external IDs.

  • Add a webhookURL to be notified when results are ready, or poll GET /enrichment/jobs/{jobID} and /results.

  • Webhook deliveries are retried if your server doesn't respond. Use the X-Webhook-Delivery-Id header on company followers webhooks to ignore duplicates.

  • Lookalike search and company followers search accept an Idempotency-Key header. A retried request with the same key returns the original result and doesn't charge credits again.

Common errors

  • 402: your free monthly requests are used up and you don't have enough credits, or you don't have enough credits for the job. Top up your credits and try again.

  • 403: the account is under review and credit spending is paused. Contact support through the chat.

  • 410 on search: the cursor expired or is invalid, or the search reached its maximum number of results. Start a new search with narrower filters.

  • 409: an idempotency conflict, or an owner lookup is already running for that Maps search.

  • 429: too many requests (see the rate limits below), or too many active enrichment jobs.

Rate limits for public endpoints

  • POST /public/v1/search – 20 requests per minute per account (i.e. per accountID), not per API key.

  • POST /public/v1/search/count – 20 requests per minute per accountID (same bucket as /search).

  • GET /public/v1/balance – 60 requests per minute per API key.

  • GET /public/v1/search/filters/* (industries, seniorities, departments, company-types, funding-types, revenue-ranges) – 60 requests per minute per API key.

  • GET /public/v1/enrichment/jobs (list), /jobs/{jobID} and /jobs/{jobID}/results – 60 requests per minute per API key.

  • POST /public/v1/enrichment/email and POST /public/v1/enrichment/phone (synchronous, single-record lookups) – 120 requests per minute per API key. Don't confuse these with the plural async bulk endpoints (emails/phones/linkedin), which have no per-minute limit.

  • POST /public/v1/enrichment/{emails|phones|linkedin} – no rate limit, but there is a cap on the number of active jobs per account. If you exceed it, the API returns 429 "active enrichment jobs limit reached".

  • POST /public/v1/company-followers/search – 10 requests per minute per accountID (the lowest limit in the API).

  • GET /public/v1/company-followers/jobs, /jobs/{id}, /jobs/{id}/results – 60 requests per minute per API key.

  • GET /public/v1/company-followers/filters/* (countries, states, job-titles, departments, levels) – 60 requests per minute per API key.

  • POST /public/v1/lookalikes/search – 20 requests per minute per accountID.

  • POST /public/v1/lookalikes/preview – 60 requests per minute per API key.

  • GET /public/v1/lookalikes/filters/* (seniorities, departments, employee-ranges, locations) – 60 requests per minute per API key.

Rate limits for the Maps discovery endpoints aren't listed here. Check the Swagger docs above for the latest details. When a per-minute rate limit is triggered, the X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset and Retry-After headers are returned. The active-enrichment-jobs 429 is different. It comes from the per-account concurrency check, not the rate limiter, so it doesn't include these headers.

For limits across all Forge products, see Forge API & MCP: Rate Limits, Authentication & Known Gaps.

Did this answer your question?
😞
😐
😁