Facebook Pages Scraper - Public Page Data, $0.10/1k
Pricing
from $0.10 / 1,000 facebook pages
Facebook Pages Scraper - Public Page Data, $0.10/1k
A public Facebook Page is about 4.5 MB of HTML, and every field here sits in the first 1.6 KB of it. One row per Page: name, handle, canonical URL, description, like and talking-about counts, verified badge, preview image. 10 Page URLs a run, about $0.60 per 1,000.
Pricing
from $0.10 / 1,000 facebook pages
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Facebook Pages Scraper
A public Facebook Page is about 4.5 MB of HTML, and every field this Actor wants sits in the first 1.6 KB of it, so a run reads the head of the document and drops the connection there. Public Page URLs go in, and you get back one row per Page with the name, the handle, the canonical Page URL, the public description, the like count, the talking-about count, the verified badge and the preview image.
You don't supply a login. The Actor reads the metadata Facebook publishes to crawlers — the same block a link preview is built from — so everything here is what a logged-out visitor sees.
It is a small, cheap enrichment step, not a bulk harvester: a run takes at most 10 Page URLs. Plan around that before you point a list of 5,000 at it.
What a row looks like
{"ok": true,"recordType": "page","name": "NASA - National Aeronautics and Space Administration","handle": "NASA","pageUrl": "https://www.facebook.com/NASA/","description": "NASA - National Aeronautics and Space Administration. 28,711,827 likes · 141,204 talking about this. Explore the universe and discover our home planet.","likesCount": 28711827,"talkingAboutCount": 141204,"imageUrl": "https://lookaside.fbsbx.com/lookaside/crawler/media/?media_id=100044561550831","imageAlt": "NASA - National Aeronautics and Space Administration","category": null,"isVerified": true,"source": "facebook_crawler_metadata","requestedUrl": "https://www.facebook.com/NASA/","transport": "direct_http"}
| Field | Notes |
|---|---|
ok | true on a real Page row, false on a diagnostic. |
recordType | page or diagnostic. Filter on this rather than guessing from the shape. |
name | The Page's public display name. |
handle | The vanity handle from the URL, e.g. NASA. |
pageUrl | Canonical https://www.facebook.com/<handle>/ form, normalised from whatever you pasted. |
description | The public description Facebook exposes to crawlers. It usually repeats the like and talking-about counts as text. |
likesCount | Integer, or null when Facebook omits it for that Page. |
talkingAboutCount | Integer, or null when Facebook omits it. |
isVerified | Whether the Page carries a blue badge. |
imageUrl, imageAlt | Preview image and its alt text. The Actor never downloads the image itself. |
category | Present in the schema, but Facebook does not put the category in this metadata block, so in practice it is null. It is there so an existing pipeline keeps parsing, not because it carries data. |
requestedUrl | The normalised URL this row was fetched from, so you can join back to your input. |
transport | Always direct_http — no headless browser is involved. |
Missing values stay null. The Actor doesn't substitute a guess, and it doesn't emit a Page row at all when the public page can't be validated.
Input
{"pageUrls": ["https://www.facebook.com/NASA","https://www.facebook.com/nike"]}
| Field | What it does |
|---|---|
pageUrls | Public Page URLs. Up to 10 per run. De-duplicated after normalising, so facebook.com/NASA, www.facebook.com/NASA/ and facebook.com/NASA?ref=x count as one Page and are charged once. |
proxyConfiguration | Leave it on. See the next section — with the proxy off, this Actor mostly returns diagnostics. |
sessionCookies | Optional. Your own Facebook cookie as c_user=<value>; xs=<value>, one line per account, used only if the logged-out reads come back walled. Treat it like a password: anyone holding it can act as that account. |
Leave pageUrls empty and you get one clearly labelled, uncharged sample row.
Why the proxy is on by default
Facebook answers the shared address a plain cloud run goes out on with a login interstitial rather than the public metadata. Measured on 2026-08-21, the same ten well-known Pages, minutes apart:
| Route | Genuine rows |
|---|---|
| The platform's own address | 0 / 10 |
| Rotating Apify datacenter addresses | 10 / 10 |
The metadata never stopped being public — the same request from an ordinary address returns NASA's live like and talking-about counts. It's an address-reputation problem and nothing else, which is why runs go out through rotating datacenter addresses with a fresh session per Page. You can disable it, and the run warns you that it will probably return nothing but diagnostics.
Each Page gets two logged-out attempts from two different addresses, because a burnt address hands back the same login wall whatever it asks for and a second look is what separates "this Page has no public metadata" from "that address is spent". If both fail, the Actor tries once more with an account session — yours from sessionCookies if you supplied one, otherwise the one that ships with the Actor.
Residential proxy is never used, so no per-gigabyte transfer can turn a large run into a loss. The Actor never downloads images.
Diagnostic codes
Every failure is a row, never a silent gap. code is one of BAD_INPUT (not a facebook.com Page URL, or a reserved path such as /groups, /watch, /marketplace, /events), NOT_FOUND, BLOCKED, RATE_LIMITED, NETWORK, TARGET_ERROR, or NO_RESULTS when the Page loads but exposes no current crawler metadata. Diagnostic rows carry _uncharged: true, so a pipeline can assert on it.
Scope and limits
- 10 Page URLs per run. That's the hard cap.
- Public Pages only. Groups, Marketplace, Events, individual posts and personal profiles are out of scope on purpose.
categoryis always null. See the field table.- Facebook can omit the counts or change what it publishes anonymously. Missing data stays
null, and no Page row is emitted where the page itself can't be validated. - This returns Page-level identity and headline numbers. Posts, reviews, ads and contact details are separate Actors.
Pricing
$0.10 per 1,000 Pages ($0.0001 each), plus $0.001 per run start and $0.004 once per run that accepts at least one valid Page URL.
| Charge | Amount | When |
|---|---|---|
| Run start | $0.001 | Every run, including sample and invalid-only runs. |
| Valid run | $0.004 | Once, after at least one Page URL passes validation. |
| Facebook Page | $0.0001 | Once per genuine Page row returned. |
Ten Pages in one run is $0.001 + $0.004 + (10 × $0.0001) = $0.006. Because the run cap is 10, the per-run fees dominate: 1,000 Pages means 100 runs and works out at about $0.60 all in, not $0.10. That's the honest number to budget against.
A run whose input is entirely invalid never reaches the valid-run charge and costs only the $0.001 start fee. Blocked pages, rate-limited pages and every other diagnostic add no per-page charge.
Use public data in accordance with applicable law and Facebook's terms.


