People Search API - Work Email, Mobile and Company Data
Pricing
$12.00 / 1,000 results
People Search API - Work Email, Mobile and Company Data
Search a people and company index by role, skills, employer, industry, headcount, revenue, funding and detected web technologies, then pull work emails, personal emails and phone numbers for the people worth reaching. Also job post search and reverse lookup. Pay per result.
Pricing
$12.00 / 1,000 results
Rating
0.0
(0)
Developer
Nabeel Hassan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Find the people worth reaching, then find how to reach them. Search by what someone does, who they do it for and what that company runs, and pull contact details only for the rows you keep. One flat row per record.
What this actor does
- Searches roles, not just people. A person and an employer are one record here, which means you can search work history as well as current jobs. Leave the current-roles switch off and you find everyone who used to run that function somewhere, which no snapshot of current titles can answer.
- Filters on what the company runs. Detected web technologies are a first-class filter, so you can search for companies using a particular platform, analytics stack or payment provider and get the people at them in the same query. That is technographic prospecting rather than firmographic.
- Takes ordinary names, not internal ids. This provider filters locations, industries, skills, company keywords, web technologies and named companies by numeric id. Type the names; the actor resolves each one once against the provider's own index before the search runs. A name it cannot match is named in the log and left out, rather than silently disappearing and quietly widening your search.
- Reads boolean queries in the text fields. Job title, role description, person headline, company description and job post fields all accept the provider's own query language, so
("head of sales" OR "vp sales") NOT interimworks and is passed through exactly as typed. - Searches hiring signals alongside firmographics. Job post title, description, location, remote flag and posting date can be part of a people or company search, not only of a job search. That turns "companies hiring for data engineers in Berlin this quarter" into one query rather than three.
- Keeps searching and reaching separate. The search returns profiles without contact details, because at this provider the contact details are a separate call with their own credit price. A browse is never billed as an enrichment. When you want the addresses, run the contact mode over the rows you kept.
- Charges nothing for a contact miss. The provider answers an empty result for a person it has no details for, and states that this costs no credit. Those rows are marked as misses here and are never billed either.
- Knows the difference between a work and a personal address. They are separate lookups at separate prices. Personal addresses are restricted by the provider to consumer webmail, deliberately, so what comes back is reachable rather than merely present.
- Turns an address or a number back into a person. Two reverse lookups, for when a signup list has nothing in it but contact details.
- Resolves your account for you. Almost every path at this provider carries an internal account id. The actor reads it from your key rather than making you find it, and says which account it used.
- Never charges for a miss. Only rows carrying a resolved record are billed.
Input
| Field | What it does |
|---|---|
mode | Search people, companies or job posts; profile, contacts, reverse lookup or website. |
personIdentifiers | Profile URLs, slugs or ids for the profile and contact modes. |
contactKinds | Work emails, personal emails, phone numbers. |
emails / phoneNumbers | Values for the two reverse lookups. |
domains | Domains for the website mode. |
roleTitle | Job title, with boolean operators. |
roleDescription | Words in the role description. |
personName | First, last or full name. |
personHeadline | The one-line self-description. |
personDescription | Words in the longer profile summary. |
companyDescription | Words in the company description. |
jobPostTitle | Title on a job posting. |
jobPostDescription | Words in a job posting body. |
personLocations | Where the person is. |
personIndustries | Industry on the person profile. |
personIndustriesExclude | Person industries to leave out. |
personSkills | Skills listed on the profile. |
companyNames | Named companies to restrict to. |
companyLocations | Where the company is. |
companyIndustries | Company industry. |
companyIndustriesExclude | Company industries to leave out. |
companyKeywords | Provider keywords on the company. |
companyTechnologies | Technologies detected on the company site. |
jobPostLocations | Where a posting is. |
jobPostLocationsExclude | Posting locations to leave out. |
personLinkedinSlugs | Specific people by profile URL or slug. |
companyDomains | Companies by website domain. |
companyLinkedinSlugs | Companies by profile URL or slug. |
fundingTypes | Round types the company has raised. |
jobSource | Which job board, in job search. |
currentRolesOnly | Current roles rather than work history. |
jobPostIsRemote | Remote postings only. |
jobPostIsActive | Open postings only. |
yearsInRoleMin / Max | Time in the current role. |
headcountMin / Max | Employee count range. |
revenueMin / Max | Annual revenue range. |
domainRankMin / Max | Website traffic rank range. |
domainTrafficMin / Max | Monthly visits range. |
fundingTotalMin / Max | Total raised range. |
roleStartedFrom / To | When the role started. |
foundedFrom / To | When the company was founded. |
fundedFrom / To | When it last raised. |
jobPostedFrom / To | When the posting appeared. |
requireLinkedinProfile | Keep only rows with a profile URL. |
requireCompanyDomain | Keep only rows with a company domain. |
emailStatuses | Keep only these address validation statuses. |
minCompanyHeadcount | Drop rows whose company is smaller than this. |
accountId | Which of your accounts to use. Resolved for you if left at zero. |
requestsPerMinute | Pace the run under your plan's rate limit. |
skipNotFound | Leave misses and refusals out of the dataset. |
maxResults | Hard cap on rows, and therefore on spend. |
apiKey | Your own API key. Stored as a secret. |
Example output
{"found": true,"mode": "searchPeople","roleId": 88213344,"personId": 41220931,"fullName": "Alex Moreau","firstName": "Alex","lastName": "Moreau","headline": "Data platform lead. Building the pipeline nobody has to think about.","personLocation": "Berlin, Germany","personLinkedinUrl": "https://www.linkedin.com/in/example","personLinkedinSlug": "example","personIndustry": "Software Development","skills": ["Airflow", "dbt", "Kubernetes"],"jobTitle": "Head of Data Platform","isCurrentRole": true,"roleStartDate": "2023-02-01","roleDuration": "2 years 6 months","companyId": 552310,"companyName": "Example GmbH","companyDomain": "example.com","companyWebsite": "https://www.example.com","companyFoundedDate": "2014-01-01","companyOperatingStatus": "active","companyHeadcount": 320,"companyHeadcountRange": "201-500","companyRevenue": 48000000,"companyDomainRank": 184203,"companyLocation": "Berlin, Germany","companyIndustry": "Software Development","companyLinkedinUrl": "https://www.linkedin.com/company/example","workEmail": null,"phone": null,"dateUpdated": "2026-08-11","error": null,"raw": { }}
Frequently asked questions
Why does a people search return no email addresses?
Because at this provider searching and reaching are separate purchases, and this actor keeps them separate for the same reason. A search that quietly fetched contact details for every row would bill you for reaching people you were only looking at. Run the search, keep the rows you want, then run the same actor in person contacts mode over those rows. The contact columns are present and empty in search output so both datasets have the same shape.
What is the difference between the profile mode and the contacts mode?
Profile mode returns who somebody is: headline, summary, skills, full role history, education, certifications, languages, patents, publications and projects. Contacts mode returns how to reach them: work addresses with a validation status on each, personal addresses, and phone numbers. Different data, different prices, and you often want one without the other.
How do the name filters work?
This provider filters locations, industries, skills, company keywords, web technologies and named companies by internal numeric id, not by text. Typing an ID into a form would be miserable, so the actor takes the name, looks it up against the provider's own index once, caches the answer, and sends the id. If a name matches nothing, the log names it and the filter is left out. That warning matters: an unmatched filter that vanished silently would widen your search and you would pay for the extra rows without knowing why.
Can I search work history rather than current jobs?
Yes, and it is one of the better reasons to use this provider. Leave the current-roles switch off and the search covers every role a person has held, so you can find people who ran a function at a particular company at some point, or who did a job before moving on. Because a person and a role are one record, someone with two matching roles legitimately appears twice, keyed on the role rather than the person.
What is a technographic filter and why is it here?
It is a filter on what a company's website is built with: the ecommerce platform, the analytics, the payment provider, the support tool. This provider detects those and lets you filter on them alongside ordinary firmographics, so "companies on this platform, over two hundred people, in these three countries, and the person who runs data there" is one query. Nothing about industry codes or headcount will tell you what a team actually runs.
How do I find companies that are hiring for something?
Put a title or a phrase in the job post filters while searching people or companies. The job post part of the search is not limited to the job search mode: it filters organisations by what they have posted. Combine it with the posting date range for hiring in a given quarter, and leave the active switch off when you want historical postings, which is what tells you what a team has been building towards rather than what it needs today.
What do the address validation statuses mean?
Every work address comes back with the provider's own verdict: valid, risky, invalid or unknown. The actor picks the first valid one as the best address for the row, and keeps the rest alongside it. Filter on the status if you are sending mail, because risky and unknown are exactly the ones that bounce.
Why are personal emails only from consumer providers?
That is the provider's own rule, and a deliberate one. Addresses on company and university domains are excluded from the personal email lookup even when someone uses them personally, because the point of a personal address is that it survives a job change. What comes back is a consumer mailbox or nothing.
Do I need to know my account id?
No. Almost every path at this provider carries one, but the actor reads it from your key and logs which one it used. Set it explicitly only when your key reaches more than one account and you want a specific one.
Do I need my own API key?
Yes. This actor does not include data access. You use your own key from Forager.ai, the provider whose people and company data API this actor calls, created in your provider account and pasted into the apiKey field, where it is stored as an Apify secret. It travels in a request header and is never written to the log. Your own plan, credits and terms apply.
How much does a run cost?
Pricing is pay per result: you are charged for each record resolved into the dataset, and never for lookups the provider returned nothing for, for inputs refused before they were sent, for rows dropped by the filters, or for duplicates. Apify platform usage is included in the per-result price. Your own provider credits are separate and billed by them.
Keyword map
people search API, B2B contact data API, work email finder, personal email finder, phone number lookup, contact enrichment API, company search API, firmographic data API, technographic data API, web technology detection, company technology stack search, employee headcount data, company revenue data, funding round data, job postings API, hiring intent data, job change tracking, work history search, alumni search, skills search, reverse email lookup, reverse phone lookup, website traffic rank, prospect list building, sales intelligence API