Tools

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.

ToolWhat it doesCost
leads_search_companiesSearch companiesFrom 1 credit
leads_get_companyGet a company profileFrom 1 credit
leads_search_peopleSearch peopleFrom 1 credit
leads_get_personGet a person profileFrom 3 credits
leads_get_emailFind a person's work emailFrom 7 credits
leads_get_email_statusVerify an email addressFrom 1 credit
leads_get_domain_emailsGet a domain's email addressesFrom 31 credits
leads_search_jobsSearch job postingsFrom 1 credit

Search companies

Toolleads_search_companies

Companies matching a name, keywords, location or headcount.

Good for

"find fintech companies in London with 50 to 200 staff", "companies that do X", building an account list by firmographics.

Not the tool for
What you get

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.

Cost

12 credits per 100 rows asked for (limit), rounded up. Default 12 credits. Cached 30 days.

Parameters

ParameterDefault and notes
nameA 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".
limitMax 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.

Example input
{
  "keywords": [
    "payments"
  ],
  "locations": [
    "London"
  ],
  "employee_ranges": [
    "51,200"
  ]
}

Get a company profile

Toolleads_get_company

The full firmographic record of one company, by domain.

Good for

"tell me about acme.com", sizing a company, the industry, revenue range and headcount growth behind a domain, filling in a search row.

Not the tool for
What you get

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.

Cost

1 credit. Cached 30 days.

Parameters

ParameterDefault and notes
domainRequired.

It also takes the common parameters provider, max_credits and dry_run.

Example input
{
  "domain": "acme.com"
}

Search people

Toolleads_search_people

People matching title, seniority and company filters. No email.

Good for

"find heads of marketing at fintech startups", building a target list by role, prospecting by ICP.

Not the tool for
What you get

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.

Cost

12 credits per 100 rows asked for (limit), rounded up. Default 12 credits. Cached 7 days.

Parameters

ParameterDefault 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.
keywordsA job title word such as "marketing" is matched against the current title; other words against the whole profile.
limitMax 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.

Example input
{
  "titles": [
    "head of marketing"
  ],
  "industries": [
    "fintech"
  ],
  "locations": [
    "London"
  ],
  "limit": 50
}

Get a person profile

Toolleads_get_person

The full record of one person: real name, title, company, location, LinkedIn, employment history and education. No email.

Good for

Filling in a search row by id, "who is the head of growth at acme.com", checking a person's current role before outreach.

Not the tool for
What you get

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.

Cost

9 credits by id or linkedin_url, 3 by name and domain, nothing on NoData. Cached 30 days.

Parameters

ParameterDefault and notes
idThe LinkedIn profile URL a leads_search_people row gives as id. Anything else is InvalidTarget at no charge.
first_nameOptional
last_nameOptional
domainThe company domain.
linkedin_urlOptional

Give id, or first_name + last_name + domain, or linkedin_url.

It also takes the common parameters provider, max_credits and dry_run.

Example input
{
  "first_name": "Jordan",
  "last_name": "Blake",
  "domain": "northstaranalytics.io"
}

Find a person's work email

Toolleads_get_email

Find 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.

Good for

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.

Not the tool for
What you get

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.

Cost

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

ParameterDefault and notes
idThe 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_nameOptional
last_nameOptional
domainThe 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.

Example input
{
  "first_name": "Jordan",
  "last_name": "Blake",
  "domain": "acme.com"
}

Verify an email address

Toolleads_get_email_status

Whether an email address the user already has will deliver.

Good for

"is jane@acme.com still valid", cleaning a list before a send, checking a shortlist from leads_get_domain_emails.

Not the tool for
What you get

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.

Cost

1 credit. Cached 30 days.

Parameters

ParameterDefault and notes
emailRequired.

It also takes the common parameters provider, max_credits and dry_run.

Example input
{
  "email": "jane@acme.com"
}

Get a domain's email addresses

Toolleads_get_domain_emails

Email addresses known for a website's domain, with name, role, confidence and where each was seen. The contact-finding tool for link outreach.

Good for

"find someone to email at these sites about a backlink", "who runs content at example.com", "get contacts for the referring domains of X".

Not the tool for
What you get

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.

Cost

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

ParameterDefault 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.
typeDefault all. One of personal, generic, all. generic means role addresses such as press@, often the only working one on a small site.
limitAddresses per domain. Default 30, cap 100.

It also takes the common parameters cursor, provider, max_credits and dry_run.

Example input
{
  "domains": [
    "example.com"
  ],
  "department": [
    "marketing",
    "communication"
  ],
  "type": "all"
}

Search job postings

Toolleads_search_jobs

Open 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.

Good for

"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.

Not the tool for
  • 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.
What you get

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.

Cost

1 credit per 20 results. Default 20 = 1 credit. Cached 1 day. Can take up to a minute.

Parameters

ParameterDefault and notes
keywordRequired. 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.
depthMost rows to return. Default 20, max 200, billed per 20.
locationProvider location name or code. Default United States.
languageISO 639-1 language code. Default en.

It also takes the common parameters max_credits and dry_run.

Example input
{
  "keyword": "seo manager",
  "location": "London,England,United Kingdom"
}