# People Search & Email Finder (LinkedIn URLs, No Login) (`peoplesearch/people-search-email-finder`) Actor

Describe who you need in plain English and get matching professionals: name, job title, company, location and LinkedIn URL, plus verified work emails on request. No LinkedIn login or cookies. Pay per person found.

- **URL**: https://apify.com/peoplesearch/people-search-email-finder.md
- **Developed by:** [PeopleSearch.im](https://apify.com/peoplesearch) (community)
- **Categories:** Lead generation, AI, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## People Search & Email Finder (LinkedIn URLs, No Login)

Describe the people you need in plain English and get them as clean rows: name, job title, company, location and LinkedIn profile URL, with a verified work email when you ask for one.

There is no LinkedIn login, no cookie and no browser session involved. The people come from a licensed B2B people database, so nothing can get an account restricted and a run takes seconds.

### What it does

- **Reads a plain description.** "Marketing managers at SaaS companies in London", "software engineers at Stripe", "CFOs of hospitals in Texas", "recruiters who speak Dutch". It understands role, company, kind of company, industry, company size, place, seniority, school, skills and language.
- **Finds how many people match before it delivers anyone.** A run that matches nobody ends at once and charges nothing beyond its start.
- **Delivers full profiles**: full name, title, headline, company, company website, industry, company size, location and LinkedIn URL.
- **Finds verified work emails** on request. Each address is looked up live when you ask, not guessed from a pattern, and you pay only for an email that is found.
- **Takes exact filters too**, when you would rather set job titles, company domains or locations yourself.

### How to use it

1. Type who you are looking for in **Who are you looking for?**
2. Set **Number of people** (up to 100 per run).
3. Switch on **Find verified work emails** if you want them.
4. Run it, then download the dataset as CSV, Excel or JSON, or read it through the Apify API.

### Input

| Field | What it is |
|---|---|
| `query` | Who you are looking for, in plain English. Required. |
| `maxResults` | How many people to deliver, 1 to 100. Default 10. |
| `includeEmails` | Also look up each person's verified work email. Default off. |
| `filters` | Optional exact filters, used instead of reading the query: `job_titles`, `exclude_job_titles`, `past_job_titles`, `companies`, `company_domains`, `past_companies`, `locations`, `industries`, `schools`, `skills`, `languages`, `keywords`, `company_keywords`, `company_size_min`, `company_size_max`, `years_experience_min`, `years_experience_max`, `first_name`, `last_name`. |

```json
{
    "query": "Marketing managers at SaaS companies in London",
    "maxResults": 25,
    "includeEmails": true
}
```

### Output

One row per person. The values below are placeholders that show the shape.

```json
{
    "name": "Jane Doe",
    "firstName": "Jane",
    "lastName": "Doe",
    "title": "Marketing Manager",
    "headline": "B2B SaaS marketing",
    "company": "Example Software Ltd",
    "companyWebsite": "https://example.com",
    "companyIndustry": "Software Development",
    "companySize": 180,
    "location": "London, England, United Kingdom",
    "linkedinUrl": "https://www.linkedin.com/in/jane-doe-example",
    "email": "jane.doe@example.com",
    "emailStatus": "found",
    "emailCertainty": "ultra_sure",
    "query": "Marketing managers at SaaS companies in London"
}
```

`emailStatus` is `found`, `not_found` (no verified address exists; not charged), or empty when emails were not requested. The run's `OUTPUT` record holds the total number of people who match, how your description was read (the filters it became), and how many people and emails were delivered.

### What it costs

You pay per result, nothing per month:

| What | Price |
|---|---|
| One person delivered as a full profile | $0.006 |
| One verified work email found | $0.02 |
| An email lookup that finds nothing | Free |
| A run that matches nobody | Only the run start ($0.00005) |

So 100 people cost $0.60, and 100 people with their verified emails cost at most $2.60. Set a maximum cost per run in the run options and the Actor stops delivering at that amount.

**On Apify's free plan** a run delivers up to 5 people and does not look up emails. Paid plans get up to 100 people per run and verified emails.

### Use it from an AI agent

Every Apify Actor can be called as a tool through Apify's MCP server, so an AI agent can pass a description to this Actor and read the people back.

### Questions

**Does this scrape LinkedIn?**
No. It never opens LinkedIn and never needs your LinkedIn account. The profiles come from a licensed B2B people database (Icypeas), and a person's public LinkedIn URL is part of the profile you receive.

**How current are the emails?**
A work email is looked up live at the moment you ask for it. When none can be found, the row says `not_found` and you are not charged for it.

**Why did I get fewer people than I asked for?**
Fewer people may match your description, your maximum cost per run may cover fewer, or you are on the free plan (5 per run). The status message and the `OUTPUT` record say which.

**Can a person be removed from results?**
Yes. Anyone can ask to be left out at peoplesearch.im/opt-out, and the request applies to every search and lookup.

### Using the data

The results are business contact data about real people. You are responsible for having a lawful basis for how you use them, including the rules on unsolicited email where your recipients live (for example GDPR and the ePrivacy rules in Europe, CAN-SPAM in the United States and CASL in Canada).

# Actor input Schema

## `query` (type: `string`):

Plain English. Say the role, and any of: company, kind of company, industry, company size, place, seniority, language. Examples: "Marketing managers at SaaS companies in London", "software engineers at Stripe", "CFOs of hospitals in Texas", "recruiters who speak Dutch".

## `maxResults` (type: `integer`):

How many people to deliver, at most 100 per run (5 on Apify's free plan). You pay per person delivered; a run that finds nobody costs nothing beyond its start.

## `includeEmails` (type: `boolean`):

Also look up each person's verified work email. Charged only for emails that are found. Available on Apify paid plans.

## `filters` (type: `object`):

Exact filters, used instead of reading the query. Fields: job_titles, exclude_job_titles, past_job_titles, companies, company_domains, past_companies, locations, industries, schools, skills, languages, keywords, company_keywords (all lists of text), company_size_min, company_size_max, years_experience_min, years_experience_max (numbers), first_name, last_name (lists). Example: {"job_titles": \["Head of Growth"], "locations": \["Berlin"], "company_domains": \["n26.com"]}. When filters are set, the query is only a label.

## Actor input object example

```json
{
  "query": "Marketing managers at SaaS companies in London",
  "maxResults": 10,
  "includeEmails": false
}
```

# Actor output Schema

## `people` (type: `string`):

One row per person delivered: name, job title, company, location, LinkedIn URL and, when asked for, the verified work email.

## `summary` (type: `string`):

How many people match, how the description was read, and how many people and emails were delivered.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "Marketing managers at SaaS companies in London"
};

// Run the Actor and wait for it to finish
const run = await client.actor("peoplesearch/people-search-email-finder").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "query": "Marketing managers at SaaS companies in London" }

# Run the Actor and wait for it to finish
run = client.actor("peoplesearch/people-search-email-finder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "Marketing managers at SaaS companies in London"
}' |
apify call peoplesearch/people-search-email-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,peoplesearch/people-search-email-finder"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/OD4OPdji8ieBhdoaY/builds/buDwsyDNGqXUl9duD/openapi.json
