Facebook Lead Scraper
Pricing
$19.99/month + usage
Facebook Lead Scraper
Extract targeted leads from Facebook using the Facebook Lead Scraper. Collect profile names, page details, descriptions, emails, websites, phone numbers, and follower counts automatically. Ideal for lead generation, outreach campaigns, and market research.
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
21
Total users
0
Monthly active users
11 days ago
Last modified
Categories
Share
Facebook Lead Scraper ๐ฑ
Facebook Lead Scraper finds public Facebook entities that match your keywords โ Pages, personal profiles, post permalinks, videos and group threads โ and extracts the email addresses those entities publish publicly.
This is the general-purpose Facebook lead actor: it casts the widest net across every Facebook entity type. If you only want one slice, use the focused siblings instead (facebook-page-lead-scraper for business Pages, facebook-profile-lead-scraper for personal profiles, facebook-b2b-lead-scraper for B2B company Pages).
Every row it writes carries a real value in every column โ no blanks, no placeholders. If a keyword yields nothing, the run says so in the log and writes nothing rather than padding the dataset.
How it actually works ๐ฌ
Facebook has no public search API and its own site search is behind the login wall, so lead discovery has to go through public web search. The actor runs a three-stage pipeline:
1. Discovery โ where the Facebook URLs come from
Google no longer serves the destination URL in its result anchors: every organic link is an opaque /goto?url=CAESโฆ wrapper whose target is encrypted and returns HTTP 400 if you follow it. The actor recovers the real URLs from the inline JSON data island Google still embeds in the same page โ plain-text ["url","title","snippet"] triples sitting right beside those wrappers. Four merged recovery layers are tried in order (direct anchors โ JSON island โ bare island URLs โ raw-text sweep), then Brave Search and DuckDuckGo are used to top up. Two query scopes are merged: a broad site:facebook.com scope that returns every entity type, and a site:facebook.com/*/about scope that concentrates on Page About tabs.
2. Email โ where the text actually comes from
The emailSource column on every row states exactly where the address was read from โ and, critically, who it belongs to:
emailSource | Where it came from | Whose address is it? |
|---|---|---|
page_about_contact | The Contact info block on the entity's own logged-out /about tab (Facebook's profile_fields payload). Strongest provenance โ this is the address the owner typed into their own contact form. | The owner of the account in url |
facebook_page | The public contact payload embedded in the entity's own Facebook page. | The owner of the account in url |
page_snippet | The search snippet for that Page/profile URL, when the account's own surface could not be read. | The owner of the account in url |
linked_website | Facebook exposed no address, so the actor followed the external website that account links to and read its home / contact / about page. | The owner of the account in url |
post_body_author | The address is written in the body of a post or group thread. | โ ๏ธ The person who wrote that post โ NOT the owner of the timeline or group the permalink sits on. |
That last distinction matters and the actor never blurs it. A post_body_author row means "someone posted this address in this thread"; it is a real, useful lead, but the address is not a claim about whoever owns the URL. Rows whose address belongs to the account itself are always one of the other four labels. Accounts are also processed first, so a run fills up with owner-verified contacts before it falls back to post bodies.
3. Filtering โ emailDomains is applied to the final address, maxEmails caps each keyword, and infrastructure noise (Meta CDN addresses, asset filenames, Sentry DSNs, package version specs, tutorial placeholders like you@example.com, and prose false positives like that@gmail.com) is rejected before a row is written.
Honest limits โ ๏ธ
Verified live against Facebook, not assumed. These are the things that do not work, so you know what the actor is not doing:
mbasic.facebook.comis gone for anonymous use โ it resolves but redirects straight to the login wall.m.facebook.comlikewise redirects towwwand then to login.- The unauthenticated Graph API is closed โ
graph.facebook.com/<page>answers403 (#200) Provide valid app ID. - Page oEmbed is retired (
/plugins/page/oembed.json/โ 404), and the page-plugin iframe renders only a name and cover image, no contact data. - Google's
<cite>breadcrumb is useless for Facebook โ for facebook.com results it renders engagement metadata ("40+ reactions ยท 2 years ago"), not the URL. That is why the JSON data island is used instead. - Bing returns nothing for site-scoped Facebook queries; it silently drops the
site:operator. - Brave and DuckDuckGo rate-limit aggressively per exit IP, so they are used only as a top-up behind Google, each across a rotating proxy ladder.
www.facebook.comdoes answer logged-out requests โ including the/abouttab with its fullprofile_fieldscontact payload โ but only when the complete Chrome navigation header set (sec-ch-ua,sec-ch-ua-mobile,sec-ch-ua-platform,sec-fetch-dest/mode/site/user,upgrade-insecure-requests) is sent. A bare User-Agent gets a 1,542-byte HTTP 400 stub. The actor always sends the full set.- The email inside that payload is JSON-escaped: the at-sign is emitted as the six-character sequence backslash-u-0-0-4-0, never as a literal
@, so a naive email regex over the raw HTML returns zero matches. The actor un-escapes every such sequence in the blob before scanning. - An
/aboutpage can be 19 MB, but theprofile_fieldsblock is emitted early and consistently (measured at offsets 635,209โ636,471, closing by 645,800, across Pages ranging from 868 KB to 19.7 MB). The actor caps the read at 2 MB rather than streaming the whole document for one address. - Entity type is reported as
page_or_profilewhen a bare vanity slug genuinely cannot be told apart from a personal profile without fetching it; it is refined topageorprofilewhenever the page is actually fetched.
Support and feedback
- Bug reports: Open a ticket in the repository Issues section
- Custom features: Contact our enterprise support team Lead: dev.scraperengine@gmail.com
Extractable Data Table ๐
| Data Type | Description |
|---|---|
| Email address | The public email address published by the Facebook entity, its page, or the website it links to. |
| Title | The name of the Page / profile, or the headline of the post or group thread. |
| Description | The public bio, About text, or post body that surrounded the contact detail. |
| URL | The canonical https://www.facebook.com/โฆ link to the entity. |
| Entity type | Which kind of Facebook object the lead came from: page, profile, page_or_profile, post, group, group_post, video, photo or event. |
| Email source | Which of the five sources the address was read from, and therefore whose address it is. |
| Network | The Facebook domain the result was served on (facebook.com, fb.com, fb.me, fb.watch). |
| Keyword | The keyword that surfaced the lead. |
Key Features of Facebook Lead Scraper
- โญ Widest coverage of the four Facebook lead actors โ Pages, profiles, posts, videos and group threads in one run
- โญ Resilient URL recovery that survives Google's encrypted
/gotolink wrappers - โญ Multi-engine discovery โ Google, Brave and DuckDuckGo, each behind its own proxy ladder
- โญ Four-tier contact extraction โ the Page's own
/aboutcontact block first, then the page payload, the search snippet, and finally the linked external website - โญ Unambiguous provenance โ every row states where its email came from and whose address it is
- โญ No empty rows, ever โ a row is written only when every field carries a real value
- โญ Domain filtering to keep only the mailbox providers or corporate domains you care about
- โญ Location targeting to narrow leads to a city or region
- โญ Aggressive junk rejection โ CDN, asset, tracking and placeholder addresses never reach your dataset
- โญ Real-time dataset writes so partial results are available while the run is still going
How to use Facebook Lead Scraper ๐
- โ
Enter one or more keywords describing the leads you want (
photographer,dentist,marketing agencyโฆ) - โ Optionally set a location to geo-narrow the search
- โ
Optionally set email domains to keep only e.g.
@gmail.comaddresses - โ Set maximum leads per keyword
- โ (Optional) Open Advanced Settings to change search depth or turn the enrichment stages off
- โ Start the run โ rows appear in the dataset as they are found
- โ Export to CSV, Excel, JSON or via the API
Use Cases ๐ฏ
Marketing and Outreach ๐ฏ Build targeted lead lists for campaigns ๐ฏ Reach out to potential customers using published contact information
Research and Analysis ๐ฏ Analyze which niches publish contact details openly ๐ฏ Study how businesses present themselves on Facebook
Business Development ๐ฏ Identify potential leads and partners across Pages, profiles and group threads ๐ฏ Expand your customer base with relevant, verified-public contacts
Why choose us? ๐
Every claim in this README was verified against the live site rather than assumed, and the actor tells you in the log exactly which source produced each lead โ or truthfully reports that a keyword produced nothing. Facebook's anonymous surface changes often; the multi-layer discovery and three-tier extraction exist precisely so a single change on their side does not take the whole actor to zero.
Facebook Lead Scraper Legal Guidelines โ๏ธ
The actor reads only publicly available information from public Facebook entities โ nothing behind a login, nothing private, no authentication and no session tokens are used.
โ๏ธ Ensure compliance with Facebook's terms of service when using the scraper โ๏ธ Do not use the tool to extract private or sensitive information without consent โ๏ธ Use extracted data responsibly and ethically for legitimate purposes only โ๏ธ Respect user privacy and adhere to applicable data protection laws (GDPR, CCPA) โ๏ธ Refrain from using the scraper for spamming or unsolicited communication
Input Parameters ๐งฉ
๐ฆ Example Input (JSON)
{"keywords": ["photographer"],"platform": "Facebook","location": "","emailDomains": ["@gmail.com"],"maxEmails": 20,"engine": "legacy","maxSearchPages": 4,"enrichFromFacebookPage": true,"enrichFromLinkedWebsite": true,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Input Table
| Field | Description |
|---|---|
| keywords | Required. Keywords to find relevant Facebook entities |
| platform | Platform to scrape (Facebook) |
| location | Optional city/region to narrow the search |
| emailDomains | Keep only emails on these domains; empty = all domains |
| maxEmails | Maximum leads to collect per keyword (default 20) |
| engine | Engine type (legacy) |
| maxSearchPages | Search-result pages to walk per keyword (default 4) |
| enrichFromFacebookPage | Open the logged-out Facebook page when the snippet shows no email (default true) |
| enrichFromLinkedWebsite | Follow the entity's external website as a last resort (default true) |
| proxyConfiguration | Proxy used for page fetching (default RESIDENTIAL) |
Output Format ๐ค
๐ Example Output (JSON) โ real rows from a live run
[{"network": "facebook.com","keyword": "photographer","title": "Kate Milford Photographer","description": "Kate Milford Photographer. 192 likes. Photographs: of people, buildings, places and parties; musicians, artists, people with disabilities, family; journeys; cities.","url": "https://www.facebook.com/katemilfordphotographer","email": "jkatemilford@gmail.com","entityType": "page","emailSource": "page_about_contact"},{"network": "facebook.com","keyword": "photographer","title": "Brian Coffman, Photographer","description": "Brian Coffman, Photographer, Sacramento. 108 likes. Show and event photography. Specialises in no flash and low light conditions to capture your events without drawing your audiences eye from the action.","url": "https://www.facebook.com/briancoffmanphotography","email": "bgcoffman@gmail.com","entityType": "page","emailSource": "page_about_contact"}]
Output Table
| Field | Description |
|---|---|
| network | The Facebook domain the result came from |
| keyword | Keyword that surfaced the lead |
| title | Page/profile name or post headline |
| description | Public bio, About text or post body |
| url | Canonical Facebook URL of the entity |
| The extracted public email address | |
| entityType | page, profile, page_or_profile, post, group, group_post, video, photo, event |
| emailSource | page_about_contact, facebook_page, page_snippet, linked_website or post_body_author |
FAQ โ
Where exactly does the email come from?
From one of five places, and the emailSource column always tells you which โ and whose address it is. Best case (page_about_contact) it is read straight out of the Contact info block on the account's own logged-out /about tab, i.e. the address the owner entered themselves. Worst case (post_body_author) it was written in the body of a post, and belongs to that post's author rather than to the owner of the URL.
Does it log in to Facebook?
No. No credentials, no cookies, no session tokens. Only anonymous, logged-out requests to public URLs.
Can it read private profiles or group member lists?
No. Anything behind the login wall is out of reach and the actor does not pretend otherwise.
Why is entityType sometimes page_or_profile?
Because a bare Facebook vanity slug (facebook.com/somename) is used by both business Pages and personal profiles, and the URL alone cannot distinguish them. When the actor actually fetches the page it refines this to page or profile.
Why did a keyword return zero rows?
Because no public Facebook entity matching it published an email that passed your emailDomains filter. The log states this explicitly. The actor never pads the dataset with sample or placeholder rows.
Which proxy should I use?
The default (RESIDENTIAL) is correct. Facebook answers logged-out requests from residential exits; datacenter exits are far more likely to be shown the login wall. Search-engine traffic uses its own dedicated proxy groups regardless of this setting.
Can I speed up a run?
Lower maxSearchPages, or turn off enrichFromLinkedWebsite (and then enrichFromFacebookPage) in Advanced Settings. You will get fewer leads per keyword in exchange.
What formats can I export to?
CSV, Excel, JSON, XML, or straight from the Apify API.