Inside Our Facebook Profile Scraper: Emails, Contacts, and Lead Scoring (No Login) ¶
Facebook business Pages are one of the richest public sources of B2B contact data on the web. A single Page often exposes an email, a phone number, a website, opening hours, a rating, and a category — all sitting in public view. The hard part isn't that the data is hidden; it's pulling it consistently, at scale, without logging in or getting blocked.
That's what our Facebook Profile Scraper is built for. This post is a walkthrough of what it actually does, field by field, and how people use it.
The core principle: public data, no login ¶
The scraper never logs in and never uses cookies. It reads only what any logged-out visitor's browser can see — the public metadata of a profile or business Page. That's a deliberate design choice:
- No account, no cookies, no ban risk on your side. You don't hand over credentials or a session.
- Real-time. Each run fetches live data, not a stale cached database, so what you get reflects the Page as it is right now.
- Fast and cheap. A desktop-first fetch strategy with retries and deduplication keeps runs quick and the cost per profile a fraction of a cent.
The trade-off is honest: without login you get profile and Page metadata, not private feeds or a full post history. For lead generation and business research — which is what this tool is for — that metadata is exactly what you need.
What you get back: 30+ fields per profile ¶
Feed it one or many profile/Page URLs (or even a numeric Facebook ID) and each result comes back as a structured record. Here's what's in it.
Core identity ¶
username, fullName, bio, category, locale, verified, profileType, profileUrl, avatarUrl, coverPhoto, facebookId. You always know exactly who the record is, whether it's a verified Page, and what kind of entity it is.
Audience ¶
followerCount (pulled as an exact number, not a rounded guess), plus audienceSize bucketing from micro to mega and an engagementRatio. Useful for quickly sorting a list by reach.
Contact data — the lead-gen payload ¶
This is the part most people come for:
emails[]+primaryEmailphones[]+primaryPhonewebsites[]+primaryWebsitebestContact: { channel, value, label }— the single best way to reach them, pre-picked
And a genuine differentiator: website enrichment. When a Page lists a business website but no email on Facebook itself, the scraper visits that site (homepage, /contact, /about) and pulls the email and phone from there. You get contact data even when Facebook alone doesn't have it.
Local business details ¶
When the Page is a local business, you also get aggregateRating (value + count), a structured address (street, city, region, postcode, country), and openingHours[]. That's enough to build a local-lead list or a competitor map without touching another tool.
Lead intelligence ¶
Beyond raw fields, each record carries a scored assessment:
activityScore(0–100) withactivityScoreReasons[]activityTier— small / growing / established / majorrecommendations[]and anoutreachPitch
Instead of "here's a Page," you get "here's a Page, here's how active it is, and here's an angle to open with." Sort by activityScore and you've got a priority queue for outreach.
Cross-platform reach ¶
socialSearchUrls{} gives you deep links to find the same brand on Instagram, LinkedIn, TikTok, X, YouTube, and Google — handy for enriching a profile across channels.
Run summary ¶
Every run also emits an aggregate _summary record: total scraped, verified count, how many had an email, average activity score, and the tier breakdown. Good for a quick read on list quality before you export.
Built for bulk ¶
Single-profile lookups are trivial; the scraper is built for lists. Practical features that matter at scale:
- Deduplication — input URLs are normalized (vanity vs numeric,
m.vswww, locale variants) and output is deduped byfacebookId, so you never scrape or pay for the same Page twice. - Retries — failed fetches get a fresh proxy IP and backoff.
- Concurrency — runs many profiles in parallel; 25 mixed Pages finish in seconds.
- Webhook — optionally POST each profile in real time to your own endpoint as it's scraped.
- Non-existent Pages aren't billed — if a Page doesn't resolve, you don't pay for it.
Pricing is pay-per-result at $4 per 1,000 profiles, so a few thousand leads costs a few dollars, with no subscription.
How people use it ¶
- B2B lead lists — feed a list of business Page URLs, get back emails, phones, and websites ready for outreach, pre-scored by activity.
- Local prospecting — pull ratings, addresses, and hours for businesses in a category or area.
- Influencer and brand research — exact follower counts, verification status, and cross-platform links for a shortlist.
- CRM enrichment — resolve a Facebook URL into a full contact record, including data pulled from the business's own website.
There's also a Python SDK (scrape(), scrape_one(), filter_by_tier(), filter_with_email(), and more) if you'd rather call it from code than run it from the console.
A note on responsible use ¶
The scraper reads publicly available business and Page metadata — the same information any visitor sees — and public business contact details. That's standard B2B research. Use it for legitimate outreach and market research, respect opt-outs, don't target private individuals for surveillance, and keep your outreach compliant with applicable laws (GDPR, CAN-SPAM) and Facebook's terms.
Bottom line ¶
If you need Facebook Page contact data for leads, the Facebook Profile Scraper turns a URL (or a whole list) into a clean, scored record — emails, phones, websites, ratings, and a ready outreach angle — with no login, in real time, for well under a cent per profile. Public data, structured and ready to work.
What field would make your Facebook lead workflow easier? Tell me and I'll look at adding it.