curl --request GET \
--url https://intentleads.si/api/v1/leads \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://intentleads.si/api/v1/leads', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://intentleads.si/api/v1/leads"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)Pull or re-download leads
Leads you’ve already exported. Reading them never buys anything; to get new people, start an export with POST /api/v1/exports.
since=last (default): pull what’s new. Returns the leads this consumer hasn’t pulled yet, oldest first, and moves its server-side cursor past them, so a daily job never sees the same lead twice. If has_more is true, call again straight away. Each consumer has its own cursor, and so does each consumer and lane pair: pulling with lane=L1 doesn’t move the all-lanes cursor (or the other way round), so a job that uses both gets L1’s leads twice.
since=YYYY-MM-DD: re-download. Every lead exported on or after that date (UTC), oldest first, without touching any cursor. Narrow it with to, lane, delivery, strength and keyword, and page with next_page (X-Next-Page for CSV).
Good to know
- The cursor moves as soon as the response is built. If your job fails after the call, recover that batch with
since=YYYY-MM-DD. to,delivery,strength,keywordandpageonly apply with a datesince; withsince=lastthey’re ignored. Values that don’t parse are ignored too.- Suppressed people come back with
suppressed: trueand empty contact fields.
CSV: add format=csv for a file, with the headers X-Lead-Count, X-Has-More and (date mode) X-Next-Page. The CSV has one header row and these columns, in this order: First Name, Last Name, Job Title, Seniority, Company, Website, Industry, Employees, City, State, Business Email, Email Status, Mobile, Mobile on DNC, Direct Phone, Company Phone, LinkedIn, Company LinkedIn, Intent Topics, Intent Score, Last Active, Lane, Keywords Matched, Intent Strength, First Seen, Exported, Seen Before, Suppressed, Lead ID. Exported is delivered_at. Lists (Keywords Matched) are joined with ; , booleans are Yes or No, empty values are empty cells, and lines end with CRLF. Cells that start with =, +, -, @ or a tab are prefixed with ' so spreadsheets don’t run them as formulas (phone numbers like +1 612 555 0142 are left as they are).
Free. This doesn’t use any contacts from your plan.
curl --request GET \
--url https://intentleads.si/api/v1/leads \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://intentleads.si/api/v1/leads', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://intentleads.si/api/v1/leads"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)Authorizations
An Intent Leads API key, e.g. il_live_ followed by 32 letters and digits. Create one on the API and CLI page of the dashboard.
Query Parameters
last (default): new leads since this consumer's last pull, moving its cursor. Or a date YYYY-MM-DD: everything exported since then (UTC), no cursor change.
Only this lane's leads (case-insensitive). With since=last the lane has its own cursor.
Names the cursor for since=last, so separate jobs each get every lead. Letters, digits, ., - or _, up to 40.
^[A-Za-z0-9_.-]{1,40}$Leads per response, 1 to 5,000. Out-of-range values are clamped.
1 <= x <= 5000json (default) or csv.
json, csv Date mode only: the next_page value from the previous response.
Date mode only: last export date to include (YYYY-MM-DD, UTC, inclusive).
Date mode only: only leads from this delivery id (see GET /api/v1/deliveries).
x >= 1Date mode only: medium (medium and high) or high (high only). Other values are ignored.
medium, high Date mode only: only leads that matched this exact keyword (case-sensitive).
Response
A page of leads, as JSON or (with format=csv) a CSV file.
The since you sent: last or a date.
"last"
Lane filter, or null for every lane.
Leads in this response.
True when this response is full (count equals limit): call again for more.
Only with since=YYYY-MM-DD: pass as page to get the next page. Null when there are no more, and always null with since=last.
Show child attributes
Show child attributes