# Facebook Profile Email Scraper (`leads-scraper/facebook-profile-email-scraper`) Actor

Facebook Profile Email Scraper SD - Facebook Profile Email Scraper is a lead generation tool that extracts leads with public contact emails, bio, follower counts and profile URLs from Facebook profile URLs or usernames - Facebook profile scraper for creator outreach.

- **URL**: https://apify.com/leads-scraper/facebook-profile-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Facebook Profile Email Scraper

Facebook Profile Email Scraper turns keywords, or a list of Facebook profile URLs and handles, into a clean dataset of public contact emails and page details. One structured row per account.

There are two ways in. Give this Facebook profile scraper **keywords** and it goes looking for Facebook pages that publish a contact address, then fetches each one it finds.

Or give it **profile URLs or usernames** and it fetches exactly the pages you name — a predictable Facebook email finder for outreach lists you already own. Both can be combined in one run.

**Read this before you run it.** A keyword run does not return pages that merely mention your word. It targets pages that publish a contact address next to it, so most rows arrive with an email already attached.

Each row carries the page name, description and avatar, plus its follower, following and like counts. The follower figure is the rounded one Facebook itself displays, such as `174M`; the like count is exact.

Facebook sometimes serves a reduced page instead, and those rows come back without the counts — re-run the failed rows. `username` and `userId` stay empty either way.

That honesty matters more than a feature list. Everything below describes what Facebook Profile Email Scraper measurably does, and every withheld field is documented as withheld.

### What the Facebook Profile Email Scraper does

Facebook Profile Email Scraper runs in two phases, and the order is the whole design.

**Phase 1 — Google harvest, on the GOOGLE\_SERP proxy.** When keywords are given, Facebook Profile Email Scraper searches Google with an email dork — `site:facebook.com photographer "@gmail.com"` — expanded across keyword x modifier x address domain, paging up to `maxPagesPerKeyword` per query.

Each result block yields the page handle **and** the address published on that page, together, in one request. Google no longer prints the target URL on most layouts, so the handle comes from the site label, the breadcrumb host and path, or a `Name (@handle)` title.

This is where the volume and most of the addresses come from. Asking Google for pages that already carry an address is one request per ten accounts; fetching every page hoping for one in the description is a request each, and most descriptions have none.

**Phase 2 — profile enrichment, on the RESIDENTIAL proxy.** Every page found is then fetched for its real profile data — name, description, avatar and whatever else Facebook publishes — and merged into a single row with the address from phase 1. Pages you supply yourself skip phase 1 and start here.

Full URLs, bare handles and `@handle` forms all normalise to one canonical URL, and duplicates are dropped. Each response is parsed with a regex-first cascade: a regex battery against the raw HTML, then the Facebook-specific parser, then Open Graph and link-preview meta tags.

Matching key names rather than object paths is deliberate. Platforms move those objects between releases, but the key names survive, so Facebook Profile Email Scraper keeps parsing after a layout change.

The Facebook bio email extractor step then reads the display name, description text and any external URL for addresses the harvest did not already have.

Results stream: each account is handed to enrichment the moment the search finds it, so the first rows are saved seconds into a run and keep arriving while the search continues. Each saved row is logged as it is written, naming the handle, address and counts found.

Facebook Profile Email Scraper reads **public data only**. No login, no cookies, no session, no private API, no official Facebook API, no browser and no JavaScript rendering. If a signed-out visitor cannot see it, this Facebook profile scraper does not collect it.

### Browser headers, and what the anonymous view returns

On its first attempt Facebook Profile Email Scraper sends a full browser header set — client hints, a referer, the whole sec-fetch family — exactly as a browser asks for a public page. On Facebook that is what makes the site serve the real profile page instead of a small login stub; a retry falls back to a plainer set.

When that full page arrives you get the page name, its description, the profile picture and the follower, following and like counts. The follower number is the rounded one Facebook prints; the like count is exact.

Facebook sometimes serves a reduced page anyway, and those rows come back without the counts. No handle field and no numeric account id are published to a signed-out visitor either, so `username` and `userId` stay `""` — the platform's choice, not a defect.

The description sentence is also where many pages publish their business address, which is why a Facebook bio email extractor still works well here.

### How the Facebook Profile Email Scraper handles email hygiene

Email extraction is shared with the whole Neuro Data family and is deliberately strict, because a dirty list costs more than a short one.

Facebook Profile Email Scraper undoes obfuscation before matching, so `[at]`, `(dot)`, spaced forms like `a @ b`, zero-width characters and the full-width `＠` all resolve. Domain matching is boundary-correct, so `@gmail.com` never matches inside `@gmail.company`.

Placeholder locals such as `email@`, `yourname@` and `noreply@` are dropped, as are prose words like `the@`. Genuine role addresses (`hi@`, `hey@`, `hello@`) are kept, because creators really do use them.

### Input schema

Every input field the Facebook Profile Email Scraper ships with is listed below. No hidden options.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array | prefilled with example terms | Search terms. The Actor finds matching Facebook pages and scrapes each one. |
| `location` | string | `""` | Added to every keyword search, e.g. `New York`. Keyword search only. |
| `maxPagesPerKeyword` | integer 1-30 | `5` | Google results pages read per query. Raise to find more accounts. Keyword search only. |
| `expandQueries` | boolean | `true` | Search each keyword in several phrasings (keyword + "email", + "contact", ...). Keyword search only. |
| `queryModifiers` | array | `email`, `contact`, `business inquiries`, `collab`, `booking`, `dm` | Extra words combined with each keyword when expansion is on. |
| `profileUrls` | array | `[]` | Full Facebook profile URLs. Bare usernames also accepted. |
| `usernames` | array | `[]` | Handles without the URL. Combined with the list above. |
| `customDomains` | array | `[]` | Address domains the search asks Google for, and a filter on the results. Empty searches the common free-mail providers and keeps every address found. |
| `onlyWithEmail` | boolean | `false` | Skip profiles whose public bio contains no address. |
| `maxProfiles` | integer 1-100000 | `100` | Stop after this many profiles are saved. |
| `maxConcurrency` | integer 1-30 | `10` | How many profiles are fetched in parallel, and how many Google searches run at once. Higher is faster; lower it if rows come back blocked. |
| `proxyGroup` | select | `RESIDENTIAL` | `RESIDENTIAL`, `BUYPROXIES94952` or `UNBLOCKER`. |
| `countryCode` | string | `""` | Two-letter proxy country (US, GB, DE...). Empty for any. |

There is no `dataSource` input here; that option exists only on the TikTok Actor. Supply at least one of `keywords`, `profileUrls` or `usernames` — a run with none of them stops and tells you to add one.

#### Example inputs

Starting from keywords, with no list of pages yet:

```json
{
  "keywords": ["small business", "bakery"],
  "location": "Austin",
  "maxPagesPerKeyword": 5,
  "expandQueries": true,
  "onlyWithEmail": false,
  "maxProfiles": 250,
  "maxConcurrency": 10,
  "proxyGroup": "RESIDENTIAL"
}
```

Starting from pages you already know, or mixing both ways in one run:

```json
{
  "keywords": ["founder"],
  "profileUrls": [
    "https://www.facebook.com/nationalgeographic",
    "cookingwithamira"
  ],
  "usernames": ["studio.lumen"],
  "onlyWithEmail": true,
  "maxProfiles": 250,
  "countryCode": "US"
}
```

### Finding pages from a keyword

Keyword search in the Facebook Profile Email Scraper is a real search, not a filter over URLs you supplied. Give this Facebook email finder a niche, job title or industry and the harvest goes looking for pages in it that publish a contact address.

With `expandQueries` on, each keyword is combined with every entry in `queryModifiers` and every address domain, and each combination is paged separately. `location` narrows the search to one place, and `maxPagesPerKeyword` sets how deep each query is read.

The harvest runs on the Apify **GOOGLE\_SERP** proxy, the page fetch on the **RESIDENTIAL** proxy. Neither group can do the other's job — Google is reachable only through GOOGLE\_SERP, and Facebook needs residential exit IPs.

Facebook Profile Email Scraper then enriches every page found this way exactly like one you pasted in yourself. Pages you supplied are queued first, then whatever the harvest discovers, and the `keyword` and `query` fields record which search produced each row.

### Output schema

Every Facebook Profile Email Scraper dataset row carries all of these keys, so your CRM import or spreadsheet mapping never breaks between runs.

| Field | Meaning |
|---|---|
| `success` | True when the profile was fetched and parsed, **or** an address was found for the account. A blocked page fetch still yields a usable row when the harvest gave an address. |
| `network` | Platform name |
| `dataSource` | Which path produced the profile data: `page`, `api` or `api+page` |
| `keyword` | The keyword that found this account, or `null` for a supplied URL |
| `query` | The exact Google query that found it, or `null` |
| `description` | The result snippet Google showed, cleaned of labels and counters |
| `profileUrl` | The canonical profile URL that was requested |
| `url` | The URL actually returned, after redirects |
| `username` | Handle |
| `fullName` | Display/real name as published |
| `displayName` | Handle or title the platform shows |
| `email` | First public email found, or `null` |
| `emails` | Every public email found, deduplicated |
| `emailSource` | Where the addresses came from: `search` (the Google harvest), `bio` (the page itself), `bio+search`, or `null`. `search` is the common value on a keyword run |
| `bio` | Public bio / description text |
| `followersCount` | Followers or subscribers, when published |
| `followingCount` | Accounts followed, when published |
| `likesCount` | Total likes/hearts, when published |
| `avatarUrl` | Profile picture URL |
| `externalUrl` | Link published in the bio, when present |
| `error` | Why a row failed, or `null` |
| `scrapedAt` | ISO 8601 UTC timestamp |

Here `dataSource` is always `page` and `secUid` is always empty. Fields Facebook does not publish anonymously come back `null` for counters and flags, or `""` for strings.

#### Example output

A realistic Facebook Profile Email Scraper row from a keyword run, with the counts a full page provides.

```json
{
  "success": true,
  "network": "Facebook",
  "dataSource": "page",
  "keyword": "bakery",
  "query": "site:facebook.com bakery contact \"@gmail.com\"",
  "description": "Weeknight recipes from a small Beirut kitchen. Collabs: hello@cookingwithamira.com",
  "profileUrl": "https://www.facebook.com/cookingwithamira",
  "url": "https://www.facebook.com/cookingwithamira",
  "username": "",
  "fullName": "Cooking with Amira",
  "displayName": "Cooking with Amira",
  "email": "hello@cookingwithamira.com",
  "emails": ["hello@cookingwithamira.com", "press@cookingwithamira.com"],
  "emailSource": "search",
  "bio": "Cooking with Amira. 48,213 likes. Weeknight recipes from a small Beirut kitchen. Collabs: hello@cookingwithamira.com | press@cookingwithamira.com",
  "followersCount": 52000,
  "followingCount": 34,
  "likesCount": 48213,
  "avatarUrl": "https://scontent.xx.fbcdn.net/v/t39.30808-1/example_avatar.jpg",
  "externalUrl": "",
  "error": null,
  "scrapedAt": "2026-08-31T09:14:52Z"
}
```

`followersCount` holds the rounded figure Facebook prints, so `52K` on the page arrives as `52000`, while `likesCount` is the exact number. When Facebook serves the reduced page instead, those counters stay `null` rather than being invented.

### How to use the Facebook Profile Email Scraper step by step

**1. Start from a keyword, or collect your targets.** Put a niche, job title or industry into `keywords` and the harvest finds Facebook pages in it that publish an address. Add a `location` to narrow it, and raise `maxPagesPerKeyword` to find more.

**2. Or paste your own targets.** Put full URLs in `profileUrls` and bare handles in `usernames`. Every list is merged and de-duplicated, so keywords and URLs work together.

**3. Decide on filtering.** Set `onlyWithEmail` to `true` for rows that carry an address. `customDomains` both tells the search which address domains to ask for and filters what is kept.

**4. Set the volume.** `maxProfiles` caps the Facebook Profile Email Scraper run. `maxConcurrency` defaults to 10 and accepts up to 30; lower it if rows come back blocked.

**5. Choose a proxy.** `RESIDENTIAL` is the right default. Set `countryCode` only when you want the page rendered for a specific market.

**6. Run and export.** Rows appear live. Export to CSV, JSON or XLSX, or pull them from the Apify API into your CRM.

**7. Schedule it.** Point Facebook Profile Email Scraper at the same keywords on a schedule to catch pages that publish an address later.

### Use cases for the Facebook Profile Email Scraper

**Creator outreach.** Turn a keyword or a shortlist of pages into a contact sheet with Facebook Profile Email Scraper. Because the harvest targets pages that publish an address, a keyword run tends to arrive already usable rather than needing a second pass.

**Lead enrichment.** You already have company or creator pages in your CRM. Facebook Profile Email Scraper fills the missing email, description and avatar columns.

**Local business prospecting.** Search `restaurant` with a `location` set and the run comes back with the kitchens, gyms and clinics in that city that publish a public inbox — the Facebook lead generation step, not a list to qualify afterwards.

**Partnership and PR research.** Media teams pull the public description and any published link with Facebook Profile Email Scraper, then judge relevance before writing a pitch.

**Competitive and market research.** Run Facebook Profile Email Scraper over a category, keep the `scrapedAt` timestamp, and compare public positioning language over time.

**Deduplicating a bought list.** Run the Facebook bio email extractor over supplier pages and keep only rows with a real, non-placeholder address.

### Limitations

**Counts depend on which page Facebook serves.** A full page gives the name, description, avatar and the follower, following and like counts; the follower figure is Facebook's own rounded one, the like count exact. A reduced page comes back without those counts, so re-run the failed rows.

**No handle or numeric id.** Facebook publishes neither to a signed-out visitor, so `username` and `userId` are always empty, and `postsCount` is not published either.

**Yield varies, and it is not a promise.** The harvest deliberately asks for pages that publish an address, so most rows on a keyword run carry one. How many depends on the platform, the niche and how many accounts in that niche publish an address at all.

A row is still returned when only profile data is available, with `email` set to `null` — an accurate result, not a failure. Addresses no longer come only from the description text: the harvest and the page are independent sources, and `emailSource` says which answered.

**The harvest needs the GOOGLE\_SERP proxy.** It is the only route to Google. A run with keywords and nothing else fails without that proxy group; a run that also has profile URLs logs a warning and carries on with those.

**No login, no cookies, no private access.** Facebook Profile Email Scraper cannot see friends-only content, hidden contact fields, group members or anything gated behind an account.

**No browser rendering.** Content injected purely by JavaScript is out of reach, because there is no headless browser in this Facebook profile scraper.

**Rate limiting is real.** Retries in Facebook Profile Email Scraper use up to four attempts with exponential backoff and a fresh exit IP, and a redirect to a login page counts as rate limiting, not a missing profile.

**Free plan cap.** Runs on the Apify free plan stop at 100 profiles. Paid plans are uncapped.

**Accuracy is a mirror, not a judgement.** Facebook Profile Email Scraper reports what the public page says. It cannot verify that a published address is monitored, or that the page belongs to who it claims.

### Pricing, limits and resumability

Facebook Profile Email Scraper uses pay-per-event billing: `actor-start` once per run, then `profile-scraped` for each saved row, so an empty run costs almost nothing.

Progress is keyed to a hash of your input. A migrated or restarted run resumes where it stopped, while changing the input starts a clean run.

At the end of a run the Facebook Profile Email Scraper log reports counts of ok, blocked, not found and errored profiles, so you can tell an absent page from a throttled one.

### FAQ

**How does keyword search work?**
In two phases. First a Google harvest on the GOOGLE\_SERP proxy searches with an email dork — `site:facebook.com bakery "@gmail.com"` — expanded across your keywords, `queryModifiers` and address domains, and each result gives back a handle and the address published with it. Then every page found is fetched on the RESIDENTIAL proxy for its real profile data, and the two are merged into one row.

**Why does a row have `success: true` when the page fetch failed?**
Because `success` now means the run produced something usable: the profile was fetched, or an address was found for the account. A page that Facebook declined to serve still yields a row with the email from the harvest, and `error` records what happened.

**Does the Actor send browser headers?**
Yes. Facebook Profile Email Scraper asks for a public page with a full browser header set on the first attempt, and a plainer one on retry. On Facebook that is what makes the site serve the real profile page rather than a small login stub.

**Do profile URLs and usernames still work?**
Yes, unchanged. Keywords are an additional way in, not a replacement, and both can be combined — supplied pages are queued first, then whatever the harvest discovers.

**Does the Facebook Profile Email Scraper return follower stats?**
Yes, when Facebook serves its full page: the name, description, avatar and the follower, following and like counts. The follower figure is Facebook's own rounded one, the like count exact.
On the reduced page Facebook sometimes serves instead, those counts come back `null`. Usernames and numeric ids are never published to a signed-out visitor.

**Do I need a Facebook login or cookies?**
No. Facebook Profile Email Scraper uses no login, no cookies and no session. It reads only what a signed-out visitor sees.

**Does it use the official Facebook API?**
No. There is no official API, no partner API and no private endpoint involved. Facebook Profile Email Scraper fetches public pages over HTTP through the Apify residential proxy.

**Can it find emails that are hidden from public view?**
No. If an address is published on neither the page nor a page Google indexed, this Facebook email finder will not produce it.

**Can I give it handles instead of full URLs?**
Yes. Bare handles, `@handles` and full URLs normalise to the same canonical target, and duplicates are removed before fetching.

**Does it render JavaScript?**
No. There is no headless browser here. Facebook Profile Email Scraper fetches HTML and parses it, which keeps runs cheap but puts script-injected content out of reach.

**What happens to profiles with no email?**
Facebook Profile Email Scraper still saves them with `email` set to `null`, unless you enable `onlyWithEmail`, in which case they are skipped entirely.

**How many profiles can one run process?**
The free Apify plan caps a run at 100 profiles. Paid plans are uncapped, and `maxProfiles` accepts up to 100000.

**What does it cost?**
Billed per event: `actor-start` once per run, plus `profile-scraped` for every row saved.

**Why are some rows `success: false`?**
Because neither route produced anything: the page fetch failed and no address was found. Usually a deleted page, a URL that is not a profile, or rate limiting. The reason is written into `error`.

**Which proxy should I use?**
Start with `RESIDENTIAL`. Datacenter IPs are blocked quickly on this platform, so the Facebook profile scraper defaults to residential for a reason.

**Is there a Facebook Profile Email Scraper equivalent for other platforms?**
Yes. Twenty-nine sibling Actors run the same engine on other networks, and each one documents exactly which fields its platform publishes.

### Related Actors

| Actor | What it collects |
|---|---|
| [Facebook Profile Email and Phone Number Scraper](https://apify.com/leads-scraper/facebook-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from Facebook |
| [Facebook Profile Phone Number Scraper](https://apify.com/leads-scraper/facebook-profile-phone-number-scraper) | Phone numbers plus bio and follower counts from Facebook profiles |
| [Behance Profile Email Scraper](https://apify.com/leads-scraper/behance-profile-email-scraper) | Emails plus bio and follower counts from Behance profiles |
| [Bluesky Profile Email Scraper](https://apify.com/leads-scraper/bluesky-profile-email-scraper) | Emails plus bio and follower counts from Bluesky profiles |
| [Buy Me a Coffee Profile Email Scraper](https://apify.com/neuro-scraper/buy-me-a-coffee-profile-email-scraper) | Emails plus bio and follower counts from Buy Me a Coffee profiles |
| [DEV Community Profile Email Scraper](https://apify.com/neuro-scraper/dev-to-profile-email-scraper) | Emails plus bio and follower counts from DEV Community profiles |
| [DeviantArt Profile Email Scraper](https://apify.com/leads-scraper/deviantart-profile-email-scraper) | Emails plus bio and follower counts from DeviantArt profiles |
| [Dribbble Profile Email Scraper](https://apify.com/leads-scraper/dribbble-profile-email-scraper) | Emails plus bio and follower counts from Dribbble profiles |
| [Flipboard Profile Email Scraper](https://apify.com/neuro-scraper/flipboard-profile-email-scraper) | Emails plus bio and follower counts from Flipboard profiles |
| [GitHub Profile Email Scraper](https://apify.com/leads-scraper/github-profile-email-scraper) | Emails plus bio and follower counts from GitHub profiles |
| [GitLab Profile Email Scraper](https://apify.com/neuro-scraper/gitlab-profile-email-scraper) | Emails plus bio and follower counts from GitLab profiles |
| [Gumroad Profile Email Scraper](https://apify.com/leads-scraper/gumroad-profile-email-scraper) | Emails plus bio and follower counts from Gumroad profiles |
| [Hashnode Profile Email Scraper](https://apify.com/neuro-scraper/hashnode-profile-email-scraper) | Emails plus bio and follower counts from Hashnode profiles |
| [Hugging Face Profile Email Scraper](https://apify.com/neuro-scraper/hugging-face-profile-email-scraper) | Emails plus bio and follower counts from Hugging Face profiles |
| [Instagram Profile Email Scraper](https://apify.com/leads-scraper/instagram-profile-email-scraper) | Emails plus bio and follower counts from Instagram profiles |
| [Kick Profile Email Scraper](https://apify.com/leads-scraper/kick-profile-email-scraper) | Emails plus bio and follower counts from Kick profiles |
| [Linktree Profile Email Scraper](https://apify.com/leads-scraper/linktree-profile-email-scraper) | Emails plus bio and follower counts from Linktree profiles |
| [Mastodon Profile Email Scraper](https://apify.com/leads-scraper/mastodon-profile-email-scraper) | Emails plus bio and follower counts from Mastodon profiles |
| [Mixcloud Profile Email Scraper](https://apify.com/leads-scraper/mixcloud-profile-email-scraper) | Emails plus bio and follower counts from Mixcloud profiles |
| [Patreon Profile Email Scraper](https://apify.com/leads-scraper/patreon-profile-email-scraper) | Emails plus bio and follower counts from Patreon profiles |
| [Pinterest Profile Email Scraper](https://apify.com/leads-scraper/pinterest-profile-email-scraper) | Emails plus bio and follower counts from Pinterest profiles |
| [Snapchat Profile Email Scraper](https://apify.com/leads-scraper/snapchat-profile-email-scraper) | Emails plus bio and follower counts from Snapchat profiles |
| [SoundCloud Profile Email Scraper](https://apify.com/leads-scraper/soundcloud-profile-email-scraper) | Emails plus bio and follower counts from SoundCloud profiles |
| [Substack Profile Email Scraper](https://apify.com/leads-scraper/substack-profile-email-scraper) | Emails plus bio and follower counts from Substack profiles |
| [Telegram Profile Email Scraper](https://apify.com/leads-scraper/telegram-profile-email-scraper) | Emails plus bio and follower counts from Telegram profiles |
| [Threads Profile Email Scraper](https://apify.com/leads-scraper/threads-profile-email-scraper) | Emails plus bio and follower counts from Threads profiles |
| [TikTok Profile Email Scraper](https://apify.com/leads-scraper/tiktok-profile-email-scraper) | Emails plus bio and follower counts from TikTok profiles |
| [Tumblr Profile Email Scraper](https://apify.com/leads-scraper/tumblr-profile-email-scraper) | Emails plus bio and follower counts from Tumblr profiles |
| [Twitch Profile Email Scraper](https://apify.com/leads-scraper/twitch-profile-email-scraper) | Emails plus bio and follower counts from Twitch profiles |
| [X Profile Email Scraper](https://apify.com/leads-scraper/x-profile-email-scraper) | Emails plus bio and follower counts from X profiles |
| [YouTube Profile Email Scraper](https://apify.com/leads-scraper/youtube-profile-email-scraper) | Emails plus bio and follower counts from YouTube profiles |
| [Behance Profile Email and Phone Number Scraper](https://apify.com/leads-scraper/behance-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from Behance |
| [Bluesky Profile Email and Phone Number Scraper](https://apify.com/leads-scraper/bluesky-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from Bluesky |
| [Buy Me a Coffee Profile Email and Phone Number Scraper](https://apify.com/neuro-scraper/buy-me-a-coffee-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from Buy Me a Coffee |
| [DEV Community Profile Email and Phone Number Scraper](https://apify.com/neuro-scraper/dev-to-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from DEV Community |
| [DeviantArt Profile Email and Phone Number Scraper](https://apify.com/leads-scraper/deviantart-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from DeviantArt |
| [Dribbble Profile Email and Phone Number Scraper](https://apify.com/leads-scraper/dribbble-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from Dribbble |
| [Flipboard Profile Email and Phone Number Scraper](https://apify.com/neuro-scraper/flipboard-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from Flipboard |
| [GitHub Profile Email and Phone Number Scraper](https://apify.com/leads-scraper/github-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from GitHub |
| [GitLab Profile Email and Phone Number Scraper](https://apify.com/neuro-scraper/gitlab-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from GitLab |
| [Gumroad Profile Email and Phone Number Scraper](https://apify.com/leads-scraper/gumroad-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from Gumroad |
| [Hashnode Profile Email and Phone Number Scraper](https://apify.com/neuro-scraper/hashnode-profile-email-and-phone-number-scraper) | Emails, phone numbers and profile details from Hashnode |

### Support

Questions, a bug report or a custom build request for the Facebook Profile Email Scraper? Email <neurodata.apify@gmail.com>.

Please include the run ID and a couple of example profile URLs or keywords. That makes an issue quicker to reproduce and fix.

You are responsible for how you use the collected data. Facebook Profile Email Scraper only reads publicly visible pages; complying with the platform's terms and with data protection law in your jurisdiction remains your obligation.

# Actor input Schema

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

Search terms - a niche, job title or industry. The Actor finds Facebook accounts matching each term, then scrapes every account it finds. Use this when you do not already have a list of accounts. You can combine keywords with the profile URLs below.

## `location` (type: `string`):

Added to every keyword search, e.g. `New York`. Leave empty to search everywhere. Only applies to keyword search.

## `profileUrls` (type: `array`):

Full Facebook profile URLs, e.g. `https://www.facebook.com/username`. Bare usernames also work. Use this when you already know which accounts you want.

## `usernames` (type: `array`):

Facebook handles without the URL. Combined with the list above.

## `customDomains` (type: `array`):

Domains the keyword search asks Google for, e.g. `@gmail.com`. Also filters results to these domains. Leave EMPTY (recommended) to search the 12 biggest free-mail providers - Gmail, Yahoo, Outlook, Hotmail, iCloud, AOL, Proton, Live, GMX, Mail.com, Yandex and Zoho - and keep every address found, including company domains. Listing domains here narrows the search to only those.

## `onlyWithEmail` (type: `boolean`):

Skip profiles whose public bio contains no contact address.

## `maxProfiles` (type: `integer`):

Stop after this many profiles have been saved.

## `maxPagesPerKeyword` (type: `integer`):

How many Google results pages to read per search query. Raise it to find more accounts. Keyword search only.

## `expandQueries` (type: `boolean`):

Search each keyword in several phrasings (keyword + "email", + "contact", ...) to reach accounts a single query misses. Keyword search only.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when query expansion is on. Leave empty to use the defaults for this platform.

## `maxConcurrency` (type: `integer`):

How many profiles are fetched in parallel, and how many Google searches run at once. Raise it for speed, lower it if you see blocked rows.

## `proxyGroup` (type: `string`):

RESIDENTIAL is recommended. Profile pages block datacenter IPs.

## `countryCode` (type: `string`):

Two-letter country code for the proxy (e.g. US, GB, DE). Empty for any.

## Actor input object example

```json
{
  "keywords": [
    "founder",
    "small business"
  ],
  "location": "",
  "profileUrls": [],
  "usernames": [],
  "customDomains": [],
  "onlyWithEmail": false,
  "maxProfiles": 100,
  "maxPagesPerKeyword": 5,
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "business inquiries",
    "collab",
    "booking",
    "dm"
  ],
  "maxConcurrency": 10,
  "proxyGroup": "RESIDENTIAL",
  "countryCode": ""
}
```

# Actor output Schema

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

Records produced by Facebook Profile Email Scraper, stored in the run's 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": [
        "founder",
        "small business"
    ],
    "location": "",
    "countryCode": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/facebook-profile-email-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": [
        "founder",
        "small business",
    ],
    "location": "",
    "countryCode": "",
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/facebook-profile-email-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": [
    "founder",
    "small business"
  ],
  "location": "",
  "countryCode": ""
}' |
apify call leads-scraper/facebook-profile-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/facebook-profile-email-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/rdVOgIHuHphYrOcL2/builds/8ZXzeh3RhbWDjNVHh/openapi.json
