Facebook Pages Scraper avatar

Facebook Pages Scraper

Pricing

$3.50 / 1,000 results

Go to Apify Store
Facebook Pages Scraper

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

VortexData

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

15 hours ago

Last modified

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 startUrls input 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

  1. Open the Actor on Apify and switch to the Input tab.
  2. 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 like copperkettleyqr or numeric page IDs β€” both formats are merged.
  3. 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.
  4. (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.
  5. 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

FieldTypeRequiredDescription
startUrlsarray<{url}>yesΒΉList of full Facebook page URLs. Each entry is {"url": "https://www.facebook.com/<handle>/"}.
urlsarray<string>yesΒΉAlternative input β€” accepts handles (copperkettleyqr) or numeric IDs (100064027242849).
maxResultsintegernoHow many items per section to keep (default 50, max 10000).
parseAllResultsbooleannoPaginate 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:

WorkloadWall-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 pageminutes 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)

  1. Resolve every input URL / handle / numeric id to a canonical Facebook page URL.
  2. 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).
  3. For listing sections (posts, photos, videos, reels, reviews, future events, past events) fetch each section URL in parallel.
  4. Parse the embedded GraphQL JSON inside the HTML, extract structured records, and merge per-page results into one aggregate record.
  5. Strip empty arrays and null fields, 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 maxResults small (the default 50 is usually enough) when first testing the Actor on new pages.
  • Avoid parseAllResults=true unless 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 ApifyClient
client = 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.