Dashboard
API Documentation

Authentication

Every request needs your agency API key as a Bearer token:

Authorization: Bearer YOUR_API_KEY

Get a key from API Keys in your dashboard.

Base URL: https://api.leadlance.io/scraper

See Rate Limits below for how many requests your plan allows per day.

Rate Limits

Each agency plan has its own daily cap on API-key requests to the endpoints below. The cap applies per account and resets at midnight UTC. A request that would put you over your plan's limit is rejected with 429 Too Many Requests before it runs:

{
  "error": "Daily API request limit reached",
  "limit": 1000,
  "message": "You've hit your plan's daily API request limit of 1000 requests. Upgrade your plan for a higher limit."
}

Check your own account's usage for today - and how many requests you have left - on the API Keys page of your dashboard.

Filter Reference

Pass filters as a JSON object under the filters key when starting a run against our database (see Start a Run below). This list is live from your account's current configuration, so it always matches what's actually available - it can grow over time.

Endpoints

Credits & Pricing

Every run spends credits; pricing varies per source. The rates below are the base (undiscounted) rate - plans can carry their own per-source discount, so check your exact rate with GET /v2/reseller/enrichment-info below if you're on a plan.

Enrichment: the first portion of leads a run finds (your account's free enrichment percentage - check GET /v2/reseller/enrichment-info) come back with emails at no extra cost. Set additionalEnrichmentPercent to a number from 0-100 to enrich that percentage of the remaining leads beyond the free portion - 100 enriches everything. Each additional email spends one enrichment credit. Leave it at 0 or omit it entirely to only ever get the free portion. The actual charge is capped automatically at however many leads actually came back, so requesting more than a run finds never overcharges you.

POST /v2/runs/start

Start a new run.

Include a url and cookies together to run a live search against a search URL. Leave both out and pass filters instead to search our database. The source is always "b2b" either way.

Pass filters to search our database. The source is always "b2b".

POST https://api.leadlance.io/scraper/v2/runs/start
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "source": "b2b",
  "cookies": [{...}, {...}]
  "url": "https://your-search-url-here",
  "totalResults": 1000,
  "additionalEnrichmentPercent": 0
}
POST https://api.leadlance.io/scraper/v2/runs/start
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "source": "b2b",
  "totalResults": 10000,
  "filters": {
    "personTitle": ["sales rep"],
    "seniority": ["Chairman", "Founder"],
    "functional": ["Analytics"],
    "companyEmployeeSize": ["2 - 10", "11 - 50"],
    "personCountry": ["United States"],
    "contactEmailStatus": "verified",
    "industry": ["Financial Services"],
    "revenue": ["< 1M", "1M-10M"],
    "businessModel": ["Product"]
  }
}

Tip: check how many records a filter set matches first with GET /v2/runs/b2b-filter-count below.

POST https://api.leadlance.io/scraper/v2/runs/start
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "source": "linkedin",
  "profileUrls": [
    "https://www.linkedin.com/in/profile1/",
    "https://www.linkedin.com/in/profile2/",
    "https://www.linkedin.com/in/profile3/"
  ],
  "totalResults": 100,
  "additionalEnrichmentPercent": 0
}
{
  "success": true,
  "runId": "user123_1234567890",
  "source": "b2b",
  "status": "started",
  "message": "Run started successfully"
}
GET /v2/runs/:runId

Get detailed information about a specific run.

GET https://api.leadlance.io/scraper/v2/runs/user123_1234567890
Authorization: Bearer YOUR_API_KEY
{
  "run": {
    "run_id": "user123_1234567890",
    "user_id": "user123",
    "source": "b2b",
    "url": "https://your-search-url-here",
    "status": "running",
    "total_results": 1000,
    "total_collected": 450,
    "total_duplicates": 23,
    "download_url": null,
    "started_at": "2025-01-03T10:30:00Z",
    "completed_at": null,
    "error_message": null
  }
}
GET /v2/runs

List all runs with pagination.

ParamRequiredDescription
limitoptionalResults per page (default: 50)
offsetoptionalPagination offset (default: 0)
GET https://api.leadlance.io/scraper/v2/runs?limit=50&offset=0
Authorization: Bearer YOUR_API_KEY
{
  "runs": [
    {
      "run_id": "user123_1234567890",
      "source": "b2b",
      "status": "completed",
      "total_collected": 1000,
      "total_duplicates": 45,
      "started_at": "2025-01-03T10:30:00Z",
      "completed_at": "2025-01-03T11:45:00Z"
    }
  ],
  "total": 15,
  "limit": 50,
  "offset": 0
}
GET /v2/runs/:runId/download

Download completed run results as a CSV file.

GET https://api.leadlance.io/scraper/v2/runs/user123_1234567890/download
Authorization: Bearer YOUR_API_KEY

Returns a CSV file download with all collected leads data.

// Run not completed yet
{ "error": "Run is not completed yet" }

// No file available
{ "error": "No download available" }
POST /v2/runs/:runId/cancel

Cancel an active running search.

POST https://api.leadlance.io/scraper/v2/runs/user123_1234567890/cancel
Authorization: Bearer YOUR_API_KEY
{
  "success": true,
  "message": "Run cancelled successfully"
}
{ "error": "Run is not active" }
GET /v2/reseller/enrichment-info

Check your account's free enrichment percentage and the cost per additional enrichment before starting a run - the free percentage can vary by plan.

GET https://api.leadlance.io/scraper/v2/reseller/enrichment-info
Authorization: Bearer YOUR_API_KEY
{
  "freePercent": 50,
  "enrichmentCreditCost": 1
}
GET /v2/runs/b2b-filter-count

Check how many database records a B2B filter set matches before starting a run, so you can size totalResults with confidence.

ParamRequiredDescription
filters required JSON-stringified filter object, URL-encoded (same shape as the filters body field on POST /v2/runs/start)
GET https://api.leadlance.io/scraper/v2/runs/b2b-filter-count?filters=%7B%22personCountry%22%3A%5B%22United%20States%22%5D%7D
Authorization: Bearer YOUR_API_KEY
{
  "total": 48213
}

Sources, Notes & Status Values

  • b2b - B2B leads: pass a search url + cookies for a live search, or pass filters to search our own database instead
  • b2b - B2B leads: pass filters to search our database
  • linkedin - LinkedIn profiles, from our database (requires array of profile URLs)
  • realtor - Realtor agents, from our database (requires locations, optional min rating/agent type)
  • maps - Google Maps businesses, from our database (requires location + keywords)
  • Email generation is automatically enabled for all runs
  • Each lead costs from 1 credit; cost varies per source
  • Concurrent Runs: you can run multiple jobs simultaneously using different API keys (1 active run per API key)
  • Run results are available for download immediately after completion
  • running - search is currently in progress
  • completed - search finished successfully
  • failed - search encountered an error
  • cancelled - search was cancelled by user

Sandbox - Try It Live

Pick an endpoint, fill in the parameters, and send a real request against your account.

Response

-