Facebook Pages Scraper
Pricing
$3.50 / 1,000 results
Facebook Pages Scraper
Stop wasting your budget on slow, resource-heavy browser-based scrapers. This is the fastest, most cost-effective, and data-rich Facebook Pages scraper on Apify, designed for high-scale lead generation, reputation monitoring, and competitor research.
Pricing
$3.50 / 1,000 results
Rating
5.0
(2)
Developer
VortexData
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
2
Monthly active users
15 hours ago
Last modified
Categories
Share
π Facebook Pages Scraper
Extract public Facebook Page data β page details, posts, photos, videos, reels, reviews, and events β from one or more pages in a single run. No login, no cookies, no manual setup.
You give the Actor a list of Facebook page URLs. It returns one rich record per page that mirrors the well-known competitor scraper field-for-field, plus a few useful extras.
What does Facebook Pages Scraper do?
For every Facebook page you provide, the Actor returns a single dataset record that contains:
- π·οΈ Page details β title, page ID, handle, categories, intro, address, phone, email, website, hours, rating (% recommend + review count), follower / likes / following counts, profile photo, cover photo, page creation date, ad status, ad library id, linked Instagram, and more (β40 fields).
- π Recent posts β text, URL, publish timestamp, reactions / comments / shares counts, author, attached media.
- πΌοΈ Photos β IDs and CDN URLs for the most recent uploads.
- π₯ Videos β title-less videos with description, play count, publish time, permalink.
- ποΈ Reels β short-form video URLs with timestamps.
- β Reviews β public recommendations (when the page has any).
- π Events β upcoming and past events with names, URLs, and venues.
Each section is a nested array inside the main page record, so the dataset stays one row per URL β easy to filter, view, and export.
Why use this Actor?
- No credentials needed. It works fully anonymously β you don't have to share Facebook cookies, log in, or maintain session pools.
- One row per page. Drop-in compatible with the popular community Facebook Pages Scraper, so you can replace it without rewriting downstream code.
- All data types in a single run. No need to launch the Actor 8 times to collect everything.
- Fast. A typical page returns in 6β12 seconds on Apify Datacenter US, even with full extraction.
- Apify-native. Works with the standard
startUrlsinput format, dataset views, schedules, integrations, and REST API.
Common use cases
- Lead enrichment β pull contacts and rating signals for local-business pages.
- Reputation monitoring β track review counts and overall rating over time.
- Social-media tracking β collect recent posts, videos, and reels across competitor pages.
- Event monitoring β list upcoming and past events for venues, restaurants, or brands.
How to use it
- Open the Actor on Apify and switch to the Input tab.
- Paste one or more Facebook page URLs into Start URLs (each entry is a
{"url": "https://www.facebook.com/<handle>/"}object). You can also use the Page handles or IDs field with bare handles likecopperkettleyqror numeric page IDs β both formats are merged. - Pick Max items per page section (default 50) β it caps how many posts / photos / videos are kept per section. The page details object itself is always one per URL.
- (Optional) Toggle Parse all results to walk every section to the end. This is much slower and more expensive β use only when you really need the entire archive.
- Click Save & Start.
The Actor uses Apify Datacenter US Proxy internally β no configuration needed, no settings to tweak.
When the run finishes, open Storage β Dataset to view, filter, or export the results as JSON / CSV / Excel / XML / HTML.
Input
| Field | Type | Required | Description |
|---|---|---|---|
startUrls | array<{url}> | yesΒΉ | List of full Facebook page URLs. Each entry is {"url": "https://www.facebook.com/<handle>/"}. |
urls | array<string> | yesΒΉ | Alternative input β accepts handles (copperkettleyqr) or numeric IDs (100064027242849). |
maxResults | integer | no | How many items per section to keep (default 50, max 10000). |
parseAllResults | boolean | no | Paginate every section to the end (default false). |
ΒΉ At least one of startUrls or urls must contain a value.
Example β minimal input
{"startUrls": [{ "url": "https://www.facebook.com/copperkettleyqr/" }]}
Example β multiple pages with a tighter cap
{"startUrls": [{ "url": "https://www.facebook.com/copperkettleyqr/" },{ "url": "https://www.facebook.com/Microsoft/" }],"urls": ["100064027242849"],"maxResults": 20}
Output
One record per input URL is pushed to the default Apify dataset. Top-level keys are the page-level fields; per-section content lives in nested arrays.
Sample (truncated)
{"type": "page","facebookUrl": "https://www.facebook.com/copperkettleyqr/","pageUrl": "https://www.facebook.com/copperkettleyqr/","pageId": "100064027242849","facebookId": "100064027242849","pageName": "copperkettleyqr","displayName": "The Copper Kettle Restaurant","title": "The Copper Kettle Restaurant | Regina SK","intro": "Longstanding local restaurant. Mediterranean specialties...","info": ["The Copper Kettle Restaurant, Regina. 3,212 likes","39 talking about this","1,136 were here. Longstanding local restaurant..."],"categories": ["Page", "Pizza place"],"category": "Pizza place","likes": 3212,"followers": 3212,"followings": 341,"talking_about": 39,"were_here": 1136,"rating": "94% recommend (202 Reviews)","ratings": "94% recommend (202 Reviews)","ratingOverall": 94,"ratingCount": 202,"phone": "+1 306-525-3545","email": "copperkettle.events@gmail.com","website": "http://www.thecopperkettle.online/","websites": ["https://www.bing.com/maps/...","https://www.instagram.com/copperkettleyqr","http://www.thecopperkettle.online/"],"alternativeSocialMedia": "https://www.instagram.com/copperkettleyqr","instagram": [{"username": "copperkettleyqr", "url": "https://www.instagram.com/copperkettleyqr"}],"address": "1953 Scarth Street, Regina, SK, Canada, S4P 2H1","addressUrl": "https://www.bing.com/maps/...","services": "Outdoor seating","business_services": "Outdoor seating","priceRange": "$$","business_price": "Price Range Β· $$","business_hours": "Open now","creation_date": "October 29, 2014","ad_status": "This Page is currently running ads.","pageAdLibrary": {"id": "851606664870954", "pamv_comms_data": null},"profilePictureUrl": "https://lookaside.fbsbx.com/lookaside/crawler/media/?media_id=100064027242849","profilePhoto": "https://www.facebook.com/photo/?fbid=...&set=a....","coverPhotoUrl": "https://lookaside.fbsbx.com/lookaside/crawler/media/?media_id=...","verified": false,"posts": [{"type": "post","post_id": "1259602942850602","url": "https://www.facebook.com/copperkettleyqr/posts/...","message": "THE SASKATCHEWAN ROUGHRIDERS WIN THE 112TH GREY CUP! π","timestamp": 1763349499,"reactions_count": 10,"comments_count": 0,"reshare_count": 1,"author": {"id": "100064027242849", "name": "...", "url": "..."},"media": ["https://lookaside.fbsbx.com/..."]}],"photos": [ /* β¦ */ ],"videos": [ /* β¦ */ ],"reels": [ /* β¦ */ ],"past_events":[ /* β¦ */ ],"scraped_at": "2026-05-09T08:12:34.567+00:00"}
If a section has zero records (e.g. the page has no public reviews), that key is omitted from the record entirely β keeping the JSON tight.
Pricing and runtime
The Actor is billed per Apify compute unit + Apify Proxy traffic β there are no per-result fees declared by the Actor itself. Internally the Actor uses Apify Datacenter US Proxy, the cheapest pool, which gives sub-second per-request latency for Facebook.
Typical runtime per URL:
| Workload | Wall-clock |
|---|---|
1 page, default maxResults=50 | ~6β12 seconds |
| 100 pages, default | ~10β20 minutes (sequential per page, 8 sections concurrent within each) |
parseAllResults=true on a busy page | minutes per page (depends on FB's pagination depth) |
Each request rotates through a fresh exit IP, so you don't have to pre-provision sticky sessions.
How it works (under the hood)
- Resolve every input URL / handle / numeric id to a canonical Facebook page URL.
- For each page, fetch up to three Facebook endpoints concurrently:
/about/(page metadata),/about_profile_transparency/(page creation date, ad status), and the page root/(profile photo viewer URL). - For listing sections (posts, photos, videos, reels, reviews, future events, past events) fetch each section URL in parallel.
- Parse the embedded GraphQL JSON inside the HTML, extract structured records, and merge per-page results into one aggregate record.
- Strip empty arrays and
nullfields, then push exactly one polished record per URL to the dataset.
The Actor uses curl_cffi with Chrome TLS impersonation and the facebookexternalhit/1.1 user-agent β the same combination Facebook uses internally for link-preview crawling β which lets it pull rich page data without any authentication.
Tips and best practices
- Keep
maxResultssmall (the default 50 is usually enough) when first testing the Actor on new pages. - Avoid
parseAllResults=trueunless you really need every post β busy pages with thousands of items will run for many minutes per page. - Run on a schedule for monitoring: the Apify Console lets you trigger this Actor every X hours and pipe new dataset items into webhooks, integrations, or your own infrastructure.
FAQ
Does this Actor scrape personal Facebook profiles or Groups?
No. It is for public Pages only. URLs that match /groups/ or personal profile.php profiles are rejected at validation.
Why are some fields like past_events[*].timestamp null?
Facebook's anonymous bundle does not ship every field for every record. We fill what FB serves; missing fields are omitted entirely from the output to keep records clean. To collect the missing fields you would need an authenticated session β out of scope for this Actor.
Can I provide just a page handle without the full URL?
Yes. Use the Page handles or IDs input field for bare handles (copperkettleyqr) or numeric IDs (100064027242849).
The locale of the output isn't English.
Facebook localises page output by the geo of the exit IP. The Actor pins the internal proxy to a United States exit so you always receive native en-US output (Reviews capitalised, $$ price symbols, mkt=en-US in map links).
Is this legal? You are responsible for using this Actor in compliance with applicable laws, Facebook's terms, and the rules of your specific use case. Only collect and use data you are allowed to process.
Run programmatically
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("your-username/facebook-pages").call(run_input={"startUrls": [{"url": "https://www.facebook.com/copperkettleyqr/"}],"maxResults": 50,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('your-username/facebook-pages').call({startUrls: [{ url: 'https://www.facebook.com/copperkettleyqr/' }],maxResults: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(console.log);
CLI
echo '{"startUrls":[{"url":"https://www.facebook.com/copperkettleyqr/"}]}' \| apify call your-username/facebook-pages --silent --output-dataset
Support
Open an Issue on the Actor's Apify page if you spot a bug, want a new field added, or have a custom-version request.