DEV Community

ApiVault Labs
ApiVault Labs

Posted on

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[] + primaryEmail
  • phones[] + primaryPhone
  • websites[] + primaryWebsite
  • bestContact: { 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) with activityScoreReasons[]
  • activityTier — small / growing / established / major
  • recommendations[] and an outreachPitch

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. vs www, locale variants) and output is deduped by facebookId, 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.

Top comments (0)