# Facebook Profile Lead Scraper (`maximedupre/facebook-profile-lead-scraper`) Actor

Find public personal Facebook profiles from keywords, with optional location and email-domain filters. Get names, profile links, bios, work details, audience counts, verification, and public external links in a structured dataset.

- **URL**: https://apify.com/maximedupre/facebook-profile-lead-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Lead generation, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.15 / 1,000 profile leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🔎 Find personal Facebook profile leads

Facebook Profile Lead Scraper is for recruiters, sales teams, and researchers who need public personal profiles that match a search phrase. Enter keywords and get names, profile links, bios, professional details, audience counts, verification, and public external links in a structured dataset. Use a location or email-domain filter to narrow the search, and set a lead limit when you want fewer saved leads.

- Find public profiles for property outreach with **[Real Estate Broker](https://apify.com/maximedupre/facebook-profile-lead-scraper/examples/real-estate-broker)**.
- Build a people list for hiring research with **[Recruiter](https://apify.com/maximedupre/facebook-profile-lead-scraper/examples/recruiter)**.
- Find public profiles for coaching research with **[Business Coach](https://apify.com/maximedupre/facebook-profile-lead-scraper/examples/business-coach)**.
- Find local wedding professionals for outreach with **[Wedding Photographer](https://apify.com/maximedupre/facebook-profile-lead-scraper/examples/wedding-photographer)**.
- Find fitness professionals for a contact list with **[Personal Trainer](https://apify.com/maximedupre/facebook-profile-lead-scraper/examples/personal-trainer)**.
- Find home-loan professionals for market research with **[Mortgage Broker](https://apify.com/maximedupre/facebook-profile-lead-scraper/examples/mortgage-broker)**.
- Find money professionals for local research with **[Financial Advisor](https://apify.com/maximedupre/facebook-profile-lead-scraper/examples/financial-advisor)**.
- Find insurance professionals for outreach with **[Insurance Agent](https://apify.com/maximedupre/facebook-profile-lead-scraper/examples/insurance-agent)**.

#### 👤 See the profile lead data

The default dataset holds one row for each eligible public personal Facebook profile. Required values are the name, profile URL, and first matching keyword. When public data is available, a row can also include a bio, work history, audience counts, a verification flag, and external links. Optional values can be missing.

If the same profile appears through another keyword, location, or submitted value, the Actor keeps the first eligible match and ignores later matches. `matchedKeyword` shows the keyword from that first saved match.

#### ▶️ Search by keyword, then review the leads

Add at least one keyword, optionally add locations or email domains, and run the Actor. Start with the prefilled example for a small check. The Actor writes qualifying rows to the default dataset as they are found, so you can review saved data while discovery continues.

Use a small `maxItems` value when you want fewer rows. Leave it empty to return all available results until the source is exhausted.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `keywords` | array of strings | Required search terms for relevant public personal Facebook profiles. This does not perform name-only profile lookup. |
| `locations` | array of strings | Optional places used to narrow discovery. Leave it empty to search without a location filter. |
| `emailDomains` | array of strings | Optional public email domains used to narrow matches. Leave it empty to allow any public email domain. Private or hidden emails are not added. |
| `maxItems` | integer | Optional cap on saved qualifying personal profile leads. Leave it empty to return all available results until the source is exhausted. |

**Example input**

This example is copied from a successful current-beta run.

```json
{
  "keywords": [
    "fitness coach"
  ],
  "maxItems": 1
}
```

#### 🧾 Output

**Output shape**

The default dataset uses one output shape. Optional fields can be omitted when the source does not expose them. The table includes every field in that shape.

| Field | Type | What it does |
| --- | --- | --- |
| `fullName` | string | Public name shown on the personal Facebook profile. |
| `profileUrl` | string (URI) | Public Facebook URL for the personal profile. |
| `matchedKeyword` | string | Submitted keyword that first caused the profile to be saved. |
| `bio` | string | Public bio text when available. |
| `professional` | object | Public work or professional details when available. |
| `professional.occupation` | string | Public occupation or professional description. |
| `professional.workHistory` | array of objects | Public work entries shown on the profile. |
| `professional.workHistory[].role` | string | Public role or job title in the work entry. |
| `professional.workHistory[].employer` | string | Public employer or organization in the work entry. |
| `professional.workHistory[].location` | string | Public location listed for the work entry. |
| `professional.workHistory[].url` | string (URI) | Public URL linked to the work entry when available. |
| `audience` | object | Public audience counts shown on the profile. |
| `audience.followers` | integer | Public number of followers. |
| `audience.following` | integer | Public number of accounts this profile follows. |
| `verification` | object | Public verification information shown on the profile. |
| `verification.isVerified` | boolean | Whether Facebook shows a public verification mark. |
| `externalLinks` | array of objects | Public links listed on the profile. |
| `externalLinks[].url` | string (URI) | Public external link. |
| `externalLinks[].label` | string | Public label or title for the link when available. |

**Example profile lead**

This genuine row comes from a successful current-beta run.

```json
{
  "fullName": "Cathy Finley",
  "profileUrl": "https://www.facebook.com/cathy.finley.3/",
  "matchedKeyword": "real estate agent",
  "bio": "Cathy Finley. 709 likes · 3 talking about this. Real Estate Agent with Misti Mauceli Lewis Real Estate",
  "professional": {
    "occupation": "Real Estate Agent/Salesperson",
    "workHistory": [
      {
        "role": "Real Estate Agent/Salesperson",
        "employer": "Misti Mauceli Lewis Realty, Realtor, Broker-Owner",
        "url": "https://www.facebook.com/greenvillemsrealty"
      }
    ]
  },
  "audience": {
    "followers": 709,
    "following": 506
  },
  "verification": {
    "isVerified": false
  }
}
```

The complete field table remains the contract when a row has fewer optional fields.

#### 💳 Pricing

This Actor uses pay-per-event pricing. You pay for each qualifying personal profile lead saved to your dataset. The current tiered event prices are shown in the Actor pricing panel.

#### 🔌 Integrations

Read the default dataset in Apify Console or through the Apify API. You can export the saved leads and use Apify schedules or webhooks around your runs.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Why did a matching name not appear in the output?

This Actor uses keywords for discovery and does not do name-only profile lookup. A profile also needs to be public and eligible for the search.

##### How does the location filter work?

Add one or more locations to narrow discovery to profiles associated with those places. Leave `locations` empty to search without a location filter.

##### What does the email domain filter change?

It keeps matches with public email addresses from the domains you enter. Leave `emailDomains` empty to allow any public email domain. Private or hidden emails are not added.

##### What happens when the same profile matches more than one keyword?

The first eligible match is saved. Later matches for that profile are ignored, and `matchedKeyword` keeps the keyword from the first saved match.

##### Can I use several keywords in one run?

Yes. Add one or more search terms to `keywords`. The Actor searches each submitted value and saves eligible profile leads.

##### What happens if I leave Maximum leads empty?

The Actor returns all available results until the source is exhausted.

##### Why are some output fields missing?

Some profile details are not public. The Actor leaves unavailable optional values empty or omits them instead of making them up.

##### Does it collect Facebook Pages or private profiles?

No. This Actor is for public personal profiles. Private, restricted, and other non-person Facebook surfaces are outside its scope.

##### Can I read the leads through an API?

Yes. The output links to the default dataset, which you can read through the Apify API or export from Apify Console.

### 📝 Changelog

**v0.0** (02-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~facebook-profile-lead-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Facebook User Posts Scraper](https://apify.com/maximedupre/facebook-user-posts-scraper): Review public posts from a returned profile when you need source activity context.
- [Facebook Business Page Lead Scraper](https://apify.com/maximedupre/facebook-page-lead-scraper): Find public business Pages when your work needs company leads instead of personal profiles.
- [Instagram User Search](https://apify.com/maximedupre/instagram-user-search-scraper): Find public Instagram accounts from related keywords for cross-platform profile research.
- [YouTube Lead Scraper](https://apify.com/maximedupre/youtube-lead-scraper): Find public creator email leads from YouTube keywords or known channels.
- [Website Emails Scraper](https://apify.com/maximedupre/website-emails-scraper): Check public websites linked from profiles for contact emails.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `keywords` (type: `array`):

Enter one or more words or phrases to find relevant public Facebook personal profiles. The Actor uses these keywords for discovery and does not do name-only profile lookup.

## `locations` (type: `array`):

Optional. Enter one or more locations to narrow discovery to profiles associated with those places. Leave this empty to search without a location filter.

## `emailDomains` (type: `array`):

Optional. Keep matches with public email addresses from these domains, such as example.com. Leave this empty to allow any public email domain. Private or hidden emails are never added.

## `maxItems` (type: `integer`):

Optional. Stop after this many qualifying personal profile leads. Leave this empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "keywords": [
    "fitness coach"
  ],
  "maxItems": 1
}
```

# Actor output Schema

## `dataset` (type: `string`):

Link to the Facebook profile leads in the default dataset.

# 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 = {
    "keywords": [
        "fitness coach"
    ],
    "maxItems": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/facebook-profile-lead-scraper").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 = {
    "keywords": ["fitness coach"],
    "maxItems": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/facebook-profile-lead-scraper").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 '{
  "keywords": [
    "fitness coach"
  ],
  "maxItems": 1
}' |
apify call maximedupre/facebook-profile-lead-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/facebook-profile-lead-scraper"
        }
    }
}

```

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/qECXxOYuu5MI21YJa/builds/4rTsejCysei6cJiUq/openapi.json
