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

Facebook Reviews Scraper, Scrape public reviews from any Facebook Page's Reviews tab. Get the reviewer's name and profile, the recommend/don't recommend verdict, review text, date, reactions, comments, photos and videos, plus page details such as category, recommendation rate and total review count.

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

## Pricing

from $1.49 / 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

### Facebook Reviews Scraper

The Facebook Reviews Scraper extracts public reviews from the Reviews tab of any Facebook Page and returns them as clean, structured data. Give the Facebook Reviews Scraper a Facebook Page URL, a username or a numeric Facebook Page ID, and it collects the reviewer, the recommend / don't recommend verdict, the review text, the date, reactions, comments, photos and videos.

The Facebook Reviews Scraper is made for marketers, agencies, local-business owners, analysts and developers who need Facebook review data without copying it by hand. Instead of scrolling through a Facebook Page, you receive a dataset that opens as JSON, CSV or Excel.

Run it on one Facebook Page or on many, filter the Facebook reviews by date, keyword or verdict, and schedule it so every run reports only new reviews. No Facebook login is required.

> **✨ Why use this Facebook Reviews Scraper**
>
> - Collects Facebook Page reviews in minutes instead of hours of manual copying
> - Accepts Facebook Page URLs, usernames and numeric Facebook IDs in the same run
> - Returns one structured item per Facebook review, ready for spreadsheets and dashboards
> - Filters by date, keyword and verdict, and can output only new reviews

***

### 🔹 Facebook Reviews Scraper Key Features

The Facebook Reviews Scraper focuses on the data that matters for reputation monitoring and customer research.

> **🔹 Key Features**
>
> - **Three ways to add Pages:** Facebook Page URLs, usernames (vanity names) and numeric Page IDs
> - **Multiple Pages per run:** a Facebook Page given in more than one field is scraped only once
> - **Review limit per Page:** set Max reviews, or use 0 for everything Facebook will serve
> - **Recommendation filter:** all reviews, only recommended or only not recommended
> - **Date filters:** absolute dates such as `2025-01-31` or relative ones such as `2 weeks`
> - **Text filters:** only reviews with written text, or only those matching your keywords
> - **Comments and replies:** the threads under each review, such as the Page owner's response
> - **Photos and videos:** attachment links and details
> - **Compact output:** one canonical name per value for smaller items
> - **Incremental monitoring:** return only reviews that earlier runs have not returned

The Facebook Reviews Scraper keeps going when something fails. If a Facebook Page cannot be loaded after three attempts, the Facebook Reviews Scraper skips it and continues with the next one.

***

### 🔍 Facebook Reviews Scraper: What Data You Can Extract

Each item the Facebook Reviews Scraper saves is one Facebook review. Facebook Page reviews are recommendations, so you get a recommend / don't recommend verdict rather than a star rating.

> **📋 Facebook Reviews Scraper Data Fields**
>
> - **Review:** ID, review URL, full text, verdict, published date and timestamp
> - **Reviewer:** name, ID, username, profile URL, profile picture and verified flag
> - **Engagement:** reaction, comment and share counts, plus the reaction breakdown by type
> - **Comments:** text, date, author, reaction count and reply count
> - **Media:** photo URLs, image sizes and video details
> - **Facebook Page:** name, ID, URL, category, recommendation rate and total review count
> - **Run details:** your input, a status field and the scrape time

Empty values stay empty when Facebook provides nothing for a review.

***

### 🚀 How to Use the Facebook Reviews Scraper

Using the Facebook Reviews Scraper takes about two minutes, and you do not need to write code.

> **🧭 Facebook Reviews Scraper Steps**
>
> - **Step 1:** Open the Actor on Apify and go to the Input tab
> - **Step 2:** Add one or more Facebook Pages as URLs, usernames or Page IDs
> - **Step 3:** Set Max reviews, which applies to each Facebook Page separately
> - **Step 4:** Optionally add filters, output options or monitoring
> - **Step 5:** Click Start and wait for the run to finish
> - **Step 6:** Open the Output tab and download the Facebook reviews as JSON, CSV or Excel

While it runs, the Facebook Reviews Scraper shows a live status message and finishes with the number of Facebook reviews and Pages collected.

#### 🧩 How to scrape Facebook Page reviews by URL, username or Page ID

Paste a Facebook Page link such as `https://www.facebook.com/examplebistro/`, or its Reviews tab link. You can also type only the username, for example `examplebistro`, or a numeric Page ID.

If a Facebook link looks like `profile.php?id=...`, the number after `id=` is the Page ID. Otherwise just paste the link and the Facebook Reviews Scraper works out the Facebook Page for you.

#### 🎛️ Can you filter Facebook reviews by date, keyword or verdict?

Yes. Combine Published after, Published before, Recommendation, Only reviews with text and Review text keywords in one run. Facebook reviews that do not match are skipped and are not saved.

Max reviews counts only the reviews that pass your filters. The Facebook Reviews Scraper keeps scanning older reviews until it has enough matches or reaches the end of the list.

***

### 🎯 Facebook Reviews Scraper Use Cases

The Facebook Reviews Scraper turns public feedback into data you can analyze, compare and act on.

> **🎯 Facebook Reviews Scraper Use Cases**
>
> - **Reputation monitoring:** track new Facebook reviews for your brand every day
> - **Competitor research:** compare recommendation rates and review volume across Facebook Pages
> - **Customer feedback analysis:** find recurring topics with keywords such as "delivery", "refund" or "rude"
> - **Sentiment analysis:** feed review text and verdicts into your own models
> - **Agency reporting:** collect Facebook reviews for every client Page in one run
> - **Support and operations:** spot complaints early and see how the Page owner replied

***

### ⚙️ Facebook Reviews Scraper Input

Every Facebook Reviews Scraper input field is optional, but you must provide at least one Facebook Page through URLs, usernames or IDs.

> **⚙️ Facebook Reviews Scraper Input Fields**

| Field | Type | What it does |
| --- | --- | --- |
| `startUrls` | array | Page URLs, either the Page or its Reviews tab |
| `pages` | array | Facebook Page usernames, one per line |
| `ids` | array | Numeric Facebook Page IDs, one per line |
| `maxItems` | integer | Maximum reviews per Page. Default 10, use 0 for no limit |
| `recommendationFilter` | string | `all` (default), `recommended` or `notRecommended` |
| `publishedAfter` | string | Only reviews on or after this date |
| `publishedBefore` | string | Only reviews on or before this date |
| `onlyWithText` | boolean | Skip reviews without written text. Default off |
| `textKeywords` | array | Keep reviews containing at least one word or phrase, case-insensitive |
| `includeComments` | boolean | Keep the `comments` list. Default on |
| `includeMedia` | boolean | Keep `photos`, `photoUrls` and `media`. Default on |
| `compactOutput` | boolean | One canonical field name per value. Default off |
| `onlyNewReviews` | boolean | Return only reviews no earlier run has returned. Default off |
| `incrementalKey` | string | Name of the saved state. Default `default` |

Dates use `YYYY-MM-DD` (UTC) or a relative value such as `2 weeks`, `3 months` or `1 year`. The incremental name accepts lowercase letters, digits and dashes.

#### 📥 Example input: collect recent Facebook reviews

```json
{
  "startUrls": [{ "url": "https://www.facebook.com/examplebistro/reviews" }],
  "pages": ["examplecafe"],
  "maxItems": 50,
  "publishedAfter": "3 months",
  "textKeywords": ["delivery", "refund"]
}
```

#### 📥 Example input: monitor only new Facebook reviews

```json
{
  "ids": ["100012345678901"],
  "maxItems": 100,
  "onlyNewReviews": true,
  "incrementalKey": "bistro-monitor"
}
```

> **📝 Input notes**
>
> - Use a different incremental name for each monitoring job
> - Incremental scanning stops at the first review already returned, so older reviews are not revisited

***

### 📦 Facebook Reviews Scraper Output

The Facebook Reviews Scraper saves one item per Facebook review. Open the Output tab to browse table views, or download the data as JSON, CSV, Excel, HTML or XML.

#### 🧾 Example output

The example is shortened and uses fictional values. A full item has about 67 fields, and compact output keeps 34 of them.

```json
{
  "type": "review",
  "inputUrl": "https://www.facebook.com/examplebistro/reviews",
  "id": "1000000000000001",
  "url": "https://www.facebook.com/examplebistro/posts/1000000000000001",
  "text": "Friendly staff and quick delivery. Will order again!",
  "is_recommended": true,
  "recommendation": "recommended",
  "rating": 0,
  "published_at": "2025-06-14T10:21:07Z",
  "reviewer": {
    "id": "1000123456",
    "name": "Jane Doe",
    "url": "https://www.facebook.com/jane.doe.example",
    "is_verified": false
  },
  "reactions_count": 3,
  "comments_count": 1,
  "shares_count": 0,
  "reactions": [{ "type": "Like", "count": 2 }, { "type": "Love", "count": 1 }],
  "comments": [
    {
      "text": "Thank you, Jane! See you soon.",
      "createdAt": "2025-06-14T12:02:44.000Z",
      "author": { "name": "Example Bistro" }
    }
  ],
  "pageName": "Example Bistro",
  "pageCategory": "Restaurant",
  "rating_text": "94% recommend (120 reviews)",
  "recommend_percent": 94,
  "reviews_total": 120,
  "status": "success",
  "scrapedAt": "2025-07-01T09:00:00.512Z"
}
```

> **📊 Facebook Reviews Scraper output notes**
>
> - `rating` is always `0`, because Facebook reviews are recommendations without stars. Use `is_recommended`
> - `recommendation` is `recommended` or `not_recommended`
> - Some fields repeat a value under alias names, such as `reviewId` and `post_id`. Compact output removes them

The dataset also has ready-made views: Overview, Reviewers, Engagement & replies, Photos & videos and Page summary.

***

### 💰 Pricing

This README does not repeat price figures, so they never go out of date. The current price of the Facebook Reviews Scraper is always shown on the Actor page in Apify Store.

> **💰 Controlling Facebook Reviews Scraper cost**
>
> - Cost grows with the number of Facebook reviews you extract, so Max reviews is your main control
> - Turn off comments and media when you do not need them
> - Use Only new reviews on scheduled runs to avoid collecting the same reviews again
> - The default memory is 1 GB, and you can try the Facebook Reviews Scraper on a free Apify account

***

### 💡 Tips and Best Practices

> **💡 Facebook Reviews Scraper Tips**
>
> - Start with a small Max reviews value, check the output, then raise it (0 means the full history)
> - Facebook decides how many reviews it serves, so you may receive fewer than the total shown on the Page
> - Reviews arrive newest first, which is why date filters and monitoring can stop early
> - Photo and video links are hosted by Facebook and can expire, so download files you need soon after the run
> - Reviewer names and profile links are personal data. Follow Facebook's terms and the privacy laws that apply to you

The Facebook Reviews Scraper reads only what is publicly visible. It does not work for private profiles, private groups or content that needs a login.

***

### ❓ Frequently Asked Questions

#### 🔓 Can I scrape Facebook reviews without logging in?

Yes. The Facebook Reviews Scraper does not ask for your Facebook account or password. It collects the reviews that any visitor can see on a public Facebook Page.

#### 🗂️ How do I scrape reviews from several Facebook Pages at once?

Add every Page to the Facebook Reviews Scraper input under Facebook pages URLs, Pages by username or Pages by IDs. All reviews go into one dataset, and `inputUrl` and `pageName` tell the Pages apart.

#### 🔢 How many reviews can the Facebook Reviews Scraper extract?

Max reviews applies to each Facebook Page separately. Set a number, or use 0 to collect every review Facebook will serve for that Page.

#### ⭐ Does the Facebook Reviews Scraper return star ratings?

No. Page reviews are recommend / don't recommend, so you get a verdict in `is_recommended` and the Page's recommendation rate in `recommend_percent`.

#### 🔔 How can I get only new Facebook reviews every day?

Turn on Only new reviews, name the job and schedule the Facebook Reviews Scraper to run daily. Each run returns only reviews that earlier runs with the same name have not returned.

#### 📤 Can I export Facebook reviews to CSV or Excel?

Yes. The Facebook Reviews Scraper saves to an Apify dataset, which you can download as JSON, CSV, Excel, HTML or XML, or read through the Apify API.

#### ⏱️ Can I schedule the Facebook Reviews Scraper or connect it to other tools?

Yes. Use Apify schedules, start runs from the API, and send results to your own tools with webhooks or integrations.

#### 🛠️ What happens if a Facebook Page fails to load?

The Facebook Reviews Scraper tries three times. If the Page still cannot be read, it logs a message, skips that Page and continues. The run is marked failed only if none of the Pages could be read.

#### 💬 Can I get comments and replies on Facebook reviews?

Yes. With Include comments on, the Facebook Reviews Scraper adds a `comments` list to each review, including replies such as the Page owner's response.

***

### 🤝 Support

Found a problem or need a feature for the Facebook Reviews Scraper? Open an issue on the Actor page and include the run link.

- contact me by email : alphascraper69@gmail.com

# Actor input Schema

## `startUrls` (type: `array`):

One or more Facebook Page URLs, either the page itself or its Reviews tab, for example https://www.facebook.com/copperkettleyqr/reviews. For vanity names or numeric IDs use the "Pages by username" and "Pages by IDs" fields below. A page given in more than one field is scraped once. Provide at least one URL, username or ID. All reviews go into the same dataset; use the `inputUrl` and `pageName` fields to tell pages apart. "Max reviews" is applied to each page separately.

## `pages` (type: `array`):

Page usernames (vanity names), one per line, for example "copperkettleyqr". Merged with the URLs above.

## `ids` (type: `array`):

Numeric Facebook Page IDs, one per line, for example "100064027242849". Merged with the URLs above.

## `maxItems` (type: `integer`):

Maximum number of reviews to extract. The Actor stops requesting pages as soon as this many reviews are collected and never returns more. Use 0 for no limit (every review Facebook will serve).

## `recommendationFilter` (type: `string`):

Keep all reviews, or only those where the reviewer recommends / does not recommend the page.

## `publishedAfter` (type: `string`):

Only include reviews published on or after this date. Use an absolute date (YYYY-MM-DD) or a relative one such as "2 weeks" or "3 months" (units: day, week, month, year).

## `publishedBefore` (type: `string`):

Only include reviews published on or before this date. Use an absolute date (YYYY-MM-DD) or a relative one such as "1 month" (units: day, week, month, year).

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

Skip reviews that are only a recommend / don't recommend with no written comment.

## `textKeywords` (type: `array`):

Keep only reviews whose text contains at least one of these words or phrases (case-insensitive). Useful for topic or complaint tracking, for example "delivery", "refund" or "rude". Leave empty to keep every review.

## `includeComments` (type: `boolean`):

Keep the `comments` list on each review (replies under the review, such as the page owner's response). Turn off for smaller items.

## `includeMedia` (type: `boolean`):

Keep the `photos`, `photoUrls` and `media` fields for reviews that have attachments. Turn off for smaller items.

## `compactOutput` (type: `boolean`):

Return one canonical name for each value instead of repeating it under several alias spellings (for example `reviewId`, `recommendation_id`, `post_id` and `legacyId` all hold the same review ID). Gives smaller, cleaner items; leave off if you rely on a specific alias.

## `onlyNewReviews` (type: `boolean`):

Only output reviews that no earlier run with the same incremental state name has returned. Every returned review is remembered (by its post ID) for next time. Scanning stops at the first review that was already returned, so older reviews are not revisited. Ideal for scheduled runs that should alert you to newly posted reviews only.

## `incrementalKey` (type: `string`):

Name of the saved list of already-seen reviews. Use a different name for each monitoring job so they do not share state. Only used when "Only new reviews" is on. Lowercase letters, digits and dashes only.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/copperkettleyqr/"
    }
  ],
  "pages": [
    "portosbakery"
  ],
  "ids": [
    "100064027242849"
  ],
  "maxItems": 10,
  "recommendationFilter": "all",
  "onlyWithText": false,
  "includeComments": false,
  "includeMedia": true,
  "compactOutput": false,
  "onlyNewReviews": false,
  "incrementalKey": "default"
}
```

# Actor output Schema

## `dataset` (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 = {
    "startUrls": [
        {
            "url": "https://www.facebook.com/copperkettleyqr/"
        }
    ],
    "pages": [
        "portosbakery"
    ],
    "ids": [
        "100064027242849"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("alpha-scraper/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 = {
    "startUrls": [{ "url": "https://www.facebook.com/copperkettleyqr/" }],
    "pages": ["portosbakery"],
    "ids": ["100064027242849"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("alpha-scraper/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 '{
  "startUrls": [
    {
      "url": "https://www.facebook.com/copperkettleyqr/"
    }
  ],
  "pages": [
    "portosbakery"
  ],
  "ids": [
    "100064027242849"
  ],
  "maxItems": 10
}' |
apify call alpha-scraper/facebook-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alpha-scraper/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/tggyuakvIjFdXazr4/builds/u0zSSTBon6Trxr2J5/openapi.json
