🔌 RESTful API

API Reference

Integrate FreshLeads.pro into your workflow. Search Google Maps, extract leads, and export data programmatically.

Base URL
https://www.freshleads.pro/api/v1

Overview

The FreshLeads API uses standard HTTP methods. All responses are JSON. Authentication is via Bearer token.

💡 All API requests require an API key. Get yours from the Dashboard under Settings > API Keys.
HeaderValue
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/json

Authentication

Obtain an API token using your account credentials.

POST /auth/token Get API token
Request Body
ParameterTypeDescription
emailrequiredstringYour account email
passwordrequiredstringYour account password
curl -X POST https://www.freshleads.pro/api/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "password": "your_password"}'
const res = await fetch('https://www.freshleads.pro/api/v1/auth/token', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: 'you@example.com',
    password: 'your_password'
  })
});
const { token } = await res.json();
import requests

res = requests.post('https://www.freshleads.pro/api/v1/auth/token', json={
    'email': 'you@example.com',
    'password': 'your_password'
})
token = res.json()['token']
✅ Response 200
{
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "expires_in": 86400,
  "plan": "growth"
}

Leads

Manage your extracted leads.

GET/leadsList all leads with pagination
Query Parameters
ParameterTypeDescription
pageoptionalintegerPage number (default: 1)
per_pageoptionalintegerResults per page (default: 50, max: 200)
searchoptionalstringFilter by business name or email
GET/leads/:idGet single lead details

Returns the full lead object with all 14 data fields.

DELETE/leads/:idDelete a lead
✅ Response 200
{ "deleted": true }

Export

Download your leads in multiple formats, ready for your outreach tools.

GET/export/:projectIdExport leads (Excel default)
Query Parameters
ParameterTypeDescription
formatoptionalstringExport format: xlsx, csv, instantly, lemlist, smartlead
📦Each format is pre-structured for direct import. Instantly, Lemlist, and Smartlead exports include the exact columns these tools expect.

CRM

Manage leads in the built-in CRM.

GET/crm/leadsList CRM leads

Returns leads added to your CRM pipeline with status, notes, and tasks.

POST/crm/leadsAdd lead to CRM
Request Body
ParameterTypeDescription
lead_idrequiredstringLead ID from search results
statusoptionalstringnew, contacted, qualified, converted, lost
notesoptionalstringNotes about the lead
GET/crm/analyticsCRM analytics and metrics

Returns pipeline metrics: total leads, conversion rates, status breakdown, and activity timeline.

Webhooks

Get notified when events happen in your account.

POST/webhooksRegister a webhook
Request Body
ParameterTypeDescription
urlrequiredstringYour webhook endpoint URL
eventsrequiredarrayEvents: search.completed, export.ready, lead.created
🖂 Webhook Payload Example
{
  "event": "search.completed",
  "data": {
    "search_id": "srch_abc123",
    "total_results": 47,
    "emails_found": 32
  },
  "timestamp": "2025-01-15T10:30:00Z",
  "signature": "sha256=abc123..."
}

Error Codes

Standard HTTP status codes are used for all responses.

CodeStatusDescription
200OKRequest succeeded
201CreatedResource created (search started)
400Bad RequestInvalid parameters
401UnauthorizedMissing or invalid API key
403ForbiddenPlan limit reached
404Not FoundResource does not exist
429Too Many RequestsRate limit exceeded
500Server ErrorInternal error — try again
// Error response format
{
  "error": {
    "code": 429,
    "message": "Rate limit exceeded. Try again in 60 seconds.",
    "retry_after": 60
  }
}

SDKs & Libraries

Official client libraries for popular languages.

Coming Soon
🐍

Python

pip install freshleads

Coming Soon
⚙️

Node.js

npm install freshleads

Coming Soon
🐘

PHP

composer require freshleads

Coming Soon
💎

Ruby

gem install freshleads