# Facebook Page Reviews Scraper (`parsebird/facebook-reviews-scraper`) Actor

Scrape Facebook Page reviews and recommendations: recommends or not, review text, date, reviewer, tags, reactions, photos, comments and replies. Pages by handle, URL or ID; date filter. No login. Export JSON, CSV, Excel.

- **URL**: https://apify.com/parsebird/facebook-reviews-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 1 total users, 0 monthly users, 62.5% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Facebook Page Reviews Scraper

Facebook Page Reviews Scraper collects the reviews (recommendations) of public [Facebook](https://www.facebook.com) Pages: whether each person recommends the Page or not, the review text, date, reviewer, tags such as "Delicious pastries", reactions, photos, and the comments and replies under each review.

<table><tr>
<td style="border-left:4px solid #1877F2;padding:12px 16px;font-weight:600">
Add Pages by handle, URL, reviews link, or ID and get every public review with its recommend or not-recommend status, text, tags, reactions, photos, and the business's replies in the comments, filtered by date, with no Facebook login.
</td>
</tr></table>

<br>

<table>
<tr>
<td colspan="3" style="padding:10px 14px;background:#1877F2;border:none;border-radius:4px 4px 0 0">
<span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">ParseBird Facebook Suite</span>
<span style="color:#D8E6FD;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Pages, posts, groups, reviews &amp; media</span>
</td>
</tr>
<tr>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-user-posts-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook User Posts Scraper</a><br>
<span style="color:#78716C;font-size:11px">Posts from profiles and Pages</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-page-video-downloader" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Page Video Downloader</a><br>
<span style="color:#78716C;font-size:11px">Every video on a Page, MP4 links</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-media-downloader" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Media Downloader</a><br>
<span style="color:#78716C;font-size:11px">HD/SD links for videos, reels, photos</span>
</td>
</tr>
<tr>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-group-posts-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Public Group Posts Scraper</a><br>
<span style="color:#78716C;font-size:11px">Posts from public groups</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-group-profile-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Group Profile Scraper</a><br>
<span style="color:#78716C;font-size:11px">Members, activity, admins, rules</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;border-top:none;vertical-align:top;width:33%;background:#E7F0FE">
<a href="https://apify.com/parsebird/facebook-reviews-scraper" style="color:#1877F2;text-decoration:none;font-weight:700;font-size:13px">Facebook Page Reviews Scraper</a><br>
<span style="color:#1877F2;font-size:11px;font-weight:600">You are here</span>
</td>
</tr>
</table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```text
Use Apify Actor parsebird/facebook-reviews-scraper to scrape reviews (recommendations) of public Facebook Pages. Example with ApifyClient (Python): client.actor("parsebird/facebook-reviews-scraper").call(run_input={"pageTargets":["portosbakery"],"maxRecommendationsPerPage":50,"dateFrom":"6 months ago"}). Inputs: pageTargets array of strings required (handles like portosbakery, Page URLs, /reviews URLs, profile.php?id= links, or numeric Page IDs; up to 100; the same Page entered twice is scraped once); maxRecommendationsPerPage integer optional (per Page; empty = all); maxRecommendations integer optional (whole run; empty = no limit); dateFrom string optional (YYYY-MM-DD or relative like "7 days ago", "3 months"); maxRepliesPerComment integer default 0 (replies per comment; 0 = no replies; comments are always included). Output: one row per review, newest first: recommendationId, recommendationUrl, createdAt (ISO 8601), recommendationStatus (recommends | doesNotRecommend), text, page {id, name, url, imageUrl}, reviewer {id (numeric only), name, url, profilePictureUrl}, tags [string], reactionCount, reactions [{type, count}], commentCount (comments and replies), shareCount, media [{id, type, url, thumbnailUrl, width, height}], comments [{id, text, createdAt, url, author {id, name, url, profilePictureUrl}, reactionCount, replyCount, media, replies [same shape]}]. Fields Facebook doesn't show are left out. API docs: https://docs.apify.com/api/client/python/ and https://docs.apify.com/api/client/js/. Token: https://console.apify.com/account/integrations.
```

### What is Facebook Page Reviews Scraper?

**Facebook Page Reviews Scraper** is a **Facebook reviews scraper** for public business Pages. Facebook replaced star ratings with **recommendations**: each reviewer says whether they **recommend** the Page or **don't recommend** it, writes a review, and can pick tags like "Great service". This actor collects all of that, along with the **reviewer**, **date**, **reactions**, **photos**, and the **comments and replies** under each review, which often include the business's own response.

You don't need a Facebook account, cookies, or an API key. The easiest way to try it is to open the actor, keep the prefilled `portosbakery` Page, and click **Start**. The prefilled run saves 10 reviews in a few seconds.

### What can Facebook Page Reviews Scraper do?

- ⭐ **Scrape Facebook reviews** from any public Page that shows reviews, newest first.
- 👍 **See recommends vs. doesn't recommend** for every review in `recommendationStatus`.
- 🏷️ **Get review tags** that reviewers picked, such as "Delicious pastries" or "Large menu".
- 💬 **Read comments and replies**: the comments under each review are included, and you can add up to N replies per comment.
- 📅 **Filter by date** with a calendar date or a relative date such as "7 days ago" or "3 months".
- 📦 **Scrape many Pages at once** with a per-Page limit and a run-wide limit.
- ⏱️ **Automate** with [Apify schedules](https://docs.apify.com/platform/schedules), the [Apify API](https://docs.apify.com/api/v2), webhooks, and [integrations](https://apify.com/integrations) such as Google Sheets, Make, Zapier, and Slack.
- 📁 **Export** results as JSON, CSV, Excel, HTML, or XML.

### What data can you extract from Facebook reviews?

| Field | Description |
|-------|-------------|
| `recommendationStatus` | `recommends` or `doesNotRecommend` |
| `text`, `tags` | Review text and the tags the reviewer chose |
| `createdAt` | Publish time in ISO 8601 (UTC) |
| `recommendationId`, `recommendationUrl` | Facebook's ID for the review and a link to it |
| `reviewer` | Name, profile link, picture, and numeric ID when Facebook shows one |
| `page` | The Page's ID, name, URL, and image |
| `reactionCount`, `reactions` | Total reactions and counts by type |
| `commentCount`, `shareCount` | Comments (including replies) and shares |
| `media` | Photos attached to the review |
| `comments` | Comments with text, date, author, reactions, reply count, and optional `replies` |

### How to scrape Facebook Page reviews

1. Open [Facebook Page Reviews Scraper](https://apify.com/parsebird/facebook-reviews-scraper) and click **Try for free** or **Start**.
2. In **Facebook Pages**, add handles, Page URLs, reviews URLs, or Page IDs, one per line.
3. Set **Max reviews per Page** and **Max reviews in total**, or leave them empty to collect everything.
4. Optionally set **Reviews newer than** and **Max replies per comment**.
5. Click **Start**, then open the **Output** tab or export the results as JSON, CSV, or Excel.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `pageTargets` | array of strings | **Yes** | — | Page handles, URLs, reviews URLs, or numeric IDs, up to 100 |
| `maxRecommendationsPerPage` | integer | No | empty (all) | Reviews per Page. Prefilled with 10 |
| `maxRecommendations` | integer | No | empty (no limit) | Reviews across the whole run. Prefilled with 10 |
| `dateFrom` | string | No | — | Only reviews newer than this: `YYYY-MM-DD` or relative ("7 days ago") |
| `maxRepliesPerComment` | integer | No | `0` | Replies to add under each comment; 0 leaves replies out |
| `proxyConfiguration` | object | No | — | Optional. The actor picks its own network route |

### Input / Output

**Example input**

```json
{
    "pageTargets": ["portosbakery", "https://www.facebook.com/homficom/reviews"],
    "maxRecommendationsPerPage": 50,
    "maxRepliesPerComment": 3
}
```

**Example output** (a real row; image links shortened to `?...`)

```json
{
  "recommendationId": "UzpfSTEwMDAxMTUwMTE0ODE1MDoyNzg3MDIxMzY1MDI0NTQxOjI3ODcwMjEzNjUwMjQ1NDE=",
  "recommendationUrl": "https://www.facebook.com/fotografpoznan2/posts/pfbid02ro2u7WWPA2q2ArzRJPZcbrwvWcyqZ77TnABYJ6mxk8582hQRbe5ZM6WSVTBFoRxWl",
  "createdAt": "2026-07-23T10:53:13.000Z",
  "recommendationStatus": "recommends",
  "text": "Bardzo polecam współpracę z panią Agnieszką Majchrzak. Kupowaliśmy mieszkanie i dzięki pani Agnieszce cały proces przeszedł spokojnie i bezstresowo. ...",
  "page": {
    "id": "100054189468166",
    "name": "homfi",
    "url": "https://www.facebook.com/homficom/",
    "imageUrl": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.30808-1/305569664_8453045728101706_5469064813037601261_n.jpg?..."
  },
  "reviewer": {
    "id": "100011501148150",
    "name": "Eliz Burk",
    "url": "https://www.facebook.com/fotografpoznan2",
    "profilePictureUrl": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.30808-1/460942611_2208110809582269_7479974801955945577_n.jpg?..."
  },
  "tags": [],
  "reactionCount": 0,
  "reactions": [],
  "commentCount": 1,
  "shareCount": 0,
  "media": [],
  "comments": [
    {
      "id": "Y29tbWVudDoyNzg3MDIxMzY1MDI0NTQxXzE0NTA3ODY0OTAxNDM5NTQ=",
      "text": "Cześć!\n\nDziękujemy za zaufanie i słowa uznania. W homfi zawsze stawiamy na pierwszym miejscu dobro i radość naszych klientów, ...",
      "createdAt": "2026-07-28T13:19:12.000Z",
      "url": "https://www.facebook.com/fotografpoznan2/posts/pfbid02ro2u7WWPA2q2ArzRJPZcbrwvWcyqZ77TnABYJ6mxk8582hQRbe5ZM6WSVTBFoRxWl?comment_id=1450786490143954",
      "author": {
        "id": "100054189468166",
        "name": "homfi",
        "url": "https://www.facebook.com/homficom",
        "profilePictureUrl": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.30808-1/305569664_8453045728101706_5469064813037601261_n.jpg?..."
      },
      "reactionCount": 0,
      "replyCount": 0,
      "media": []
    }
  ]
}
```

Download results from the **Output** tab in JSON, CSV, Excel, HTML, or XML.

### Python API example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run = client.actor("parsebird/facebook-reviews-scraper").call(
    run_input={
        "pageTargets": ["portosbakery"],
        "maxRecommendationsPerPage": 100,
        "dateFrom": "6 months ago",
    }
)

for review in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(review["createdAt"], review.get("recommendationStatus"), review.get("tags"), (review.get("text") or "")[:80])
```

### JavaScript API example

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });

const run = await client.actor('parsebird/facebook-reviews-scraper').call({
    pageTargets: ['portosbakery'],
    maxRecommendationsPerPage: 100,
    dateFrom: '6 months ago',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
const negative = items.filter((r) => r.recommendationStatus === 'doesNotRecommend');
console.log(`${negative.length} of ${items.length} reviews don't recommend the Page`);
```

See the [Python client docs](https://docs.apify.com/api/client/python/) and [JavaScript client docs](https://docs.apify.com/api/client/js/) for more options.

### Use cases

- **Reputation monitoring**: schedule runs with **Reviews newer than** set to "7 days ago" to catch new negative reviews quickly.
- **Competitor analysis**: compare the share of "doesn't recommend" reviews and the most common tags across rival businesses.
- **Customer insights**: feed review text into sentiment analysis or topic modeling to find what customers praise and complain about.
- **Response tracking**: see which reviews the business answered in the comments.
- **Local SEO and agencies**: report on clients' Facebook reviews alongside other review sites.

### How it works

1. The actor opens each Page's public Reviews tab as a logged-out visitor and reads the Page's details.
2. It loads reviews newest first until it reaches your limits, your date, or the end of the reviews.
3. For each review with comments, it loads the comments and, when requested, the replies under each comment.

### How much does it cost to scrape Facebook reviews?

**What is the price per Facebook review?**

The actor uses pay-per-event pricing: you pay per review saved, and platform usage is included. Comments and replies are included in the review's price.

| Event | Free plan | Bronze | Silver | Gold |
|-------|-----------|--------|--------|------|
| `review-scraped` | $0.00179 (**$1.79 / 1,000**) | $0.00149 (**$1.49 / 1,000**) | $0.00119 (**$1.19 / 1,000**) | $0.00099 (**$0.99 / 1,000**) |

One `review-scraped` event is one review row in the dataset. Pages that fail are not charged. The prefilled 10-review run costs about $0.018 on the Free plan, and 1,000 reviews cost $1.79. Apify's free plan includes monthly platform credits you can use to try the actor.

### Is it legal to scrape Facebook reviews?

**Is scraping public Facebook reviews legal?**

The actor only reads reviews that Facebook shows to anyone without logging in. Scraping public data is generally legal in many jurisdictions, but reviewer names and comments are personal data covered by laws such as GDPR and CCPA. Have a legitimate reason to collect the data, respect [Facebook's Terms](https://www.facebook.com/terms.php), and consult your lawyer if unsure. Read more in Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Other Facebook scrapers and related Actors

| Actor | Best for |
|-------|----------|
| [Facebook User Posts Scraper](https://apify.com/parsebird/facebook-user-posts-scraper) | Posts from Facebook profiles and Pages |
| [Facebook Public Group Posts Scraper](https://apify.com/parsebird/facebook-group-posts-scraper) | Posts from public Facebook groups |
| [Facebook Group Profile Scraper](https://apify.com/parsebird/facebook-group-profile-scraper) | Members, activity, admins, and rules of groups |
| [Capterra Review Scraper](https://apify.com/parsebird/capterra-review-scraper) | Software reviews from Capterra |
| [Expedia Reviews Scraper](https://apify.com/parsebird/expedia-reviews-scraper) | Hotel reviews from Expedia |

### FAQ

**Which Pages work?**
Public business Pages that show a Reviews tab. Pages with reviews turned off, and profiles that aren't Pages, fail with "no public reviews tab" and aren't charged.

**Why are there no star ratings?**
Facebook replaced 1-to-5 star ratings with recommendations. `recommendationStatus` tells you whether the reviewer recommends the Page.

**How many reviews can I get?**
As many as Facebook shows on the Reviews tab. In our tests Porto's Bakery returned more than 110 reviews going back to 2018. Leave the limits empty to collect everything.

**Why do some reviews have fewer comments than `commentCount`?**
`commentCount` counts comments and replies together. Facebook also hides some comments from logged-out visitors, so those can't be collected. The comments Facebook does show are always included.

**Why is the reviewer `id` sometimes missing?**
For many people Facebook shows only a scrambled ID instead of a profile number. The name, profile link, and picture are still included when Facebook shows them.

**Which date formats does `dateFrom` accept?**
A date such as `2026-01-01`, or a relative date such as `7 days ago`, `2 weeks`, `3 months ago`, `1 year`, `today`, or `yesterday`.

**Can I run it on a schedule or from my app?**
Yes. Use [Apify schedules](https://docs.apify.com/platform/schedules), call it from the [API tab](https://apify.com/parsebird/facebook-reviews-scraper/api), or connect it to Make, Zapier, Google Sheets, or Slack through [integrations](https://apify.com/integrations).

**Where can I report issues?**
Open the **Issues** tab on the actor page with your input and run ID.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/facebook-reviews-scraper/changelog.md

# Actor input Schema

## `pageTargets` (type: `array`):

Add public Facebook Pages, one per line: a handle (portosbakery), a Page URL (https://www.facebook.com/portosbakery), a reviews URL (https://www.facebook.com/portosbakery/reviews), or a numeric Page ID. Up to 100 Pages.

## `maxRecommendationsPerPage` (type: `integer`):

Stop after this many reviews from each Page. Leave empty to collect every review Facebook shows.

## `maxRecommendations` (type: `integer`):

Stop the whole run after this many reviews across all Pages. Leave empty for no run-wide limit.

## `dateFrom` (type: `string`):

Keep only reviews published after this date. Use a date (2026-01-01) or a relative date such as '7 days ago', '3 months', or 'yesterday'. Leave empty for any date.

## `maxRepliesPerComment` (type: `integer`):

Comments on each review are always included. Set how many replies to add under each comment; 0 leaves replies out.

## `proxyConfiguration` (type: `object`):

No proxy setup is needed. The actor picks its own network route and switches to Apify Proxy when Facebook limits requests.

## Actor input object example

```json
{
  "pageTargets": [
    "portosbakery"
  ],
  "maxRecommendationsPerPage": 10,
  "maxRecommendations": 10,
  "maxRepliesPerComment": 0
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "pageTargets": [
        "portosbakery"
    ],
    "maxRecommendationsPerPage": 10,
    "maxRecommendations": 10,
    "maxRepliesPerComment": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/facebook-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "pageTargets": ["portosbakery"],
    "maxRecommendationsPerPage": 10,
    "maxRecommendations": 10,
    "maxRepliesPerComment": 0,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/facebook-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "pageTargets": [
    "portosbakery"
  ],
  "maxRecommendationsPerPage": 10,
  "maxRecommendations": 10,
  "maxRepliesPerComment": 0
}' |
apify call parsebird/facebook-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/facebook-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/LhmaqkC2577UJaZrO/builds/kcfMsLAcHbAGAq3mG/openapi.json
