# Facebook Reviews Scraper - Recommendations, Comments & Photos (`topapi/facebook-reviews-scraper`) Actor

Scrape public reviews (recommendations) from any Facebook Page: reviewer, date, recommends or not, text, tags, photos, reactions and comment counts, plus the Page's recommend % and review count. Page search, filters and monitor mode for new reviews. Optional review comments. No login or cookies.

- **URL**: https://apify.com/topapi/facebook-reviews-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 review scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 does Facebook Reviews Scraper do?

**Facebook Reviews Scraper** extracts the public reviews (recommendations) of any Facebook Page and turns each one into a structured row: the reviewer, the date, whether they recommend the Page or not, the review text, the tags they picked, photos, reactions and comment counts, plus the Page's own "% recommend" score. Built for local marketers, reputation-management agencies and brand teams who need Facebook reviews in a spreadsheet, a CRM or a dashboard without copying them by hand.

Facebook reviews scraper · Facebook recommendations scraper · Facebook page reviews extractor

<a href="https://console.apify.com/actors/DsCziNJ0sF6bkqOkT"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/facebook-reviews-scraper-source.png" alt="Facebook Page reviews tab with its recommend score that Facebook Reviews Scraper turns into rows" style="width:70%"></a>

- **Every public review of a Page:** reviewer, date, recommends / doesn't recommend, text, tags, photos, reactions by type, comment and share counts
- **The Page's score on every row:** the "98% recommend (52,497 reviews)" line, split into `pageRecommendPercent` and `pageReviewsCount`, plus followers, verified badge and the Page's Ad Library id
- **Many Pages per run:** paste Page URLs, usernames or numeric Page ids, or look Pages up by business name with Facebook's own Page search
- **Filters:** positive or negative only, a date window, keywords, text-only or photo-only reviews
- **Review comments (optional):** the replies under each review, often the business owner's answer
- **No login required:** no Facebook account, cookies or API key
- **Monitor mode:** run it on a schedule and get only the reviews posted since the last run
- **Export anywhere:** JSON, CSV, Excel, XML, RSS; schedules, webhooks, Make, Zapier, n8n, Google Sheets, Slack, the Apify API and MCP

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

<table>
<tr>
<td>👍 Recommends or not (`isRecommended`)</td>
<td>📝 Review text (`text`)</td>
<td>📅 Date posted (`date`)</td>
</tr>
<tr>
<td>🏷️ Review tags (`tags`)</td>
<td>👤 Reviewer name and avatar (`user`)</td>
<td>🔗 Review link (`url`)</td>
</tr>
<tr>
<td>❤️ Reactions by type (`reactions`)</td>
<td>💬 Comment count (`commentsCount`)</td>
<td>🔁 Share count (`sharesCount`)</td>
</tr>
<tr>
<td>📷 Review photos (`photos`)</td>
<td>🗨️ Review comments (`comments`, add-on)</td>
<td>⭐ Page "% recommend" (`pageRecommendPercent`)</td>
</tr>
<tr>
<td>🔢 Page review count (`pageReviewsCount`)</td>
<td>🏢 Page name, username and id</td>
<td>👥 Page followers (`pageFollowers`)</td>
</tr>
<tr>
<td>✅ Page verified badge</td>
<td>📣 Page Ad Library id (`pageAdLibrary`)</td>
<td>🔎 The search name that found the Page</td>
</tr>
</table>

On a 1,031-review test run across three Pages, 96% of reviews had text, 45% had tags and 15% had photos; the verdict, date, reviewer, reactions and the Page's score were filled on every row (the verdict on 99.5%, see the fields table).

### How to scrape Facebook reviews with Facebook Reviews Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) — $5 of monthly credit, no card needed.
2. Open [Facebook Reviews Scraper](https://apify.com/topapi/facebook-reviews-scraper) and click **Try for free**.
3. Paste one or more Facebook Page URLs into **Facebook Page URLs** (or business names into **Search Pages by name**) and set **Max reviews per Page**.
4. Click **Start**. Reviews stream into the dataset as they are found, newest first.
5. Open the **Storage** tab and **Export** as JSON, CSV or Excel — or let a schedule run it for you.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `startUrls` | List | Facebook Pages: a Page URL (`https://www.facebook.com/katzsdeli`), its `/reviews` URL, a `profile.php?id=` URL, a username (`katzsdeli`) or a numeric Page id. |
| `searchQueries` | List | Business names looked up with Facebook's own Page search, e.g. `Katz's Delicatessen`. |
| `maxPagesPerQuery` | Integer | How many of the top search results to scrape per name. Default `1`. |
| **✂️ Refine results** | | |
| `recommendationType` | Select | `all`, `positive` (recommends) or `negative` (doesn't recommend). Default `all`. |
| `onlyReviewsNewerThan` | Date | Keep reviews posted on or after a date: `2026-01-01` or relative (`30 days`, `6 months`). |
| `onlyReviewsOlderThan` | Date | Keep reviews posted before a date. Combine both for a window. |
| `keywords` | List | Keep reviews whose text or tags contain one of these words. |
| `onlyWithText` | Boolean | Skip recommendations without written text. Default `false`. |
| `onlyWithPhotos` | Boolean | Keep only reviews with photos. Default `false`. |
| **➕ Extra data** | | |
| `includeComments` | Boolean | Add the public comments under each review — charged as **review-comments** at $0.001 per review that comes back with at least one comment. Default `false`. |
| `maxCommentsPerReview` | Integer | Most comments per review. Default `10`. |
| `maxRepliesPerComment` | Integer | Most replies nested under each comment. Default `0`. |
| **🔁 Monitoring** | | |
| `monitorMode` | Boolean | Return only reviews not delivered by previous runs. Pair with a schedule. |
| `monitorStoreName` | String | Name of the memory store. Default `facebook-reviews-monitor`. |
| **📦 Output** | | |
| `maxReviewsPerPage` | Integer | Default `100`; `0` = every public review (up to 5,000 per Page per run). `resultsLimit` is accepted too. |
| `maxReviews` | Integer | Limit for the whole run across all Pages. Default `0` (none). |
| `compact` | Boolean | Core fields only, sized for AI agents and MCP. |
| **⚙️ Advanced** | | |
| `proxyConfiguration` | Proxy | Default: no proxy, with an automatic move to Apify datacenter and residential IPs if Facebook refuses a Page. |
| `maxConcurrency` | Integer | Pages scraped at the same time. Default `3`. |

#### Input JSON

```json
{
  "startUrls": [{ "url": "https://www.facebook.com/katzsdeli" }],
  "searchQueries": ["Joe's Stone Crab Miami"],
  "maxReviewsPerPage": 100,
  "recommendationType": "all",
  "onlyReviewsNewerThan": "6 months",
  "includeComments": false
}
```

#### Paste the Page, not a post

Facebook Reviews Scraper reads a Page's **Reviews** tab. **Do:** `https://www.facebook.com/katzsdeli` or `katzsdeli` · **Don't:** a post or photo URL, or a group (groups have no reviews and are reported as invalid input).

#### Search with the exact business name

The search uses Facebook's own Page search, which ranks exact names well. **Do:** `Katz's Delicatessen`, `Joe's Stone Crab Miami` · **Don't:** `best deli nyc` (that finds unrelated Pages). The matched Pages are listed in the run summary, and every row carries the `searchQuery` that found it.

#### Use a date floor to stop early

Facebook serves reviews newest first, so `onlyReviewsNewerThan` stops reading as soon as reviews get older than your date. That makes "last 30 days" runs short even on Pages with thousands of reviews.

### ⬆️ Output

Every review becomes one dataset item. Here is the table view of a real run for Katz's Delicatessen and The Ritz (reviewer names blurred in the picture, delivered in full in the data):

<a href="https://console.apify.com/actors/DsCziNJ0sF6bkqOkT"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/facebook-reviews-scraper-output.png" alt="Facebook Reviews Scraper output table with verdicts, tags and the Page's recommend score" style="width:70%"></a>

And one row as JSON (reviewer masked here):

```json
{
  "facebookUrl": "https://www.facebook.com/katzsdeli",
  "legacyId": "1673711770985538",
  "url": "https://www.facebook.com/******/posts/pfbid0…",
  "date": "2026-07-27T16:44:35.000Z",
  "isRecommended": true,
  "recommendationStatus": "RECOMMENDS",
  "text": "👌👌👌 The most tasty reubens in the whole city.. I really dream flying to new york to taste their beautiful sandwiches keep it up Katz's Delicatessen.",
  "tags": ["Cheap eats", "Free Wi-Fi", "Convenient location", "Delicious sandwiches", "Best coffee", "Great bagels", "Popular with locals"],
  "user": { "id": "pfbid02x…", "name": "******", "profileUrl": null, "profilePic": "https://scontent.xx.fbcdn.net/v/…" },
  "likesCount": 3,
  "reactions": { "like": 2, "love": 1, "care": 0, "haha": 0, "wow": 0, "sad": 0, "angry": 0 },
  "commentsCount": 0,
  "photos": [],
  "facebookId": "100064806517961",
  "pageName": "katzsdeli",
  "pageTitle": "Katz's Delicatessen",
  "pageFollowers": 952715,
  "pageRecommendPercent": 98,
  "pageReviewsCount": 52497,
  "pageRatingSummary": "98% recommend (52,497 reviews)",
  "pageAdLibrary": { "id": "89033874836", "isBusinessPageActive": false },
  "inputUrl": "https://www.facebook.com/katzsdeli"
}
```

#### Facebook review fields

Fill = share of rows with the field set, on a 1,031-review run (Katz's Delicatessen, Joe's Stone Crab, The Ritz).

| Field | Type | What it is | Fill |
|---|---|---|---|
| `id` / `legacyId` | string | Facebook's story id and numeric post id of the review | 100% |
| `url` | string | Link to the review | 100% |
| `date` / `timestamp` | string / number | When it was posted (ISO 8601 / Unix seconds) | 100% |
| `isRecommended` | boolean | Recommends the Page (`true`) or not (`false`) | 99.5% |
| `recommendationStatus` / `sentiment` | string | `RECOMMENDS` / `DOES_NOT_RECOMMEND`; `positive` / `negative` from the same verdict | 99.5% |
| `title` | string | The review's headline as Facebook prints it | 100% |
| `text` | string | The review text | 96% |
| `tags` | array | Tags the reviewer picked ("Fast delivery", "Cosy atmosphere") | 45% |
| `user` | object | `id`, `name`, `shortName`, `profileUrl`, `profilePic`, `isVerified` | 100% (`profileUrl` 44%) |
| `likesCount` / `reactions` | number / object | Total reactions and the count per type | 100% |
| `commentsCount` / `sharesCount` | number | Comments and shares on the review | 100% |
| `photos` | array | `id`, `url` (full size), `thumbnailUrl`, `width`, `height`, `alt` | 15% |
| `comments` | array | With `includeComments`: `id`, `text`, `date`, `authorName`, `authorUrl`, `likesCount`, `repliesCount`, `replies` | add-on |
| `facebookUrl` / `facebookId` | string | The Page's URL and numeric id | 100% |
| `pageName` / `pageTitle` | string | The Page's username and display name | 100% |
| `pageRecommendPercent` / `pageReviewsCount` / `pageRatingSummary` | number / number / string | The Page's score line, split | 100% |
| `pageFollowers` / `pageIsVerified` / `pageProfilePicture` | number / boolean / string | The Page's header | 100% |
| `pageAdLibrary` | object | The Page's Ad Library `id` and `isBusinessPageActive` | 100% |
| `feedbackId` | string | Facebook's feedback id of the review | 100% |
| `inputUrl` / `searchQuery` / `scrapedAt` | string | What you passed, the search name that found the Page, scrape time | 100% / with search / 100% |

`profileUrl` is empty when Facebook shows the reviewer without a public profile link. `isRecommended` is empty on the few reviews whose author tagged friends: Facebook then replaces the headline with "X is with Y" and shows visitors no verdict. Facebook has had no star ratings since 2018 (a review is a recommendation, yes or no), so there is no star rating field.

### How can I use Facebook reviews data?

- 📣 **Reputation-management agencies** — collect every client's Facebook reviews in one sheet and flag new negative ones each morning with monitor mode
- 🏪 **Multi-location brands** — compare the "% recommend" score and review volume of every branch Page side by side
- 🔎 **Competitor research** — read what customers praise or complain about at competing restaurants, venues or shops, by tag and keyword
- 🧑‍💼 **Local marketing agencies** — find businesses with negative reviews and no owner reply as outreach leads
- 🤖 **AI and research teams** — feed review text, tags and verdicts to an LLM for topic and sentiment analysis
- 📈 **Customer-experience teams** — track the verdict mix week over week on a schedule

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

Facebook Reviews Scraper is pay-per-result: **$2.00 per 1,000 reviews** ($0.002 per review), no start fee. The optional comments add-on is $0.001 per review that comes back with at least one comment.

| Reviews | Cost | With comments on every review |
|---:|---:|---:|
| 10 | $0.02 | $0.03 |
| 100 | $0.20 | $0.30 |
| 1,000 | $2.00 | $3.00 |
| 10,000 | $20.00 | $30.00 |

Apify platform usage is included in the price. A 931-review run from two Pages took 5.5 minutes on the default 256 MB.

### Integrations, API, scheduling & MCP

- **Schedules:** run Facebook Reviews Scraper daily or weekly from the **Schedules** tab; turn on `monitorMode` to get only new reviews.
- **Webhooks:** fire a URL when a run finishes — push new reviews to your CRM, Slack or a sheet.
- **No-code:** Make, Zapier, n8n, Google Sheets, Airtable, Slack via [Apify integrations](https://docs.apify.com/integrations).
- **API:** call it from Node.js or Python with `apify-client` — code on the [API tab](https://apify.com/topapi/facebook-reviews-scraper/api/python) and the [Apify API reference](https://docs.apify.com/api/v2).
- **MCP / AI agents:** connect Claude, Cursor or any MCP client through the [MCP tab](https://apify.com/topapi/facebook-reviews-scraper/api/mcp) and ask for a Page's Facebook reviews in plain language.

### More Facebook and review scrapers by TopApi

<table>
<tr>
<td>💬 <a href="https://apify.com/topapi/facebook-comments-scraper">Facebook Comments Scraper</a></td>
<td>📰 <a href="https://apify.com/topapi/facebook-page-posts-scraper">Facebook Page Posts Scraper</a></td>
<td>📊 <a href="https://apify.com/topapi/facebook-post-details-scraper">Facebook Post Details Scraper</a></td>
</tr>
<tr>
<td>🔎 <a href="https://apify.com/topapi/facebook-search-posts-scraper">Facebook Search Posts Scraper</a></td>
<td>🛒 <a href="https://apify.com/topapi/facebook-marketplace-scraper">Facebook Marketplace Scraper</a></td>
<td>⭐ <a href="https://apify.com/topapi/google-maps-reviews-scraper">Google Maps Reviews Scraper</a></td>
</tr>
<tr>
<td>🍽️ <a href="https://apify.com/topapi/yelp-reviews-scraper">Yelp Reviews Scraper</a></td>
<td>✅ <a href="https://apify.com/topapi/trustpilot-reviews-scraper">Trustpilot Reviews Scraper</a></td>
<td>📍 <a href="https://apify.com/topapi/apple-maps-scraper">Apple Maps Scraper</a></td>
</tr>
<tr>
<td>📸 <a href="https://apify.com/topapi/instagram-profile-scraper">Instagram Profile Scraper</a></td>
<td colspan="2">🧭 <a href="https://apify.com/topapi">All TopApi scrapers</a></td>
</tr>
</table>

### Limits & empty runs

- **Facebook's public feed is shorter than its review count.** The header counts every review, but Facebook shows visitors only part of them: The Ritz reads "1,956 reviews" and serves 116; Joe's Stone Crab reads "14,543" and served 431, back to October 2016. The run summary marks such a Page `feed_end`.
- **Speed:** Facebook serves 3 reviews per request; about 170 reviews a minute with two Pages in parallel on 256 MB.
- **Up to 5,000 reviews per Page per run**; split very large jobs across runs with a date window.
- **Comments:** some reviews show a comment count but Facebook shows the comments only to signed-in users; those reviews come back with an empty `comments` list and no add-on charge.
- **Empty dataset:** the run summary names the cause per input — `no_reviews_tab` (the Page turned reviews off, e.g. most global brand Pages), `not_found` (no Page at that address), `invalid_input` (a group or post URL), or `all_filtered` (your filters removed everything).

### FAQ

#### How many reviews can Facebook Reviews Scraper collect from one Page?

Every review Facebook shows publicly, up to 5,000 per Page per run. On busy Pages that is often fewer than the "(N reviews)" count in the header, because Facebook does not show every review to visitors.

#### How much does Facebook Reviews Scraper cost?

$0.002 per review ($2.00 per 1,000), no start fee. Review comments are an optional $0.001 per review that comes back with comments.

#### Can I run Facebook Reviews Scraper on a schedule to get only new reviews?

Yes. Save your input as a task, add a schedule, and turn on `monitorMode`. The first run returns the latest reviews; every later run returns only reviews posted since, per Page.

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

Yes. Set `recommendationType` to `negative` to keep only "doesn't recommend" reviews, or `positive` for the rest. Add `onlyReviewsNewerThan` for a recent window.

#### Does Facebook Reviews Scraper get the business owner's replies?

Yes, with `includeComments`. The comments under a review, which often include the owner's reply, come back in the review's `comments` list, with nested `replies` if you set `maxRepliesPerComment`.

#### Can I find Facebook Pages by business name instead of URL?

Yes. Put names in `searchQueries`; Facebook Reviews Scraper uses Facebook's own Page search and scrapes the top `maxPagesPerQuery` matches. Exact business names work best.

#### Do I need a Facebook account, cookies or an API key for Facebook Reviews Scraper?

No. Facebook Reviews Scraper reads only what Facebook shows to any visitor of a public Page; you pass Page URLs or names and nothing else.

#### Can I use Facebook Reviews Scraper with the Apify API?

Yes. The API lets you start runs, fetch datasets and manage schedules. Use `apify-client` for [Node.js](https://apify.com/topapi/facebook-reviews-scraper/api/javascript) or [Python](https://apify.com/topapi/facebook-reviews-scraper/api/python); the API tab has ready-to-paste code.

#### Can I use Facebook Reviews Scraper through an MCP server?

Yes. Open the [MCP tab](https://apify.com/topapi/facebook-reviews-scraper/api/mcp), connect your MCP client (Claude Desktop, Cursor, LibreChat…) and ask for a Page's Facebook reviews in plain language. Turn on `compact` for shorter rows.

#### Why did my Facebook Reviews Scraper run return no reviews?

Most often the Page has no reviews tab (the owner turned reviews off — common on big brand Pages), the address is not a Page, or your filters removed every review. The run's status message and the `RUN_SUMMARY` record name the cause for each input.

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

Facebook Reviews Scraper extracts only publicly available reviews; it does not log in or collect private data. Results may still contain personal data, which is regulated (for example by GDPR). Make sure you have a legitimate purpose before you use it.

#### Your feedback

We keep improving Facebook Reviews Scraper. Found a bug or missing a field? Open an issue on the [Issues tab](https://apify.com/topapi/facebook-reviews-scraper/issues/open).

# Actor input Schema

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

Public Facebook Pages: a Page URL (https://www.facebook.com/katzsdeli), its /reviews URL, a profile.php?id= URL, a bare username (katzsdeli) or a numeric Page id. Groups and single posts have no reviews.

## `searchQueries` (type: `array`):

Business names to look up with Facebook's own Page search, e.g. "Katz's Delicatessen" or "Joe's Stone Crab Miami". The exact business name works best; the matched Pages are listed in the run summary.

## `maxPagesPerQuery` (type: `integer`):

How many of Facebook's top Page results to scrape for each search name. 1 = the best match only.

## `recommendationType` (type: `string`):

Keep every review, only the ones that recommend the Page, or only the ones that don't.

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

Keep reviews posted on or after this date: absolute (2026-01-01) or relative (30 days, 6 months, 1 year). Leave empty for no lower bound.

## `onlyReviewsOlderThan` (type: `string`):

Keep reviews posted before this date, e.g. 2026-01-01 or 1 year. Combine with 'Reviews newer than' for a date range.

## `keywords` (type: `array`):

Keep only reviews whose text or tags contain at least one of these words or phrases (not case-sensitive), e.g. "service", "delivery".

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

Skip reviews that are a recommendation with no written text.

## `onlyWithPhotos` (type: `boolean`):

Keep only reviews that carry at least one photo.

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

Add the public comments under each review (often the Page owner's reply), newest first: text, author, date, likes and reply count. Charged as review-comments at $0.001 per review that comes back with at least one comment.

## `maxCommentsPerReview` (type: `integer`):

Most comments to collect under each review (only with 'Include review comments').

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

Most replies to collect under each comment, nested in its `replies` list. 0 = no replies.

## `monitorMode` (type: `boolean`):

Return only reviews that previous runs have not delivered; the first run returns the latest reviews and sets the starting point. Memory is kept per Page in a named key-value store.

## `monitorStoreName` (type: `string`):

Name of the key-value store that remembers what was delivered. Use a different name per schedule if you run separate monitors on the same Pages.

## `maxReviewsPerPage` (type: `integer`):

Most reviews to return from each Page, newest first. 0 = every public review (up to 5,000 per Page per run). Facebook serves 3 reviews per request, so 100 reviews take about 34 requests.

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

Most reviews for the whole run across all Pages. 0 = no total limit (the per-Page limit still applies).

## `compact` (type: `boolean`):

Core fields only (review text, verdict, date, reviewer, counts, Page score), sized for AI agents and MCP clients.

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

No proxy (default) is the fastest route: Facebook serves the reviews tab to Apify's own servers. If Facebook refuses a Page there, the run moves to Apify datacenter proxy and then to a residential IP by itself. A proxy you pick here is used as given.

## `maxConcurrency` (type: `integer`):

How many Pages are scraped at the same time.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/copperkettleyqr"
    }
  ],
  "maxPagesPerQuery": 1,
  "recommendationType": "all",
  "onlyWithText": false,
  "onlyWithPhotos": false,
  "includeComments": false,
  "maxCommentsPerReview": 10,
  "maxRepliesPerComment": 0,
  "monitorMode": false,
  "monitorStoreName": "facebook-reviews-monitor",
  "maxReviewsPerPage": 20,
  "maxReviews": 0,
  "compact": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "maxConcurrency": 3
}
```

# Actor output Schema

## `reviews` (type: `string`):

The dataset of Facebook Page reviews (one item per review / recommendation).

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

Per-Page counts (read, filtered, already delivered, delivered), the status of every input and search query, requests made and bytes transferred.

# 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"
        }
    ],
    "maxReviewsPerPage": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("topapi/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" }],
    "maxReviewsPerPage": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("topapi/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"
    }
  ],
  "maxReviewsPerPage": 20
}' |
apify call topapi/facebook-reviews-scraper --silent --output-dataset

```

## MCP server setup

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