People and company tools
People and companies, who is hiring, and finding and verifying work emails. Every reveal is charged.
Find companies and the people who work there, then find and check their work email addresses. One person's email is looked for across several email finders in turn, and verified before it is returned.
Person records never include an email. There are two ways to get one: leads_get_email for one person, and leads_get_domain_emails for the addresses known at a domain. An email search that finds nothing costs 1 credit, not the full price.
To build a target list, search for companies with leads_search_companies, then for people there by title with leads_search_people, then use leads_get_email for each person worth contacting.
To find companies hiring for a role, search open postings with leads_search_jobs. It reads Google Jobs, so it covers LinkedIn, Indeed, other boards and company careers sites, but it searches by role or skill, not by company: a company's name in the keyword finds jobs that mention it.
| Tool | What it does | Cost |
|---|---|---|
leads_search_companies | Search companies | From 1 credit |
leads_get_company | Get a company profile | From 1 credit |
leads_search_people | Search people | From 1 credit |
leads_get_person | Get a person profile | From 3 credits |
leads_get_email | Find a person's work email | From 7 credits |
leads_get_email_status | Verify an email address | From 1 credit |
leads_get_domain_emails | Get a domain's email addresses | From 31 credits |
leads_search_jobs | Search job postings | From 1 credit |
Search companies
leads_search_companiesCompanies matching a name, keywords, location or headcount.
"find fintech companies in London with 50 to 200 staff", "companies that do X", building an account list by firmographics.
- One known company, use
leads_get_company(by domain). - People at companies, use
leads_search_people. - A site's traffic, use
seo_get_domain_overview. - Local shops and services in an area, use
maps_search_businesses.
A list. Each row has id, name, domain, website, linkedin_url, industry, employees, headcount_range, headcount_growth[] (months, percent), location, founded_year, company_type, description, keywords[], revenue_min and revenue_max (the estimated annual revenue range, USD), phone. rows_available is the provider's total before the keyword check. A row is kept only when one of the keywords or unlisted industries appears in its name, industry, description or specialties, so a page can return fewer rows than limit; the charge counts the rows fetched.
12 credits per 100 rows asked for (limit), rounded up. Default 12 credits. Cached 30 days.
Parameters
| Parameter | Default and notes |
|---|---|
name | A company name to match. |
keywords[] | Words describing what the company does. At most 20. |
industries[] | LinkedIn industry names such as Business Consulting and Services filter on the industry; other words match as keywords. At most 20. |
locations[] | Cities, regions or countries of the headquarters. At most 20. |
employee_ranges[] | Headcount ranges as "min,max", for example "11,50". |
limit | Max rows. Default 100, cap 1000. |
Give at least one of name, keywords, industries, locations or employee_ranges. A page holds at most 100 rows whatever the limit; page on with meta.cursor.
It also takes the common parameters cursor, provider, max_credits and dry_run.
{
"keywords": [
"payments"
],
"locations": [
"London"
],
"employee_ranges": [
"51,200"
]
}Get a company profile
leads_get_companyThe full firmographic record of one company, by domain.
"tell me about acme.com", sizing a company, the industry, revenue range and headcount growth behind a domain, filling in a search row.
- Search traffic and rankings, use
seo_get_domain_overview. - Who works there, use
leads_search_people. - Email addresses, use
leads_get_domain_emails.
One record with id, name, domain, website, linkedin_url, industry, industries[], employees, headcount_range, headcount_growth[] (months, percent), location, founded_year, company_type, description, keywords[], revenue (USD, where disclosed), revenue_min and revenue_max (the estimated range, USD), total_funding, funding_stage, technologies[], phone, ticker. null = the provider does not hold it; total_funding, funding_stage, technologies and ticker are always empty. NoData when the provider does not know the domain.
1 credit. Cached 30 days.
Parameters
| Parameter | Default and notes |
|---|---|
domain | Required. |
It also takes the common parameters provider, max_credits and dry_run.
{
"domain": "acme.com"
}Search people
leads_search_peoplePeople matching title, seniority and company filters. No email.
"find heads of marketing at fintech startups", building a target list by role, prospecting by ICP.
- Someone to email at a specific website about a link, use
leads_get_domain_emails(keyed by domain). - One person's full record, use
leads_get_person. - An email for a named person, use
leads_get_email.
A list. Each row has id (the LinkedIn profile URL; null when the person has no profile, so look them up by name and domain), first_name, last_name, headline, title, title_start (YYYY-MM, so time in the role), company, company_domain, company_id, company_linkedin_url, company_employees, company_industry, location, linkedin_url. rows_available is the provider's total.
12 credits per 100 rows asked for (limit), rounded up. Default 12 credits. Cached 7 days.
Parameters
| Parameter | Default and notes |
|---|---|
titles[] | Job titles, matched loosely. At most 20. |
seniority[] | Junior, senior, executive. Default all. At most 3. |
company_domains[] | Restrict to people at these company domains. At most 100. |
industries[] | LinkedIn industry names such as Business Consulting and Services filter on the industry; other words match as keywords. At most 20. |
locations[] | Cities, regions or countries of the person. At most 20. |
keywords | A job title word such as "marketing" is matched against the current title; other words against the whole profile. |
limit | Max rows. Default 100, cap 1000. |
Give at least one of titles, seniority, company_domains, industries, locations or keywords. A page holds at most 100 rows whatever the limit; page on with meta.cursor.
It also takes the common parameters cursor, provider, max_credits and dry_run.
{
"titles": [
"head of marketing"
],
"industries": [
"fintech"
],
"locations": [
"London"
],
"limit": 50
}Get a person profile
leads_get_personThe full record of one person: real name, title, company, location, LinkedIn, employment history and education. No email.
Filling in a search row by id, "who is the head of growth at acme.com", checking a person's current role before outreach.
- The email, use
leads_get_email(the paid reveal). - Many people at once, use
leads_search_people.
One record with id, first_name, last_name, headline, title, title_start, seniority, company, company_domain, company_id, company_linkedin_url, company_employees, company_industry, location, linkedin_url, has_email, summary, employment_history[] (company, title, start, end, current; newest first), education[] (school, degree, field, start, end), skills[], languages[]. Dates are YYYY-MM. null or empty = the provider does not hold it; looked up by name and domain, the history is the current role only and education, skills and languages are empty. NoData when nobody matches.
9 credits by id or linkedin_url, 3 by name and domain, nothing on NoData. Cached 30 days.
Parameters
| Parameter | Default and notes |
|---|---|
id | The LinkedIn profile URL a leads_search_people row gives as id. Anything else is InvalidTarget at no charge. |
first_name | Optional |
last_name | Optional |
domain | The company domain. |
linkedin_url | Optional |
Give id, or first_name + last_name + domain, or linkedin_url.
It also takes the common parameters provider, max_credits and dry_run.
{
"first_name": "Jordan",
"last_name": "Blake",
"domain": "northstaranalytics.io"
}Find a person's work email
leads_get_emailFind and verify the work email of one named person. The only paid reveal keyed by a person; it runs a waterfall of email verification sources and stops at the first verified hit.
You have a person and their company and need an address to send to, "get me the email of Jordan Blake at acme.com", after leads_search_people found the person.
- Anyone at a website (no name), use
leads_get_domain_emails. - Checking an address you already hold, use
leads_get_email_status. - The person's role and history, use
leads_get_person.
One record with first_name, last_name, domain, email, confidence (0 to 100, null when the source gives none), verification_status (valid | accept_all | invalid | unknown), found_by (the source that hit), position, linkedin_url, twitter, phone, sources[] (url, last_seen_at: where the address was seen). verification_status is the verdict of the source that hit: some sources return only addresses they verified themselves, catch-all domains included, so their hits read valid with null confidence and no sources; only a hit with no verdict is checked by an additional verifier before it is returned. leads_get_email_status asks that verifier separately, which can call the same address accept_all. position, linkedin_url, twitter, phone and sources are null or empty unless the source that hit reports them. NoData when no source finds one; do not retry. meta.providers_tried lists the sources asked, in order; with an id and no name the first is the people source that turns the profile into a name and domain, not a finder that missed. A source that does not answer in time is skipped; when none answers, ProviderUnavailable at no charge.
7 credits on a hit, 31 when certain providers are used, plus 9 for an id given without a name; nothing on NoData. Cached 90 days.
Parameters
| Parameter | Default and notes |
|---|---|
id | The LinkedIn profile URL a leads_search_people row gives as id. Alone, a paid profile lookup fills the name and domain, so pass the row's first_name, last_name and company_domain (as domain) with it. Anything else is InvalidTarget at no charge. |
first_name | Optional |
last_name | Optional |
domain | The company domain. |
Give id, or first_name + last_name + domain, or both: the name and domain beside an id skip the paid profile lookup.
It also takes the common parameters provider, max_credits and dry_run.
{
"first_name": "Jordan",
"last_name": "Blake",
"domain": "acme.com"
}Verify an email address
leads_get_email_statusWhether an email address the user already has will deliver.
"is jane@acme.com still valid", cleaning a list before a send, checking a shortlist from leads_get_domain_emails.
- Finding an address, use
leads_get_emailorleads_get_domain_emails.
One record with email, status (valid | invalid | accept_all | unknown; accept_all means the server takes anything, so the address is unproven), result (deliverable | undeliverable | risky | unknown), score (0 to 100), mx_records, mail_provider (who runs the mail servers: google, microsoft, or a filter such as mimecast). disposable, webmail and smtp_check are null: the verifier does not report them, so judge free-mail and throwaway domains by the domain.
1 credit. Cached 30 days.
Parameters
| Parameter | Default and notes |
|---|---|
email | Required. |
It also takes the common parameters provider, max_credits and dry_run.
{
"email": "jane@acme.com"
}Get a domain's email addresses
leads_get_domain_emailsEmail addresses known for a website's domain, with name, role, confidence and where each was seen. The contact-finding tool for link outreach.
"find someone to email at these sites about a backlink", "who runs content at example.com", "get contacts for the referring domains of X".
- One named person, use
leads_get_email. - People by title across many companies, use
leads_search_people. - Checking an address works, use
leads_get_email_status. - Choosing which sites to contact, use
seo_get_referring_domains,seo_get_backlinks,seo_get_domain_ratings.
A list, highest confidence first. Each row has domain, email, first_name, last_name, position, department, seniority, decision_maker, type (personal | generic), confidence (0 to 100), verification_status, sources[] (url, last_seen_at; empty = inferred from the domain's pattern), linkedin_url, twitter, phone. domains[]: domain, pattern (the address format, for example {first}.{last}), organization, accept_all (true = the server takes any address, so no address there can be proven), webmail, disposable, linked_domains[], rows_available. errors[] lists domains that failed. Addresses come back unverified for the most part; verify the shortlist with leads_get_email_status, not the whole list.
1 credit per domain + 30 per domain that returns addresses, whatever the limit. Default one domain with 30 addresses = 31 credits. Cached 30 days.
Parameters
| Parameter | Default and notes |
|---|---|
domains[] | Required. At most 20. |
department[] | One of executive, it, finance, management, sales, legal, support, hr, marketing, communication, education, design, health, operations, product, research, consulting, administrative, procurement. Job departments. Default all. Outreach usually wants marketing and communication; editors at publications usually sit under communication. At most 19. |
seniority[] | Junior, senior, executive. Default all. At most 3. |
type | Default all. One of personal, generic, all. generic means role addresses such as press@, often the only working one on a small site. |
limit | Addresses per domain. Default 30, cap 100. |
It also takes the common parameters cursor, provider, max_credits and dry_run.
{
"domains": [
"example.com"
],
"department": [
"marketing",
"communication"
],
"type": "all"
}Search job postings
leads_search_jobsOpen job postings Google Jobs lists for a role: employer, location, salary and where it is posted, from LinkedIn, Indeed, other boards and company careers sites.
"which companies are hiring an SEO manager in London", hiring for a role as a buying signal, "who is hiring people who use HubSpot", what a role pays.
- Every opening at one company, which Google Jobs does not answer (a company's name in the keyword finds jobs that mention it); read its careers page with
seo_get_page. - People who already hold a role, use
leads_search_people.
One record with keyword, Each row has rank, job_id, title, company, company_url, location, source (the board or careers site), url (the posting there), salary (as written), contract_type, posted (YYYY-MM-DD, only to the day). No description text. One role on several boards can fill several rows.
1 credit per 20 results. Default 20 = 1 credit. Cached 1 day. Can take up to a minute.
Parameters
| Parameter | Default and notes |
|---|---|
keyword | Required. A role or skill, as a job seeker would search it: "seo manager", "hubspot". |
employment_type[] | One of fulltime, partime, contractor, intern. Only these types; every type when empty. partime is Google's spelling. At most 4. |
depth | Most rows to return. Default 20, max 200, billed per 20. |
location | Provider location name or code. Default United States. |
language | ISO 639-1 language code. Default en. |
It also takes the common parameters max_credits and dry_run.
{
"keyword": "seo manager",
"location": "London,England,United Kingdom"
}