# Facebook Review Scraper (`data_minds/facebook-review-scraper`) Actor

Scrape reviews from public Facebook pages with no login or cookies. Get reviewer, recommend or not, review text, tags, photos, reactions, comments and owner replies, plus page totals. Bulk input, filters, auto proxy fallback. Export JSON, CSV or Excel.

- **URL**: https://apify.com/data_minds/facebook-review-scraper.md
- **Developed by:** [Data Minds](https://apify.com/data_minds) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

### What is Facebook Review Scraper?

**Facebook Review Scraper** collects the public reviews of [Facebook](https://www.facebook.com) pages: reviewer, recommend or not-recommend, review text, tags, photos, reactions, comments and the page owner's reply. Paste page links, usernames or page ids, and every review is saved to your dataset as it is read. On the Gold plan a result costs $0.0016, or $1.60 per 1,000 reviews. No Facebook account or cookies are needed.

Use it for:

- 📈 **Facebook reputation monitoring:** check what customers say about your own pages on a schedule.
- 🔎 **Competitor review analysis:** compare reviews, recommend percentages and follower counts across rival pages.
- 💬 **Customer sentiment analysis:** feed review text and tags into your own sentiment or topic models.
- 📊 **Export Facebook page reviews to a spreadsheet:** download JSON, CSV or Excel without copying reviews by hand.
- 🚨 **Track negative reviews:** keep only the pages' not-recommended reviews and see whether the owner replied.

Because it runs on the Apify platform, you also get the API, scheduling, webhooks, integrations and export formats such as JSON, CSV, Excel, XML and HTML.

#### What can Facebook Review Scraper do?

- 📄 **Scrape Facebook reviews in bulk:** one page link, username or numeric page id per line.
- 🕒 **Newest first:** reviews are read from the newest to the oldest.
- 🎯 **Filter reviews:** by date, recommended or not recommended, and only reviews with written text.
- 📂 **Separate tables:** reviews, reviewers, comments, photos and page totals each get their own table.
- ⚡ **Live results:** each review appears in the Output tab while the run is still going.
- 🔌 **API and automation:** run it from code, on a schedule, or from other apps.

***

### What data can Facebook Review Scraper extract?

| Field | Description |
|---|---|
| 🔗 `facebookUrl`, `inputUrl` | Canonical page link and the page exactly as you entered it |
| 📄 `pageName`, `facebookId` | Name and Facebook id of the reviewed page |
| 🆔 `id`, `legacyId`, `url` | Review identifiers and the review link |
| 👤 `user` | Reviewer `id`, `name`, `profileUrl` and `profilePic` |
| 📅 `date` | When the review was written (UTC, ISO 8601) |
| 👍 `isRecommended` | `true` when the reviewer recommends the page, `false` when not |
| 📝 `text`, `textLength` | Review text and its character count |
| 🔖 `tags` | Tags the reviewer picked |
| 💗 `likesCount`, `reactions` | Reaction total and the breakdown by type |
| 💬 `commentsCount`, `comments` | Comment total and the comments themselves |
| 📸 `photos` | Photos attached to the review (`url`, `width`, `height`) |
| 💭 `ownerReplied`, `ownerReply` | Whether the page owner replied, plus the reply `text` and `date` |
| 📊 `pageRecommendPct`, `pageReviewCount`, `pageFollowers` | Page recommend percentage, total reviews and followers |

> **Note:** Fields are `null` or empty when Facebook shows no value for a review, for example `text` for a review that is only a recommend tap.

#### What data can't Facebook Review Scraper extract?

It reads public pages only. Reviews that Facebook does not show publicly are not returned, and the page row in the pages table carries a note when a page shows fewer reviews than its total.

***

### How to scrape Facebook reviews

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [Facebook Review Scraper](https://apify.com/data_minds/facebook-review-scraper).
3. Add Facebook page links, usernames or page ids to **Facebook pages** (`urls`).
4. Set **Maximum reviews** (`maxReviews`) per page, or `0` for all reviews Facebook shows.
5. Optionally set a date, a recommendation filter or only reviews with text.
6. Click **Start** and watch the reviews arrive in the Output tab.
7. Export the results as JSON, CSV or Excel, or read them with the API.

***

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

This Actor uses pay-per-event pricing: you pay for each saved review, plus a small start fee per run. Platform usage is billed in addition.

| Plan | Per review | Per 1,000 reviews |
|---|---|---|
| Free | $0.002 | $2.00 |
| Bronze | $0.0018 | $1.80 |
| Silver | $0.0017 | $1.70 |
| Gold | $0.0016 | $1.60 |

The start event costs $0.00005 per GB of memory, minimum one event. This Actor's default memory is 1,024 MB (1 GB), so a start costs $0.00005.

**Example:** saving 1,000 reviews on the Gold plan costs $1.60 in result charges plus $0.00005 for the start, with platform usage billed in addition.

#### Is scraping Facebook free?

The Apify Free plan includes $5 in monthly credit. At the Free price of $0.002 per review, that covers about 2,500 reviews before platform usage. See the [pricing tab](https://apify.com/data_minds/facebook-review-scraper/pricing) for current prices.

***

### Input

The Actor needs one thing: at least one entry in `urls`. See the [input schema](https://apify.com/data_minds/facebook-review-scraper/input-schema) for the full form. A ready-to-run example:

```json
{
  "urls": ["https://www.facebook.com/KFC/reviews"],
  "maxReviews": 10
}
```

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `urls` | array | yes | none (prefilled with one page) | Facebook page links, usernames or numeric page ids |
| `maxReviews` | integer | no | `10` | Reviews to save for each page, newest first; `0` means all reviews Facebook shows |
| `onlyReviewsNewerThan` | string | no | empty | Skip older reviews: a date such as `2024-01-01` or a value such as `30 days`, `6 months`, `1 year` (UTC) |
| `recommendation` | string | no | `all` | `all`, `recommended` or `not_recommended` |
| `onlyWithText` | boolean | no | `false` | Skip reviews that are only a recommend or not-recommend tap |
| `proxyConfiguration` | object | no | `{"useApifyProxy": false}` | Optional proxy settings; leave the default for automatic handling |

#### Pages (`urls`)

- ✅ Good: `https://www.facebook.com/KFC/reviews`, `KFC` or a numeric page id.
- ❌ Bad: links to groups, events, photos, reels or search pages. They are skipped with a warning.

#### Maximum reviews (`maxReviews`)

The limit applies to each page, so two pages with `50` give up to 100 reviews.

- ✅ Good: `50` for a quick sample of each page.
- ❌ Bad: `0` on many large pages for a first test, which can take long and cost more.

> **Warning:** Facebook can show fewer reviews publicly than the page total, so a high `maxReviews` does not guarantee that many results.

#### Date filter (`onlyReviewsNewerThan`)

- ✅ Good: `2024-01-01` or `30 days`.
- ❌ Bad: `last month` or `01/02/24`, which are not understood and stop the run with an error.

***

### Output

Results appear in the Output tab and the run's storage. Download them as JSON, CSV, Excel, XML or HTML, or fetch them with the API. The default dataset has one row per review, and four more tables hold reviewers, comments, photos and pages.

#### JSON example

```json
{
  "facebookUrl": "https://www.facebook.com/KFC",
  "inputUrl": "https://www.facebook.com/KFC/reviews",
  "pageName": "KFC",
  "facebookId": "1000000000000",
  "id": "UzpfSTEwMDAw...",
  "legacyId": "3433562433615151",
  "url": "https://www.facebook.com/jane.doe/posts/pfbid0example",
  "user": {
    "id": "100008842841030",
    "name": "Jane Doe",
    "profileUrl": "https://www.facebook.com/jane.doe",
    "profilePic": "https://example.com/pic.jpg"
  },
  "date": "2024-09-11T17:57:58.000Z",
  "isRecommended": true,
  "text": "Great food and friendly service.",
  "tags": ["Fast delivery"],
  "likesCount": 3,
  "commentsCount": 1,
  "photos": [{"url": "https://example.com/photo.jpg", "width": 720, "height": 960}],
  "comments": [],
  "reactions": {"like": 2, "love": 1},
  "ownerReplied": false,
  "ownerReply": null,
  "textLength": 32,
  "pageRecommendPct": 94,
  "pageReviewCount": 201,
  "pageFollowers": 3313
}
```

The other tables use these fields:

- **Reviewers:** `reviewId`, `reviewUrl`, `pageName`, `facebookUrl`, `userId`, `userName`, `userProfileUrl`, `userProfilePic`, `date`, `isRecommended`, `textLength`, `likesCount`, `commentsCount`.
- **Comments:** `reviewId`, `reviewUrl`, `pageName`, `facebookUrl`, `commentId`, `text`, `date`, `likesCount`, `authorName`, `authorId`, `authorProfilePic`, `isPageOwner`.
- **Photos:** `reviewId`, `reviewUrl`, `pageName`, `facebookUrl`, `photoUrl`, `width`, `height`.
- **Pages:** `input`, `facebookUrl`, `pageName`, `facebookId`, `pageUsername`, `pageRecommendPct`, `pageReviewCount`, `pageFollowers`, `pageFollowing`, `pageCheckIns`, `pageTalkingAbout`, `pageDescription`, `pageProfilePic`, `reviewsSaved`, `reviewsScanned`, `status`, `note`, `error`, `scrapedAt`.

A run summary is also saved with `reviewsSaved`, `reviewsCharged`, `pagesRead`, `pagesFailed` and `shortfallNotes`.

#### Notes and limitations

- Only public pages with a visible reviews tab can be read.
- A page's `status` is `ok`, `partial`, `error` or `skipped`, and `note` explains why a page returned fewer reviews than asked.
- Reviews are saved newest first.

***

### Tips and advanced usage

- Start with the default of 10 reviews per page to check the output before a large run.
- Use `onlyReviewsNewerThan` with a schedule to collect only recent reviews each week.
- Use `recommendation` set to `not_recommended` to focus on negative reviews.
- Add several pages to one run to collect their reviews in a single dataset, using bulk page links.
- Download Facebook reviews as a JSON dataset and load the review data into your own tool.
- Use review monitoring on local business reviews and other social media reviews to spot negative reviews early.
- Compare competitor reviews and run review analytics on Facebook business page reviews and Facebook page data.
- Open the Facebook reviews dataset to scrape Facebook page reviews and recommendations in one place.
- Treat it as a Facebook reviews tool that returns Facebook reviews JSON for any script.
- It works as a Facebook reviews extractor and a Facebook recommendations scraper in one run.
- Bulk exports pair well with a Facebook reviews API call and Facebook reviews Python scripts.

***

### Integrations and API

#### Can I use Facebook Review Scraper as an API?

Yes. Use the [Apify API](https://docs.apify.com/api/v2) or the apify-client packages for Node.js and Python. The [API tab](https://apify.com/data_minds/facebook-review-scraper/api) shows ready-to-copy calls.

#### How to scrape Facebook reviews with Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("data_minds/facebook-review-scraper").call(
    run_input={"urls": ["https://www.facebook.com/KFC/reviews"], "maxReviews": 10}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["pageName"], item["isRecommended"], item["text"])
```

#### Can I integrate Facebook Review Scraper with other apps?

Yes. Connect it to Make, Zapier, Google Sheets or Slack, trigger [webhooks](https://docs.apify.com/integrations/webhooks) when a run finishes, and schedule runs for recurring review monitoring.

#### Can I use Facebook Review Scraper with AI agents (MCP)?

Yes. Open the [MCP tab](https://apify.com/data_minds/facebook-review-scraper/api/mcp) to connect the Actor to Claude and other MCP clients.

***

### Other review and Facebook scrapers

| Actor | What it does |
|---|---|
| 🛒 [Amazon Best Seller Scraper](https://apify.com/data_minds/amazon-best-seller-scraper) | Scrape Amazon Best Sellers, New Releases, Movers & Shakers, Most Wished For and Gift Ideas for any category on any marketplace. |
| 📇 [Facebook Page Contact Info Scraper](https://apify.com/data_minds/facebook-page-contact-info-scraper) | Scrape emails, phone numbers, websites, address, social links and follower counts from public Facebook pages. |
| ⭐ [Trustpilot Reviews Scraper](https://apify.com/data_minds/trustpilot-reviews-scraper) | Extract customer reviews, ratings, company replies, and company data from any Trustpilot business page in bulk. |

***

### FAQ

#### Is it legal to scrape Facebook reviews?

Scraping publicly available data is generally legal, but you should respect personal data rules such as GDPR and Facebook's terms. Reviews can contain names and profile links, so keep a legitimate purpose. Read [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/). This is not legal advice.

#### How does Facebook Review Scraper work?

You paste Facebook page links, usernames or page ids and choose a limit and optional filters. The Actor reads each page's public reviews from newest to oldest, saves every review to the dataset as it goes, and fills separate tables for reviewers, comments, photos and page totals.

#### Why scrape Facebook reviews?

Reviews show how customers feel about a business. Teams scrape them for reputation monitoring, competitor review analysis, customer sentiment analysis and market research. Exporting them in bulk replaces slow copy and paste, and scheduled runs keep your data fresh without manual work every week.

#### How do I export Facebook page reviews to Excel?

Run the Actor with your page links, open the Output tab when the run finishes, and choose Excel from the export options. You can also download JSON, CSV, XML or HTML, or fetch the dataset through the Apify API for your own spreadsheet or dashboard.

#### Do I need a Facebook account or cookies?

No. The Actor does not ask for a Facebook login, cookies or an API key. You only need an Apify account and the page links, usernames or ids of the public pages whose reviews you want to collect and export to your own tools.

#### Why am I getting fewer reviews than expected?

Facebook may show only part of a page's reviews publicly, and your `maxReviews`, date, recommendation and text filters also reduce the count. Check the pages table: its `note` and `reviewsScanned` fields explain how many reviews were read and why a page stopped early.

#### Can I get only negative Facebook reviews?

Yes. Set `recommendation` to `not_recommended` to save only reviews where the reviewer does not recommend the page. Combine it with `onlyReviewsNewerThan` to track new negative reviews every week, and check `ownerReplied` to see which of those reviews the page owner has already answered.

#### Is Facebook Review Scraper not working?

First check that each page is public and has a reviews tab, and that links point to a page rather than a group or event. If a run still fails, open the [Issues tab](https://apify.com/data_minds/facebook-review-scraper/issues/open) with your run link and we will look into it.

***

### Support and feedback

Found a bug or want a feature? Open the [Issues tab](https://apify.com/data_minds/facebook-review-scraper/issues/open). For custom solutions or questions, contact hello.dataminds@gmail.com.

Built and maintained by the [data_minds team on Apify](https://apify.com/data_minds).

This Actor is an independent tool and is not affiliated with or endorsed by Facebook or Meta. You are responsible for using the data in line with applicable laws and the platform's terms.

# Actor input Schema

## `urls` (type: `array`):

One or many Facebook page links, usernames or numeric page ids (for example https://www.facebook.com/copperkettleyqr/reviews or copperkettleyqr). Bulk input is supported.

## `maxReviews` (type: `integer`):

Number of reviews to save for EACH page link, newest first (2 pages with 50 give up to 100 reviews). 0 means all reviews Facebook shows.

## `onlyReviewsNewerThan` (type: `string`):

Skip older reviews. Use a date such as 2024-01-01 (or a full ISO date) or a relative value such as 30 days, 6 months or 1 year. Times are UTC. Leave empty for no date limit.

## `recommendation` (type: `string`):

Keep all reviews, only the ones that recommend the page, or only the ones that do not.

## `onlyWithText` (type: `boolean`):

Skip reviews that are only a recommend or not-recommend tap without any written text.

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

Optional. Leave the default for automatic connection handling, or choose your own proxy settings here.

## Actor input object example

```json
{
  "urls": [
    "https://www.facebook.com/KFC/reviews"
  ],
  "maxReviews": 10,
  "recommendation": "all",
  "onlyWithText": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per review with every field.

## `reviewers` (type: `string`):

Who wrote each review and whether they recommend the page.

## `comments` (type: `string`):

One row per comment under a review.

## `photos` (type: `string`):

One row per photo attached to a review.

## `pages` (type: `string`):

One row per input page: totals, followers, status and notes.

## `summary` (type: `string`):

Counts for this run.

# 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 = {
    "urls": [
        "https://www.facebook.com/KFC/reviews"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_minds/facebook-review-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 = {
    "urls": ["https://www.facebook.com/KFC/reviews"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("data_minds/facebook-review-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 '{
  "urls": [
    "https://www.facebook.com/KFC/reviews"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call data_minds/facebook-review-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_minds/facebook-review-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/RwfYcnkbZK29lVkvV/builds/xATGHJkS11d6g4woY/openapi.json
