Facebook Profile Scraper API
Our Facebook profile scraper turns a public profile username or URL into structured JSON: the numeric id, the name, the about text, category, and profile image. Public-figure profiles served with an Open Graph block resolve logged-out, so a username like zuck returns a clean object in one request.
Getting Facebook Profile data is harder than it looks
Personal Facebook profiles are the most gated surface on the site: logged out, most return a bare app shell with no data, and the official Graph API cannot read a person's profile without that person's own login and granted permission. Public-figure and business profiles are the exception, because they still ship an Open Graph block a logged-out visitor can read.
Hit the Facebook Profile Scraper API with one request
curl "https://api.facebookscraperapi.com/api/v1/facebook/profile?username=zuck&api_key=$API_KEY" import requests
BASE = "https://api.facebookscraperapi.com"
API_KEY = "YOUR_API_KEY"
# Pass a username (zuck) or a full facebook.com/<username> URL.
data = requests.get(
f"{BASE}/api/v1/facebook/profile",
params={"username": "zuck", "api_key": API_KEY},
timeout=30,
).json()
print(data["id"], data["name"])
print(data["about"])
print(data["profile_image"])
print("source:", data["data_source"]) Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
username | required | - | The public profile username or vanity (the path segment in facebook.com/ |
url | optional | - | A full facebook.com/ |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
The Facebook Profile Scraper API output schema
{
"id": "4",
"username": "zuck",
"url": "https://www.facebook.com/zuck/",
"name": "Mark Zuckerberg",
"category": null,
"about": "Mark Zuckerberg. 121,483,067 likes \u00b7 1,883,118 talking about this. Bringing the world closer together.",
"profile_image": "https://scontent.fdac11-1.fna.fbcdn.net/v/t39.30808-1/632598281_10117314650513371_3238643608998008744_n.jpg",
"thumbnail": "https://scontent.fdac11-1.fna.fbcdn.net/v/t39.30808-1/632598281_10117314650513371_3238643608998008744_n.jpg",
"is_verified": null,
"source": "facebook",
"data_source": "opengraph"
} | Field | Type | Description |
|---|---|---|
id | string | The profile's numeric id, from the embedded entity or the app deep-link. For zuck this is 4. |
username | string | The profile vanity resolved from the input or the canonical URL. |
url | string | The canonical profile URL. |
name | string | The profile's display name. |
category | string | The category for public-figure or business profiles when exposed, otherwise null. |
about | string | The about or description text from the Open Graph block. For public figures it includes the likes and talking-about line. |
profile_image | string | URL of the profile picture. Also returned as thumbnail. |
is_verified | boolean | Verification flag when the embedded entity exposes it, otherwise null. |
data_source | string | How the fields were resolved: opengraph when read from the og block, relay-entity when an embedded entity was present. |
Build with Facebook data
Public-figure enrichment
Identity resolution
Profile image capture
Creator catalogs
Link verification
Cross-platform matching
Why teams ship on our Facebook Profile Scraper API
We force the request onto a US residential exit and read the name, about text, image, and numeric id straight from the profile's Open Graph block. For public-figure and business profiles that ship that block logged-out, you get a clean object in about 2.6 seconds with one API key. When only a shell or login wall is served, as personal profiles usually return, we fail with a clear diagnostic instead of guessing.
Username or URL input
Numeric id resolution
Residential routing built in
Honest wall handling
Data-source flag
Validated JSON schema
How the Facebook Profile Scraper API compares
| Our API | DIY (requests / headless) | Facebook Graph API | |
|---|---|---|---|
| Read a public-figure profile logged-out | Yes, when the og block renders | Possible but you fight the shell and wall | No, needs the person's own login and consent |
| Setup | API key only | Residential proxies, headless browser, parsers | Meta app plus user-granted permissions |
| Numeric id resolution | Returned | You parse it yourself | Available with granted permission |
| Anti-bot and proxies | Built in, US residential | You build and maintain it | Not applicable |
| Personal profiles | Honest diagnostic when walled | Usually a bare shell | Only with that user's consent |
| Output | Flat, validated JSON | Whatever you parse | Nested JSON you map yourself |
Pricing built for scale
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
A Facebook profile scraper reads a public profile's visible data and returns it in a structured format. Our Facebook profile scraper API takes a username or profile URL and returns the numeric id, name, about text, category, and profile image as JSON. It works best on public-figure and business profiles, which ship an Open Graph block a logged-out visitor can read.
Public-figure and business profiles that render an Open Graph block logged-out, like zuck, resolve cleanly. Personal profiles are the most gated surface on Facebook: logged out they usually return a bare app shell with no data, so the endpoint reports a clear diagnostic rather than inventing fields. We never fabricate a profile from a wall. For public-figure Pages specifically, the page endpoint returns richer counts.
The profile endpoint returns a single profile object (id, name, about, category, image) and is scoped to profiles at facebook.com/
No. You authenticate with a single facebookscraperapi key. The official Graph API cannot read a person's profile without that person logging in and granting your app permission, which is not workable for third-party data. Our endpoint reads the public Open Graph data a logged-out visitor sees on profiles that expose it, with no app review or consent flow.
We take it from the embedded page entity when present, and otherwise parse it from the app deep-link tags (the fb:// URL in the al:android:url or al:ios:url meta). That is how the sample resolves zuck to id 4. The numeric id is stable even when a profile changes its vanity username, so it is the safer key for your records.
Median end-to-end response is about 2.6 seconds, including US residential routing, anti-bot handling, and parsing. You are billed only for successful requests, and the free tier includes 1,000 requests so you can test which profiles resolve before paying.