Facebook Page scraper API: likes, followers and bio as JSON

A Facebook Page scraper API that returns a public Page's name, bio, image, likes, followers and talking-about count as JSON for 1 credit. No posts.

By Scrape Everything team · · 11 min read

Last updated: October 21, 2026

TL;DR: The Scrape Everything Facebook Page scraper API takes a Page username, numeric ID or facebook.com URL and returns the Page's name, bio, profile image, like count, follower count and talking-about count as JSON, for 1 credit per lookup. It reads public Page metadata only. It does not return posts, comments or anything behind a Facebook login.

That's the whole Facebook product, and we'd rather tell you now than after you sign up. Need Page sizes for a lead list or a competitor sheet? One HTTP call per Page. Need a Page's posts? You want Meta's Graph API; there's a section below on when to switch.

What does the Facebook Page scraper API return?

A Facebook Page scraper API returns the public metadata of Facebook Pages and profiles (name, bio, image and Page counts) as JSON from a Page username.

Ours is a synchronous REST endpoint: you POST a username and get the JSON back in the same response, with no job to start and no dataset to poll. It reads the Open Graph tags (og:title, og:image, og:url, og:description) on the public Page preview, the same tags apps read to build a link preview. Every uncached call fetches the Page live. If you pass cache_days, a repeat lookup inside that window (up to 14 days) is served from cache for free.

You get eight fields:

FieldTypeCan be null?What it is
usernamestringNoEcho of the vanity name or ID you sent
namestringNoPage or profile name (og:title)
like_countintegerYesPage likes
follower_countintegerYesPage followers
talking_about_countintegerYes"People talking about this"
biostringNoDescription text, empty string if there is none
profile_urlstringNoCanonical URL (og:url) or a constructed one
profile_image_urlstringYesProfile image (og:image)

The counts are nullable for a reason: they exist for public Pages only. Personal profiles usually sit behind Facebook's login wall, and when one is visible to logged-out visitors you get the name, bio and image with null counts.

What it doesn't return:

  • Posts, reels, photos or videos
  • Comments or reactions
  • Page admin data, ad data or Insights
  • Anything from Groups, Events or Marketplace
  • Pages that require a login to view

How do I get a Facebook Page's likes and followers from a username?

One POST request, 1 credit. The username parameter accepts a vanity name (example_brand), a numeric Page ID, or a full https://www.facebook.com/... URL, so you can paste whatever your spreadsheet already has.

  1. Create an account at /login with Google or GitHub. New accounts get 100 free credits, no payment details needed.
  2. Copy your API key (it starts with ssk_live_) and export it as SCRAPEEVERYTHING_API_KEY.
  3. Send a POST to https://api.scrapeeverything.com/v1/facebook/profile with a JSON body containing username.
  4. Read data.like_count, data.follower_count and data.talking_about_count, and check meta.credits_charged if you track spend.

cURL

bash
curl -X POST https://api.scrapeeverything.com/v1/facebook/profile \
  -H "Authorization: Bearer $SCRAPEEVERYTHING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"username": "example_brand"}'

Response (trimmed)

json
{
  "success": true,
  "data": {
    "username": "example_brand",
    "name": "Example Brand",
    "like_count": 18450,
    "follower_count": 21300,
    "talking_about_count": 312,
    "bio": "Handmade ceramics from a small studio. Shipping worldwide.",
    "profile_url": "https://www.facebook.com/example_brand",
    "profile_image_url": "https://scontent.xx.fbcdn.net/v/t39.30808-1/placeholder.jpg"
  },
  "meta": {
    "request_id": "req_placeholder123",
    "scraper": "facebook.profile",
    "cached": false,
    "cached_at": null,
    "credits_charged": 1,
    "credits_remaining": 99
  }
}

The values are placeholders; the shape is real. Full field docs are on the Facebook endpoint reference.

Are the follower counts exact or rounded?

Exact. Facebook writes the counts into the preview's description as full numbers with thousands separators, not as "21K", and we convert that text to an integer. If a count isn't there in that form, the field comes back null. We'd rather hand you a null than a guess.

What's the difference between likes and followers?

A like is the older "fan" relationship; a follow puts the Page in someone's feed. Meta has been folding them together: its Graph API Page reference says that for Pages on the New Pages Experience, fan_count returns followers_count. So don't be surprised when the two numbers match. If you only store one, store follower_count.

How do I enrich a list of brand Pages with follower counts?

This is the job we built it for. You have a CSV of companies (a trade show list, a CRM export) with a Facebook URL column, and you want to know which ones have an audience worth talking to.

This script reads pages.csv, calls the API for each row and writes pages_enriched.csv. It needs requests and nothing else.

python
import csv
import os
import time

import requests

API_URL = "https://api.scrapeeverything.com/v1/facebook/profile"
HEADERS = {
    "Authorization": f"Bearer {os.environ['SCRAPEEVERYTHING_API_KEY']}",
    "Content-Type": "application/json",
}
FIELDS = ["name", "like_count", "follower_count", "talking_about_count", "bio", "profile_url"]


def lookup(page: str, attempts: int = 3) -> dict:
    for attempt in range(attempts):
        # cache_days=7: re-running the script within a week costs 0 credits per cached Page
        resp = requests.post(
            API_URL,
            headers=HEADERS,
            json={"username": page, "cache_days": 7},
            timeout=90,  # we retry through other proxies server side, so give it time
        )
        if resp.status_code == 429:
            # RateLimit-Reset is the number of seconds until the window resets
            time.sleep(int(resp.headers.get("RateLimit-Reset", 10)))
            continue
        try:
            body = resp.json()
        except ValueError:
            body = {}
        if body.get("success"):
            return {k: body["data"].get(k) for k in FIELDS}
        if resp.status_code in (502, 503, 504) and attempt < attempts - 1:
            time.sleep(2 ** attempt)  # one short backoff, then accept the answer
            continue
        return {"error": body.get("code", str(resp.status_code))}
    return {"error": "RATE_LIMITED"}


with open("pages.csv", newline="", encoding="utf-8") as src, \
     open("pages_enriched.csv", "w", newline="", encoding="utf-8") as dst:
    reader = csv.DictReader(src)  # expects a column named facebook_url
    writer = csv.DictWriter(dst, fieldnames=reader.fieldnames + FIELDS + ["error"])
    writer.writeheader()
    for row in reader:
        row.update(lookup(row["facebook_url"]))
        writer.writerow(row)

Before you run it:

  • Don't parse the URL yourself. The endpoint accepts the full facebook.com URL, so pass the column straight through.
  • Keep the error column. A row that came back TARGET_BLOCKED tells you something: the Page doesn't exist or isn't visible without a login. For lead scoring, that's a signal in itself.
  • Read talking_about_count next to followers. Our rule of thumb: 40,000 followers and a talking-about count near zero means an audience with nobody posting to it.
  • The script runs one request at a time on purpose. Limits apply to your whole account, and every key shares them. The defaults at the time of writing are 60 requests per minute and 5 concurrent until your purchases total $39 (a Builder pack or larger does it at once), then 300 per minute and 20 concurrent. The rate limits page always has the live numbers.

Got Instagram handles in the same sheet? Same key, same request style: see the analytics and CRM enrichment use case and our guide to scraping Instagram profiles with an API.

How do I compare competitor Facebook Page sizes over time?

The second common job: track 10 to 50 competitor Pages every week and chart follower growth. The API returns a snapshot, so the history is yours to keep. Run a job on a schedule, append one row per Page per run with a date, and the trend falls out of the data.

Here's the Node version (Node 18+, built-in fetch, no dependencies):

javascript
const pages = ["example_brand", "rival_brand", "another_rival"];

async function snapshot(page) {
  const res = await fetch("https://api.scrapeeverything.com/v1/facebook/profile", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.SCRAPEEVERYTHING_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ username: page }),
    signal: AbortSignal.timeout(90_000),
  });
  const { success, data, code } = await res.json().catch(() => ({}));
  if (!success) return { page, error: code ?? `HTTP ${res.status}` };
  return {
    page,
    date: new Date().toISOString().slice(0, 10),
    followers: data.follower_count,
    likes: data.like_count,
    talking_about: data.talking_about_count,
  };
}

// one at a time, so a longer list stays inside your account's concurrency limit
const rows = [];
for (const page of pages) rows.push(await snapshot(page));
console.table(rows);

Save it as snapshot.mjs so top-level await works, then run node snapshot.mjs. Rather not babysit a cron job? Build it as an n8n workflow with the n8n-nodes-scrapeeverything node. Agencies running this for clients will find more in the agencies use case.

No cache_days here, on purpose: trend tracking wants live numbers. For enrichment a week-old count is fine, so caching saves credits. See the caching docs.

Can I still get fan_count from the Graph API without a token?

No. Every Graph API call needs an access token. For a published Page you don't manage, Meta's Page reference lists an app or user access token combined with the Page Public Content Access or Page Public Metadata Access feature, and it says reads of fan_count can use either one. The pages_read_engagement permission doesn't get you there, because it only covers data owned by Pages you manage. Meta's Page Public Content Access documentation adds that the feature needs App Review and business verification before your app can read live data.

If your old tokenless fan_count request stopped working, this is why. Our endpoint needs only a Scrape Everything key.

When should I use Meta's Graph API instead?

For a lot of jobs, Meta's API is the right tool. For Pages you manage, it has data we can't see.

You needUse
Name, bio, image, likes, followers of any public PageScrape Everything facebook.profile (1 credit)
A quick enrichment pass over Pages you don't ownScrape Everything
Posts, comments or reactions from a PageGraph API
Insights, reach or ad data for your own PageGraph API (only Meta has this)
Publishing posts or replying to messagesGraph API
No Meta app, no App Review, no token refreshScrape Everything

So is this a Graph API alternative? For Page metadata lookups, yes. For anything else, no. We made the same argument for Instagram in Instagram Graph API vs a scraper API, and the reasoning carries over.

How does Scrape Everything compare with Apify and Bright Data for Facebook Pages?

These are the two other names you'll meet in this search, and both cover far more websites than we do. Figures are from their pricing pages, checked October 22, 2026. Prices change, so confirm on their sites.

Scrape EverythingApifyBright Data
Pricing modelOne-time credit packs, credits never expireMonthly platform plan with prepaid usage, plus per-Actor pricingPay as you go per record, or monthly plans
Entry price (list price; credits, usage and records aren't the same unit)$39 for 25,000 creditsFree plan with $5 of usage per month; Starter $19 per month$1.50 per 1,000 records pay as you go (Web Scraper API)
Free tier100 credits on signup, no payment details$5 of platform usage per month5,000 records per month
How you get dataOne synchronous call, JSON in the responseRun an Actor, then read its datasetSee their docs
Pick it whenYou want Page metadata from one call at a flat 1 creditYou need sites beyond social media, or scheduling and storage built inYou need enterprise contracts, datasets or proxy infrastructure

Product names are trademarks of their owners; we are not affiliated with them. Figures from each vendor's public pricing page, verified October 22, 2026. Spot an error? Email [email protected] and we correct it.

On Apify, scrapers are Actors, many built by third parties, each with its own price and output. Need fields we don't return? Check that Actor's listing. Our full write-ups are at Scrape Everything vs Apify and Scrape Everything vs Bright Data.

What can't a Facebook Page scraper API get?

LimitWhat happens
Metadata onlyNo posts, comments, reactions, photos or videos. The data comes from the public Page preview.
Eight fieldsNo category, contact details or creation date. What's in the table above is all there is.
Counts for public Pages onlyPersonal profiles and some Page types return null for the three counts.
No login-gated PagesIf Facebook shows a Page only to signed-in users, we can't read it.
Missing and gated Pages return 502, not 404Both come back as 502 TARGET_BLOCKED, and you're not charged.
Snapshot, not historyEach call returns current numbers. Keep your own time series.
UnofficialScrape Everything is not affiliated with or endorsed by Meta. Public data only, as a logged-out visitor sees it.

The 502 is the one that trips people up. A logged-out visitor can't reliably tell a deleted Page from one behind a login, and neither can we, so we don't guess. Before you see that error we've already retried through other proxies. Here's the response:

json
{
  "success": false,
  "message": "Facebook public data unavailable (login wall or private/non-existent profile)",
  "code": "TARGET_BLOCKED",
  "request_id": "req_placeholder456",
  "meta": { "credits_charged": 0, "credits_remaining": 99 }
}

Retry once with backoff (the Python script does), then treat the Page as gone or gated. Failed requests aren't charged, so a list full of dead Pages costs nothing. The full table of status codes is on the errors page.

We read only what a Page owner chose to show logged-out visitors. That doesn't settle every question. Personal profiles are personal data under laws like the GDPR, so if you store them you need a lawful basis. For most lead-gen work, stick to Pages. Meta's Terms of Service also restrict automated data collection, which is a contract question separate from access law. We're not your lawyer. Our post on whether scraping public social media data is legal walks through what to think about.

How much does it cost to look up Facebook Pages?

Every Facebook Page lookup is 1 credit. Credits come in one-time packs that never expire.

PackPriceCreditsCost per 1,000 Page lookups
Builder$3925,000$1.56
Growth$119100,000$1.19
Scale$449500,000$0.90

Two worked examples from those prices:

JobCreditsPack that covers it
Enrich 10,000 trade-show leads once10,000Builder ($39) covers it and leaves 15,000 for re-runs. Re-running within 7 days with cache_days: 7 costs 0.
Track 50 competitor Pages weekly for a yearAbout 2,600Builder ($39) covers it about nine times over

Cache hits are free, and failures on our side (blocks, timeouts, 5xx) are refunded automatically. Payment is crypto only. The pricing calculator works out a pack from a monthly volume, and pricing has the full breakdown, including Enterprise for 1M+ credits.

One key covers all nine platforms: Facebook, Instagram, TikTok, X, YouTube, Telegram, Spotify, Pinterest and Twitch. Prefer asking Claude "how many followers does this Page have?" to writing a script? Use the MCP server (@scrapeeverything/mcp). Endpoints are listed in the OpenAPI spec and on the Facebook scraper page.

FAQ

Can I get Facebook posts or comments with this API?

No. The Facebook endpoint returns Page and profile metadata only: name, bio, image and, for Pages, like, follower and talking-about counts. For posts and comments, use Meta's Graph API.

Do I need a Facebook developer app or access token?

No. You only need a Scrape Everything API key, sent as Authorization: Bearer ssk_live_.... There's no Meta app, App Review or token refresh involved.

What's the difference between like_count and follower_count?

like_count is the number of people who liked the Page, and follower_count is the number who follow it. Meta's Graph API now returns followers for fan_count on New Pages Experience Pages, so the two often match. If you store one, store follower_count.

Why did a Page return 502 TARGET_BLOCKED instead of 404?

From the logged-out side, a Page that doesn't exist and a Page that requires a login look the same, so the API doesn't guess. Both return 502 TARGET_BLOCKED, and you're not charged for either.

Does it work for personal Facebook profiles?

Partly. Most personal profiles sit behind Facebook's login wall and return TARGET_BLOCKED. When one is visible to logged-out visitors, you get its name, bio and image, but the count fields are null. Counts are available for public Pages only.


Run the cURL example on your own list of Pages: Get 100 free credits.

More from the blog

Start with 100 free credits.

Continue with Google, create an API key and send your first request in under a minute.

Get 100 free credits