# Reverse Email Lookup — Name, LinkedIn Profile & Company (`sputnikapi/reverse-email-lookup`) Actor

Turn any email address into a person: full name, current job title and employer, LinkedIn profile URL, location, skills and career history — from a 1B+ profile database. $3.20 per 1,000 found; the complete 164-field document is one flag away at $8. Pay only when found — misses are free.

- **URL**: https://apify.com/sputnikapi/reverse-email-lookup.md
- **Developed by:** [Sputnik API](https://apify.com/sputnikapi) (community)
- **Categories:** Lead generation, AI, Agents
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 1,000 person found (summary)s

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

## Reverse Email Lookup — the person and LinkedIn profile behind any email

> **$3.20 per 1,000 people found, $8 with the full 164-field document.** An
> email we cannot match is a free row with a reason — you pay for answers,
> not attempts.

Paste a list of email addresses and get back structured professional
profiles: name, current job title and employer, LinkedIn profile URL, bio, location,
seniority, skills, education, and social links — from a database of **1B+
professional profiles**.

**This is a database lookup, not a live scrape.** Results return in seconds,
nothing is crawled on demand, and every row carries a freshness stamp
(`_freshness`: `fresh_90d`, `updated_1y`, or `older`) plus the record's
exact `updatedAt` timestamp.

### Why this one

1. **You pay only for found.** Emails we cannot match are free `not_found`
   rows; malformed entries are free `invalid` rows. Several alternatives on
   this shelf bill every pushed row — misses included. We never do.
2. **The widest card on the shelf.** The default summary is already **60+
   fields** — identity, current role and employer, bio, skills, education,
   certifications, languages, seniority signals, salary estimate, social
   links. `fullOutput: true` upgrades it to the complete document —
   **164 fields across 37 sections** — a depth this shelf simply does not
   offer.
3. **Both address types.** Work emails resolve via the employer, personal
   emails via the profile record — one input, one code path.

### Who is this for

- **Inbound qualification**: who just signed up with this email?
- **CRM enrichment**: turn an email-only list into titled, located contacts.
- **Fraud & KYB screening**: check who is really behind a free-mail address.

### Input

```json
{
  "emails": ["satya.nadella@microsoft.com"],
  "fullOutput": false
}
```

### What you get — 60+ fields per match, 164 with `fullOutput`

| Group | Summary card (default, $0.0032/found) | Full document (`fullOutput: true`, $0.008/found) |
|---|---|---|
| Identity | full name, first/last, headline, photo, profile slug | same + background image |
| Current role | job title, employer name + slug (flat columns), position dates, industry | + role descriptions, employment type, job function |
| Career history | current positions | **every past position** with dates and descriptions |
| Education | schools, degrees, fields of study, dates | + descriptions, grades, activities |
| Skills & languages | full skills list, languages with proficiency | same |
| Certifications | name, authority, dates | + license numbers and links |
| Bio | full "about" text | same |
| Location | city, state, country (ISO code + full names) | same + coordinates when known |
| Seniority signals | level, total experience years, tenure, decision-maker flag | same |
| Salary estimate | inferred min–max | same |
| Social links | professional profile URL, GitHub, Twitter/X, Facebook, website | same |
| Contacts | — | **email addresses (work + personal) and phone numbers** |
| Deep sections | — | publications, patents, awards, projects, courses, organizations, volunteer work, articles, recommendations, up to 50 related profiles |
| Honesty meta | `_status`, `_freshness`, `updatedAt`, `_matchCandidates` | same + per-section coverage map (`_meta`) |

### Output — a real summary row

One row per input email, aligned with your list. This is an actual row from
the database (contact-free summary mode):

```json
{
  "_status": "found",
  "_input": { "email": "satya.nadella@microsoft.com" },
  "_freshness": "fresh_90d",
  "companyName": "Microsoft",
  "companySlug": "microsoft",
  "_view": "lite-v3",
  "slug": "satyanadella",
  "fullName": "Satya Nadella",
  "firstName": "Satya",
  "lastName": "Nadella",
  "headline": "Chairman and CEO at Microsoft",
  "jobTitle": "Chairman and CEO",
  "industry": "Software Development",
  "about": "As chairman and CEO of Microsoft, I define my mission and that of my company as empowering every person and every organization on the planet to achieve more.",
  "connectionsCount": 500,
  "followersCount": 12052722,
  "profileImageUrl": "https://assets.sputnik.io/pp/profilepic/7d36…",
  "updatedAt": "2026-07-03T10:54:34.301Z",
  "location": {
    "city": "Redmond",
    "state": "WA",
    "stateFullName": "Washington",
    "country": "US",
    "countryFullName": "United States",
    "rawLocationString": "Redmond, Washington, United States"
  },
  "seniority": {
    "totalExperienceYears": 12,
    "currentTenureYears": 12,
    "averageTenureYears": 7
  },
  "contactInformation": {
    "socialLinks": {
      "profileUrl": "https://www.linkedin.com/in/satyanadella"
    }
  },
  "experience": {
    "work": [
      { "title": "Chairman and CEO", "company": "Microsoft", "startDate": "2014-02-01", "endDate": null, "location": "Greater Seattle Area" },
      { "title": "Member Board Of Trustees", "company": "University of Chicago", "startDate": "2018-01-01", "endDate": null }
    ]
  },
  "education": [
    { "school": "The University of Chicago Booth School of Business", "startDate": "1994-01-01", "endDate": "1996-12-31" },
    { "school": "University of Wisconsin-Milwaukee", "degreeName": "Master’s Degree", "fieldOfStudy": "Computer Science" },
    { "school": "Manipal Institute of Technology, Manipal", "degreeName": "Bachelor’s Degree", "fieldOfStudy": "Electrical Engineering" }
  ]
}
```

`skills`, `accomplishments.languages`, `certifications` and `inferredSalary`
ride the same card whenever the profile carries them. When one employer has
several people with the same name, the row carries `_matchCandidates` — the
honest ambiguity count instead of a silent guess.

#### The full document (`fullOutput: true`)

Everything above **plus** the sections that make the record a dossier:
complete career history with per-role descriptions, education detail,
publications, patents, awards, projects, volunteer work, related profiles —
and the **contact block** (emails, phone numbers when on record):

```json
{
  "contactInformation": {
    "emails": { "work": null, "personal": ["s•••@microsoft.com", "s•••@uchicago.edu"] },
    "phoneNumbers": [],
    "socialLinks": { "profileUrl": "…", "twitterUrl": "…" }
  },
  "experience": { "work": [ { "title": "Chairman and CEO", "company": "Microsoft", "startDate": "2014-02-01", "endDate": null, "employmentType": null, "normalizedSeniority": ["Chief X Officer (CxO)"], "logoUrl": "…" } ] },
  "relatedProfiles": [ { "url": "…", "name": "…", "headline": "…", "location": "…" } ],
  "articles": [ { "title": "…" } ],
  "_meta": { "sectionsIncluded": ["location", "experience", "accomplishments", "publications", "patents", "contactInformation", "inferredSalary", "seniority"] }
}
```

*(excerpt — the real answer carries all positions, all schools, and for this
profile 56 articles and 50 related profiles; emails masked here, not in the
answer)*

The **Output tab** shows three views of the same rows: *Overview* (one line
per person), *Career & education*, and *Contacts & signals*.

### Pricing

| Event | Price | When |
|---|---|---|
| Person found (summary) | $0.0032 | matched email, 60+ field row |
| Person found (full document) | $0.008 | `fullOutput: true`, 164 fields / 37 sections |
| Not found / invalid | **$0** | always free |

Your free $5 Apify credit ≈ **1,560 found lookups**.

### FAQ

**Work emails only?** No — personal addresses resolve too, via the profile
record rather than the employer.

**What does "not found" cost?** Nothing. Your bill equals your hit count.

**What exactly does `fullOutput` add?** The complete career history with
role descriptions, full education and certification detail, publications,
patents, awards, projects, articles, related profiles — and the contact
block (emails and phone numbers when on record). The summary card never
carries contact data.

**How is this different from a live enrichment API?** Same shape of answer,
but from a standing database: seconds instead of minutes, no third-party
quota, and a freshness stamp on every row so you know what you got.

**Is this compliant?** The database holds public professional profile data.
We honor removal requests — contact us via the Issues tab.

### The family

Same engine, other doors: **Profile Lookup** (URL → profile), **Work Email
Finder** (name + domain → email), **Company Employees Finder** (domain →
roster), **People/Company Database Search**, **Name-to-Profile** (name + company → profile), **Social Handle Lookup** (dev/social handle → person), **Bulk People Enrichment**
(CSV, 50k rows). One data core, one billing promise: misses are free.

### Disclaimer

This Actor is an independent product and is not affiliated with, endorsed
by, or sponsored by LinkedIn Corporation. It does not access, crawl, or
scrape LinkedIn at run time — answers come from our own database of
publicly available professional data; "LinkedIn" is used only to describe
the kind of public profile data the database covers. Removal requests are
honored via the Issues tab.

# Actor input Schema

## `emails` (type: `array`):

One email per line. Invalid entries come back as free rows with status "invalid"; addresses we cannot match come back as free "not\_found" rows.

## `fullOutput` (type: `boolean`):

Return the complete profile document — 164 fields in 37 sections: full career history with role descriptions, education detail, certifications, publications, patents, awards, projects and all contact fields — instead of the 60+ field summary card. Misses stay free in both modes.

## Actor input object example

```json
{
  "emails": [
    "satya.nadella@microsoft.com"
  ],
  "fullOutput": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "emails": [
        "satya.nadella@microsoft.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sputnikapi/reverse-email-lookup").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 = { "emails": ["satya.nadella@microsoft.com"] }

# Run the Actor and wait for it to finish
run = client.actor("sputnikapi/reverse-email-lookup").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 '{
  "emails": [
    "satya.nadella@microsoft.com"
  ]
}' |
apify call sputnikapi/reverse-email-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sputnikapi/reverse-email-lookup"
        }
    }
}
```

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/ZDyCwWPNNDsFwnwnM/builds/vAJtKdutEgYSpYj1M/openapi.json
