# LinkedIn New Hires Finder ✅ Recent Joiners + Previous Employer (`b2bsearch/new-hires-finder`) Actor

New: who recently joined a company, by website domain. Hires in the last N months with job title, start month, seniority, location, LinkedIn URL and the employer they came from. Filter by seniority, title and country. $3.20 per 1,000 new hires; companies with nobody new free. MCP, n8n ready.

- **URL**: https://apify.com/b2bsearch/new-hires-finder.md
- **Developed by:** [B2B Enrich Search](https://apify.com/b2bsearch) (community)
- **Categories:** Lead generation, Jobs, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 1,000 new hire founds

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

### What does New Hires Finder do?

**New Hires Finder** turns a company website domain into the people who **recently joined** that company: name, new job title, the month they started, seniority, location, LinkedIn profile URL — and **the employer they came from**. Enter `stripe.com`, choose "joined in the last 6 months", get the recent hires with their previous company and previous title on the same row.

It is a LinkedIn new hires finder by company domain, a recent joiners tracker and a job change signal for one company at a time: the hires are the signal, the previous employer is the context nothing else on this shelf gives you.

This is a **database lookup, not a scrape**: rows come from a database of professional profile records with position dates, so a company answers in seconds and the run needs no cookies, login or browser.

- One row per new hire, each person once. Filter by seniority, job title words and country; cap the rows per company.
- Every row carries the **previous employer** and **previous title** when the record has a closed position elsewhere (most do), and the month the new position started.
- **You pay per new hire delivered** — $0.0032 per person ($3.20 per 1,000). A company with nobody new in the window is a free row; so are repeats and note rows.
- Up to 50 companies and 10,000 new hires per run, from the Console, the API, a schedule, an n8n / Make / Zapier step or an MCP client.

No email addresses or phone numbers are returned. `hasWorkEmail` and `hasPersonalEmail` say who is reachable before you enrich.

### What data do you get for each new hire?

| Field | Example | Filled |
|---|---|---|
| `fullName`, `firstName`, `lastName` | `Jane Doe` | always |
| `jobTitle` | `Senior Data Analyst` | always — the title at the new employer |
| `seniority` | `manager` | one of cxo, vp, director, manager, founder, other |
| `companyName`, `companyDomain` | `Stripe`, `stripe.com` | always — the company you asked about |
| `startedAt` | `2026-04` | the month the position started; a year alone when the record has only the year |
| `previousCompany` | `Example Analytics` | when the record has a closed position at another company (24 of 25 rows in the run below) |
| `previousTitle` | `Senior Data Analyst` | with `previousCompany` |
| `previousEndedAt` | `2026-03` | with `previousCompany`: the month the previous position ended |
| `headline` | `Senior Data Analyst` | most rows |
| `location`, `countryCode` | `Vancouver, British Columbia, Canada`, `ca` | most rows |
| `linkedinUrl` | `https://www.linkedin.com/in/…` | always |
| `hasWorkEmail`, `hasPersonalEmail` | `true` / `false` | a flag only, not the address |
| `personId`, `updatedAt`, `_freshness` | `123456`, `2026-03-27T13:34:44Z`, `updated_1y` | always |
| `_detail` | `profile` | `profile` when the person's record was read (previous role available); `row` when it could not be |

### How to find a company's new hires (3 steps)

1. Paste company website domains into **Company website domains**, one per line (up to 50).
2. Set **Joined in the last N months** (default 6) — or an exact month in **Joined since** — and press **Start**. Optional: seniority, job title words, countries, and the cap per company.
3. Export the dataset as CSV, Excel or JSON, or read it through the API.

### How much does it cost to find new hires?

**$3.20 per 1,000 new hires delivered** ($0.0032 per person), plus the small Actor start fee.

| Row | Price |
|---|---|
| New hire delivered (`_status: found`) | $0.0032 |
| Same person recorded twice | $0 — merged before delivery |
| Company with nobody who joined in the window (`no_results`) | $0 |
| People over the per-company cap (`skipped_per_company` note) | $0 |
| Person whose position at the company is older than the window — a newer position elsewhere matched the date (`outside_window`) | $0 |
| Person whose record now lists a different current employer (`left_already`) | $0 |
| Domain no company on record uses, or an invalid entry | $0 |

`maxPerCompany` (default 50) and `maxResults` (default 200) are your spend caps: a run of 50 companies at the defaults costs at most $0.64.

### What a run looks like

Measured on the live database on 2026-10-09: `stripe.com`, joined in the last 6 months, cap 30 — **25 new hires in 39 seconds**, 24 of them with the previous employer on the row (BMO, Splunk, Amadeus …), start months April to September 2026.

Start dates are dense through 2025 and thinner for the most recent two or three months: a hire from last month is on record only once their profile shows the new position. Widen the window for small companies.

### Input

```json
{
  "companyDomains": ["stripe.com"],
  "sinceMonths": 6,
  "maxResults": 200,
  "maxPerCompany": 50,
  "seniority": [],
  "jobTitles": [],
  "countries": []
}
```

- `companyDomains` — required. Company website domains, up to 50 per run. Brand domains resolve to the company that owns them.
- `sinceMonths` — how far back a start date counts as "new" (default 6, up to 36). `since` (`2026-04` or `2026-04-15`) sets an exact month instead and wins when set.
- `seniority` — keep only these buckets: `cxo`, `vp`, `director`, `manager`, `founder`, `other`.
- `jobTitles` — keep only titles containing any of these words (3–64 characters each, up to 10).
- `countries` — two-letter codes where the people live.
- `maxPerCompany` — at most this many people per company (default 50). `maxResults` — the run-wide cap (default 200, maximum 10,000).

### Output

A new hire (fictional values):

```json
{
  "_status": "found",
  "_input": { "domain": "stripe.com" },
  "_freshness": "updated_1y",
  "fullName": "Jane Doe",
  "firstName": "Jane",
  "lastName": "Doe",
  "jobTitle": "Senior Data Analyst",
  "seniority": "other",
  "companyName": "Stripe",
  "companyDomain": "stripe.com",
  "startedAt": "2026-04",
  "previousCompany": "Example Analytics",
  "previousTitle": "Data Analyst",
  "previousEndedAt": "2026-03",
  "headline": "Senior Data Analyst at Stripe",
  "location": "Vancouver, British Columbia, Canada",
  "countryCode": "ca",
  "linkedinUrl": "https://www.linkedin.com/in/jane-doe-example",
  "hasWorkEmail": false,
  "hasPersonalEmail": true,
  "personId": 123456789,
  "updatedAt": "2026-03-27T13:34:44.858Z",
  "_detail": "profile"
}
```

### New hires API, MCP and integrations

- **API** — start a run and read the dataset with the Apify API or the JavaScript and Python clients.
- **MCP** — call the Actor as a tool from Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server.
- **n8n, Make, Zapier** — run it weekly on your account list and push the new rows into a CRM, a Slack channel or a sequence.

### Use cases

- **Sales** — a new VP or director in your buyer persona is the best time to reach out; a hire who came from a customer of yours already knows the product.
- **Competitive intelligence** — see which companies a competitor is hiring from, and where its people go (pair with [Former Employees Finder](https://apify.com/b2bsearch/former-employees-finder)).
- **Recruiting** — map the talent flow into a company: which employers it hires from, at which seniority.
- **Account research** — know who is new on an account before a renewal or an expansion conversation.

### FAQ

#### How do I find who recently joined a company?

Enter the company's website domain and a window in months. The Actor keeps people whose current position at that company started inside the window, reads each person's record for the start month and the previous position, and returns one row per person.

#### Where does the previous employer come from?

From the person's own career record: the most recently closed position at a company other than the new employer. A promotion inside the same company is not counted as "came from" — it is the same employer.

#### Why is a hire from last month missing?

Start dates reach the database when the person's profile shows the new position; the most recent two or three months are thinner than older ones. Run again later, or widen the window.

#### Does it return emails or phone numbers?

No. Pass the `linkedinUrl` column to [LinkedIn Email Finder](https://apify.com/b2bsearch/linkedin-email-finder) or [LinkedIn to Phone](https://apify.com/b2bsearch/linkedin-to-phone) for the people you want to contact.

#### Does it need cookies, a login or an API key?

No. The Actor does not sign in to any website and asks for no credentials.

### Use New Hires Finder with AI agents and MCP

This Actor works as a tool for AI agents. Add it to Claude, ChatGPT, Cursor or any other MCP client through the Apify MCP server:

```
https://mcp.apify.com?tools=b2bsearch/new-hires-finder
```

- **The agent pays only for results.** $0.0032 per new hire, companies with nobody new free; cap a call with `maxTotalChargeUsd`.
- **Bounded cost.** `maxPerCompany` and `maxResults` limit what one call can deliver and bill.
- **Rows explain themselves.** `_status` says what happened; `_detail` says whether the previous role could be read.

Input an agent can send as is:

```json
{
  "companyDomains": ["stripe.com"],
  "sinceMonths": 6,
  "maxResults": 50
}
```

The same Actor is available as a tool in LangChain, CrewAI and the OpenAI Agents SDK, and as a step in n8n, Make and Zapier through the Apify integrations.

### Related Actors: which one should you use?

| Need | Actor |
|---|---|
| Company domain → recent hires and where they came from | **New Hires Finder** (this Actor) |
| Company domain → former employees and where they went | [Former Employees Finder](https://apify.com/b2bsearch/former-employees-finder) |
| Company domain → current employees | [Company Employees](https://apify.com/b2bsearch/company-employees) |
| Company domain → decision makers | [Decision Maker Finder by Domain](https://apify.com/b2bsearch/domain-to-decision-makers) |
| Company domain → email format | [Company Email Format Finder](https://apify.com/b2bsearch/company-email-format-finder) |
| Company domain → similar companies | [Lookalike Company Finder](https://apify.com/b2bsearch/lookalike-company-finder) |
| Filters → people who changed jobs anywhere | [People Database Search](https://apify.com/b2bsearch/people-database-search) (the "started the current role after" filter) |
| LinkedIn URL → email addresses on record | [LinkedIn Email Finder](https://apify.com/b2bsearch/linkedin-email-finder) |
| LinkedIn URL → phone numbers on record | [LinkedIn to Phone](https://apify.com/b2bsearch/linkedin-to-phone) |
| Filters → leads with an email | [B2B Leads Finder](https://apify.com/b2bsearch/b2b-leads-finder) |

### Disclaimer and permitted use

**Independent product.** This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. LinkedIn® is a trademark of its owner. It is named here only to describe the kind of public profile link this Actor returns.

**No platform access.** This Actor does not log in to, crawl or collect pages from LinkedIn or any other service. Every answer comes from our own database of business-contact records. It never returns passwords, messages, or content from non-public accounts.

**Permitted use.** Business-to-business purposes only: sales prospecting, recruiting outreach, CRM enrichment, and confirming that a business contact is who they say they are. You may not use this Actor or its output to:

- stalk, harass, threaten, dox or publicly expose any person;
- decide on anyone's eligibility for credit, employment, housing or insurance. This Actor is not a consumer reporting agency and its output is not a consumer report under the U.S. Fair Credit Reporting Act;
- send unsolicited bulk messages, or place autodialed or prerecorded calls or texts without the consent the law requires;
- profile people by health, religion, political opinion, sexual orientation, ethnicity or union membership;
- build or resell a contact database from the results.

**Your responsibilities.** You decide which companies to look up and what to do with the result. You are responsible for having a lawful basis for that use and for complying with the laws that apply to you, including GDPR and UK GDPR, ePrivacy and PECR, CCPA/CPRA, CAN-SPAM, and the TCPA and Do Not Call rules. Honor every opt-out you receive.

**Removal requests.** To have a person's data removed, open an issue on this Actor with only the profile link. Nothing else is needed, and the record is removed from every listing.

**Accuracy.** Records can be incomplete or out of date. Output is provided as is. Check before you rely on it.

# Actor input Schema

## `companyDomains` (type: `array`):

One company per line, as its website domain (stripe.com), up to 50 per run. Brand domains resolve to the company that owns them.

## `sinceMonths` (type: `integer`):

How far back a start date counts as a new hire (default 6, up to 36 months). Start dates are dense through 2025 and thinner for the most recent months.

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

Stop after this many new hires across all companies (default 200, maximum 10,000). You pay $0.0032 per new hire delivered ($3.20 per 1,000); companies with nobody new are free.

## `maxPerCompany` (type: `integer`):

Deliver at most this many people per company (default 50), so one large employer does not fill the whole run.

## `seniority` (type: `array`):

Keep only new hires whose role falls in these seniority buckets. Leave empty for everyone.

## `jobTitles` (type: `array`):

Keep only new hires whose job title contains any of these words (sales, engineer, "account executive"). 3–64 characters each, up to 10.

## `countries` (type: `array`):

Where the new hires live: two-letter codes (us, de, gb). Leave empty for every country.

## `since` (type: `string`):

Instead of N months: a month like 2026-04 (or a date like 2026-04-15). When set, this wins over "Joined in the last N months".

## Actor input object example

```json
{
  "companyDomains": [
    "stripe.com"
  ],
  "sinceMonths": 6,
  "maxResults": 50,
  "maxPerCompany": 50,
  "jobTitles": [],
  "countries": []
}
```

# 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 = {
    "companyDomains": [
        "stripe.com"
    ],
    "sinceMonths": 6,
    "maxResults": 50,
    "maxPerCompany": 50,
    "jobTitles": [],
    "countries": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2bsearch/new-hires-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 = {
    "companyDomains": ["stripe.com"],
    "sinceMonths": 6,
    "maxResults": 50,
    "maxPerCompany": 50,
    "jobTitles": [],
    "countries": [],
}

# Run the Actor and wait for it to finish
run = client.actor("b2bsearch/new-hires-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 '{
  "companyDomains": [
    "stripe.com"
  ],
  "sinceMonths": 6,
  "maxResults": 50,
  "maxPerCompany": 50,
  "jobTitles": [],
  "countries": []
}' |
apify call b2bsearch/new-hires-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2bsearch/new-hires-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/Zr5XpiCaKq2AvtpxZ/builds/hjoXFe11OsyIeE7PC/openapi.json
