TombaTomba
Start free
  • Documentation
  • API reference
  • SDKs & CLI
  • AI & MCP
  • Integrations
  • Enterprise
  • Migration guides

Find, verify and enrich B2B contacts from public sources, in the app, your spreadsheet or through the API.

GDPR & CCPA

// docs

  • API changelog
  • Support options
  • Security

// platform

  • Dashboard
  • Pricing
  • API status

// resources

  • Help center
  • Product updates
  • TombaBot crawler

// company

  • Website
  • Contact us
  • Edit or remove your data

© 2021–2026 Tomba.io

  • Terms of service
  • Privacy policy
  • Cookie policy
  • Security policy
  • GDPR
  • CCPA
Information
Finder
Verifier
Enrichment
Phone
Domain
Email
Domain Suggestions
Reveal
Bulks
Scrape Campaigns
    List scrape campaignsgetCreate a scrape campaignpostGet a scrape campaigngetUpdate a scrape campaignputDelete a scrape campaigndeleteGet scrape campaign progressgetLaunch a scrape campaignpostDownload scrape campaign resultsget
Leads
Lead Lists
Lead Attributes
Account
Keys
Flag
MCP Server
Schemas
Tomba
Tomba

Scrape Campaigns

Download schema

Save records collected on LinkedIn, Sales Navigator, or Apollo, have Tomba find their emails, and download the results


List scrape campaigns

GET
https://api.tomba.io/v1
/sla/{source}/{type}
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Lists the campaigns of one source and type, newest first, including those created by other members of your workspace. Deleted campaigns aren't listed.

Each item includes its records, so a page can be large.

Also accepts an OAuth 2.0 access token.

List scrape campaigns › path Parameters

source
​string · enum · required

Where the records were collected.

Enum values:
linkedin
sales-navigator
apollo
type
​string · enum · required

What the records are. leads are people, companies are organizations.

Enum values:
leads
companies

List scrape campaigns › query Parameters

page
​integer · min: 1

Page number, starting at 1. Values below 1 are treated as 1.

Default: 1
limit
​integer · min: 1 · max: 50

Number of campaigns per page. Values above 50 are treated as 50.

Default: 10

List scrape campaigns › Responses

A page of campaigns.

​object[] · required
​object · required
GET/sla/{source}/{type}
curl https://api.tomba.io/v1/sla/:source/:type \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": [ { "id": 812, "name": "Fintech VPs", "records": [ { "first_name": "Jane", "last_name": "Doe", "job_title": "VP Marketing", "company_name": "Stripe", "company_website": "stripe.com", "linkedin_url": "https://www.linkedin.com/in/janedoe" } ], "type": "leads", "source": "linkedin", "status": "completed", "progress": 100, "totalRecords": 25, "completedRecords": 0, "used": false, "chart": [ { "x": "Valid", "e": "valid", "y": 18 }, { "x": "AcceptAll", "e": "accept_all", "y": 2 }, { "x": "Invalid", "e": "invalid", "y": 0 }, { "x": "Unknown", "e": "unknown", "y": 1 }, { "x": "NotFound", "e": "NotFound", "y": 4 } ], "fileName": "3f2b9c1e8d7a4b6c5e0f1a2b3c4d5e6f", "verify_cost": 21, "search_cost": 21, "total_emails": 21, "createdAt": "2026-10-20T09:12:00Z", "updatedAt": "2026-10-20T09:13:10Z", "completedAt": "2026-10-20T09:13:10Z", "time_track": "1m10.2s" } ], "meta": { "total": 1, "pageSize": 10, "current": 1, "totalPages": 1 } }
json
application/json

Create a scrape campaign

POST
https://api.tomba.io/v1
/sla/{source}/{type}
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Saves records you collected on LinkedIn, Sales Navigator, or Apollo as a campaign and starts processing it. The Tomba browser extension sends its exports here; the campaign also appears in the dashboard at https://app.tomba.io/sla/{source}/{type}/{id}.

A campaign differs from a bulk job: a bulk job takes rows in Tomba's own input format, with options for each bulk type, and you launch it; a campaign takes the records as the source page gives them, keeps them, and starts at once. In both cases Tomba then looks for the emails:

  • leads: an enrichment of the record's email when it has one, then the LinkedIn profile, then Email Finder with the name and the company's domain.
  • companies: Domain Search on the company's website, or its name when it has no website.

Tomba reads these fields of each record and stores the others unchanged:

Source and typeFields read
linkedin or sales-navigator leadsfirst_name, last_name, job_title, linkedin_url, company_name (or company_details.name), company_website (or company_details.website_url), contacts.email, contacts.phone
linkedin or sales-navigator companiesname, website_url
apollo leadsname (the full name), title, company, website, email, phone, linkedin
apollo companiesname, website

records is an array of records. For Apollo it can also be an object with the array in records. Records Tomba can't read make the campaign failed; the request itself still returns 201.

Follow the campaign with GET /sla/{source}/{type}/{id}/progress and download the results when its status is completed. Credits are charged at the first download, not here.

You can create 15 campaigns of each source and type a day; only successful requests count. Accounts on a lifetime-deal plan without premium access get 403.

Also accepts an OAuth 2.0 access token.

Create a scrape campaign › path Parameters

source
​string · enum · required

Where the records were collected.

Enum values:
linkedin
sales-navigator
apollo
type
​string · enum · required

What the records are. leads are people, companies are organizations.

Enum values:
leads
companies

Create a scrape campaign › Request Body

name
​string · maxLength: 255 · required

Campaign name, up to 255 characters. Also the name of the downloaded files.

​required

The records, as collected. An array, or for Apollo also an object with the array in records. The number of records isn't checked against totalRecords.

totalRecords
​integer · min: 2 · max: 2500 · required

Number of records, from 2 to 2500.

​object

Processing options. Other keys are stored but not applied.

Create a scrape campaign › Responses

Campaign created. Processing has started.

​object · required
POST/sla/{source}/{type}
curl https://api.tomba.io/v1/sla/:source/:type \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>' \ --data '{ "name": "Fintech VPs", "totalRecords": 2, "records": [ { "first_name": "Jane", "last_name": "Doe", "job_title": "VP Marketing", "company_name": "Stripe", "company_website": "stripe.com", "linkedin_url": "https://www.linkedin.com/in/janedoe" }, { "first_name": "John", "last_name": "Smith", "job_title": "Head of Sales", "company_name": "Shopify", "company_website": "shopify.com", "linkedin_url": "https://www.linkedin.com/in/johnsmith" } ] }'
Example Request Body
{ "name": "Fintech VPs", "totalRecords": 2, "records": [ { "first_name": "Jane", "last_name": "Doe", "job_title": "VP Marketing", "company_name": "Stripe", "company_website": "stripe.com", "linkedin_url": "https://www.linkedin.com/in/janedoe" }, { "first_name": "John", "last_name": "Smith", "job_title": "Head of Sales", "company_name": "Shopify", "company_website": "shopify.com", "linkedin_url": "https://www.linkedin.com/in/johnsmith" } ] }
json
application/json
Example Responses
{ "data": { "id": 812 } }
json
application/json

Get a scrape campaign

GET
https://api.tomba.io/v1
/sla/{source}/{type}/{id}
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Returns one campaign of your workspace, with its records, status, and results summary.

Also accepts an OAuth 2.0 access token.

Get a scrape campaign › path Parameters

source
​string · enum · required

Where the records were collected.

Enum values:
linkedin
sales-navigator
apollo
type
​string · enum · required

What the records are. leads are people, companies are organizations.

Enum values:
leads
companies
id
​integer · int64 · required

Campaign ID, as returned when you created the campaign. The campaign must have the source and type of the path, or the response is 404. A non-numeric ID fails with 422.

Get a scrape campaign › Responses

The campaign.

​object · required

A scrape campaign.

GET/sla/{source}/{type}/{id}
curl https://api.tomba.io/v1/sla/:source/:type/:id \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "id": 812, "name": "Fintech VPs", "records": [ { "first_name": "Jane", "last_name": "Doe", "job_title": "VP Marketing", "company_name": "Stripe", "company_website": "stripe.com", "linkedin_url": "https://www.linkedin.com/in/janedoe" } ], "type": "leads", "source": "linkedin", "status": "running", "progress": 45, "totalRecords": 25, "completedRecords": 0, "used": false, "fileName": "3f2b9c1e8d7a4b6c5e0f1a2b3c4d5e6f", "verify_cost": null, "search_cost": null, "total_emails": 0, "createdAt": "2026-10-20T09:12:00Z", "updatedAt": "2026-10-20T09:12:40Z" } }
json
application/json

Update a scrape campaign

PUT
https://api.tomba.io/v1
/sla/{source}/{type}/{id}
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Renames a campaign or sets its status. Send only the fields to change.

status is stored as sent, without checking the value or the campaign's current status.

Also accepts an OAuth 2.0 access token.

Update a scrape campaign › path Parameters

source
​string · enum · required

Where the records were collected.

Enum values:
linkedin
sales-navigator
apollo
type
​string · enum · required

What the records are. leads are people, companies are organizations.

Enum values:
leads
companies
id
​integer · int64 · required

Campaign ID, as returned when you created the campaign. The campaign must have the source and type of the path, or the response is 404. A non-numeric ID fails with 422.

Update a scrape campaign › Request Body

name
​string · maxLength: 255

New campaign name, up to 255 characters.

status
​string · enum

New status.

Enum values:
pending
running
completed
failed
cancelled

Update a scrape campaign › Responses

Campaign updated.

OperationSuccess
​object · required

Result of an update or delete.

PUT/sla/{source}/{type}/{id}
curl https://api.tomba.io/v1/sla/:source/:type/:id \ --request PUT \ --header 'Content-Type: application/json' \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>' \ --data '{ "name": "Fintech VPs, October" }'
Example Request Body
{ "name": "Fintech VPs, October" }
json
application/json
Example Responses
{ "data": { "status": true, "message": "Scrape successfully updated", "code": 200 } }
json
application/json

Delete a scrape campaign

DELETE
https://api.tomba.io/v1
/sla/{source}/{type}/{id}
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Deletes a campaign. It no longer appears in lists and every route returns 404 for it.

Also accepts an OAuth 2.0 access token.

Delete a scrape campaign › path Parameters

source
​string · enum · required

Where the records were collected.

Enum values:
linkedin
sales-navigator
apollo
type
​string · enum · required

What the records are. leads are people, companies are organizations.

Enum values:
leads
companies
id
​integer · int64 · required

Campaign ID, as returned when you created the campaign. The campaign must have the source and type of the path, or the response is 404. A non-numeric ID fails with 422.

Delete a scrape campaign › Responses

Campaign deleted.

OperationSuccess
​object · required

Result of an update or delete.

DELETE/sla/{source}/{type}/{id}
curl https://api.tomba.io/v1/sla/:source/:type/:id \ --request DELETE \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "status": true, "message": "Scrape successfully deleted", "code": 200 } }
json
application/json

Get scrape campaign progress

GET
https://api.tomba.io/v1
/sla/{source}/{type}/{id}/progress
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Returns a campaign's status and progress. Poll it until status is completed or failed.

Unlike the other routes, the response isn't wrapped in data.

Also accepts an OAuth 2.0 access token.

Get scrape campaign progress › path Parameters

source
​string · enum · required

Where the records were collected.

Enum values:
linkedin
sales-navigator
apollo
type
​string · enum · required

What the records are. leads are people, companies are organizations.

Enum values:
leads
companies
id
​integer · int64 · required

Campaign ID, as returned when you created the campaign. The campaign must have the source and type of the path, or the response is 404. A non-numeric ID fails with 422.

Get scrape campaign progress › Responses

The campaign's progress.

status
​string · enum · required

The campaign's status.

Enum values:
pending
running
completed
failed
cancelled
progress
​integer · min: 0 · max: 100 · required

Processing progress, from 0 to 100.

completedRecords
​integer · required

Always 0; use progress.

totalRecords
​integer · required

The totalRecords sent when the campaign was created.

GET/sla/{source}/{type}/{id}/progress
curl https://api.tomba.io/v1/sla/:source/:type/:id/progress \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "status": "running", "progress": 45, "completedRecords": 0, "totalRecords": 25 }
json
application/json

Launch a scrape campaign

POST
https://api.tomba.io/v1
/sla/{source}/{type}/{id}/launch
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Sets a campaign's status to running. It doesn't start or restart processing: processing starts when the campaign is created, and you don't need to call this route.

Accounts on a lifetime-deal plan without premium access get 403.

Also accepts an OAuth 2.0 access token.

Launch a scrape campaign › path Parameters

source
​string · enum · required

Where the records were collected.

Enum values:
linkedin
sales-navigator
apollo
type
​string · enum · required

What the records are. leads are people, companies are organizations.

Enum values:
leads
companies
id
​integer · int64 · required

Campaign ID, as returned when you created the campaign. The campaign must have the source and type of the path, or the response is 404. A non-numeric ID fails with 422.

Launch a scrape campaign › Responses

Status set to running.

OperationSuccess
​object · required

Result of an update or delete.

POST/sla/{source}/{type}/{id}/launch
curl https://api.tomba.io/v1/sla/:source/:type/:id/launch \ --request POST \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
{ "data": { "status": true, "message": "Scrape Fintech VPs has been launched successfully", "code": 200 } }
json
application/json

Download scrape campaign results

GET
https://api.tomba.io/v1
/sla/{source}/{type}/{id}/download
X-Tomba-Key (header)
+X-Tomba-Secret (header)

Downloads a result file of a completed campaign as CSV. type selects it: full (the default) has every email found, valid only those whose verification result is valid, and not_found the records with no email. A campaign without a file of that kind returns 404.

The first download charges the campaign's search_cost and verify_cost; later downloads are free. If your balance, or your individual limit in a workspace, is lower than the cost at the first download, the response is 429 and nothing is charged. See Credits and usage.

Each campaign can be downloaded 15 times a day; only successful requests count. Accounts on a lifetime-deal plan without premium access get 403.

Also accepts an OAuth 2.0 access token.

Download scrape campaign results › path Parameters

source
​string · enum · required

Where the records were collected.

Enum values:
linkedin
sales-navigator
apollo
type
​string · enum · required

What the records are. leads are people, companies are organizations.

Enum values:
leads
companies
id
​integer · int64 · required

Campaign ID, as returned when you created the campaign. The campaign must have the source and type of the path, or the response is 404. A non-numeric ID fails with 422.

Download scrape campaign results › query Parameters

type
​string · enum

The file to download.

Enum values:
full
valid
not_found
Default: full

Download scrape campaign results › Responses

The CSV file, as an attachment named after the campaign: <name>.csv for full, <name>_valid.csv for valid, and <name>_not_found.csv for not_found.

string
GET/sla/{source}/{type}/{id}/download
curl https://api.tomba.io/v1/sla/:source/:type/:id/download \ --header 'X-Tomba-Key: <api-key>' \ --header 'X-Tomba-Secret: <api-key>'
Example Responses
string
csv
text/csv

BulksLeads