Instagram Find Leads
Instagram Find Leads
Overview
Collect Instagram leads automatically: accounts that fit your audience and show a public email or phone number. Give hashtags, keywords or a few example accounts — the run sources candidates, reads their profiles, filters them and returns the leads with their contact data and where each one came from.
This endpoint always runs asynchronously. The POST answers 202 immediately; poll GET /api/enrichments/{id}?wait=true or pass a callback_url for a webhook on completion.
When to use
- Build a lead list for a niche without hand-picking accounts one by one.
- Grow from what already works: a handful of good example accounts (
seed_usernames) usually outperforms broad keywords.
- Skip accounts that cannot be contacted: only leads with a public email or phone are delivered and billed.
How it sources
Candidates come from a queue of sources, one page at a time, in this starting order:
- Similar accounts of every seed (
seed_usernames): the suggestions the platform makes for each example account.
- Every hashtag (
hashtags): the authors of its top posts.
- Every keyword (
keywords): an account search, plus a hashtag source built from the keyword when it fits the hashtag shape (no spaces or punctuation).
- The following of every seed: the accounts each example account follows — provided the seed is a public account.
On top of that a snowball runs: every lead that fits the audience (private accounts, the follower band, country and language all apply — contact is irrelevant for the snowball) opens a "similar accounts" source of its own, up to twice max_leads extra sources.
Every account is deduplicated across all sources. Every candidate that is not excluded, private or outside the follower band gets its profile read (from a shared 30-day cache when fresh enough), then the filters run in order: excluded, private, followers, country, language, contact. Accounts without a matching profile are skipped.
The run stops with stopped_reason:
stopped_reason |
Meaning |
target_reached |
max_leads leads were collected. |
sources_exhausted |
Every source was read to its end; nothing left to check. |
request_budget |
The upstream request budget of the run was spent (max_leads × 25, between 60 and 5000 requests). |
time_limit |
The run hit its time limit. |
rate_limited |
The data service throttled repeatedly. |
upstream_unavailable |
The data service went away mid-run; already collected leads are delivered. |
A run that cannot reach the data service at all fails and is refunded — upstream_unavailable only applies once at least one lead was found.
Filters
| Filter |
Behaviour |
min_followers / max_followers |
A lead must sit inside the band; accounts outside are skipped cheaply when the list already carries their count. |
country |
Comes from the public phone number, else the country ending of the website. An account without either does not match. |
language |
Detected from bio, display name and category. A bio too short to detect a language does not match. |
contact |
email_or_phone (default), email or phone — what the lead must show publicly. |
exclude_usernames |
Handles never delivered; seed accounts are excluded automatically. |
Endpoint
Output
Pricing
Each delivered lead costs 50 credits — only accounts with a public email or phone are billed at all. The reservation is max_leads × the lead price (default 50 leads); max_credits caps the reservation and thereby the number of leads the run can target. Accounts without contact data and runs that find nothing are free.
Tips
- Few, good seeds or narrow hashtags bring better lists than broad keywords.
max_leads is a target, not a guarantee — niche combinations of country, language and the follower band can run out of candidates first (sources_exhausted).
- Delivered leads are full profiles: feed a
username into find_domain or verify_email downstream for more contact data.
Examples
Playground
States
| State |
Description |
queued |
Request accepted; waiting to be picked up by a worker. |
processing |
Worker is actively collecting leads. |
completed |
Enrichment finished; leads and stopped_reason are in output. |
failed |
Enrichment failed; reason is in error. Credits are refunded for failures unless otherwise noted. |
Errors
| Error |
When it happens |
What to do |
invalid_input |
No keyword, hashtag or seed given; a hashtag or handle is malformed; min_followers exceeds max_followers; language or contact carries an unsupported value; max_credits is below the lead price. |
Give at least one source and check the filter values. |
rate_limited |
The data service throttled the request. |
Retry with backoff. |
provider_error |
The data service returned an unexpected error before any lead was found. |
Retry; if persistent, contact support. |
503 endpoint_unavailable |
The endpoint is currently not configured or temporarily disabled. Nothing is reserved or charged. |
Retry later; if persistent, contact support. |