# Facebook Page Reviews Scraper – Recommendations (`scrapingmonkey/facebook-page-reviews-scraper`) Actor

Collect public Facebook Page reviews and recommendations with pagination. Export review text, reviewers, engagement, attachments, and available Page rating context in one row per review.

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

## Pricing

from $1.00 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Collect the public reviews and recommendations visible on a Facebook Page. **Facebook Page Reviews Scraper** returns review text, recommendation wording, reviewer identity, engagement, attachments, and available Page rating context in one row per review.

Use Page usernames or URLs and choose how many review pages to request. The same flat fields appear in the table and JSON, making the results suitable for feedback analysis, reporting, and recurring collection. No Facebook login or cookies are required.

| At a glance | Details |
|---|---|
| 📥 Input | Facebook Page usernames or Page URLs |
| 📤 Output | Reviews, recommendations, reviewers, engagement, Page rating context |
| 📄 Pagination | 1–100 pages per Page; default `1` |
| 🔐 Login required | No |
| 💾 Delivery | One table, one row per returned review |

### What the Facebook Page reviews scraper collects ⭐

The Actor collects publicly returned review and recommendation posts, including text, URL, publication time, reviewer, reactions, comment and share counts, and media attachments. It retains the recommendation wording alongside the normalized recommendation value.

Page context can include displayed rating text, recommendation percentage, and review total. These figures describe the source summary, not the number of rows returned by the run. A numeric star rating is recorded only when the returned wording contains a recognizable rating.

### How to scrape Facebook Page reviews 🚀

1. Add Page usernames or URLs to `inputList`.
2. Set `pagesPerProfile` to the number of review pages to attempt.
3. Run the Actor and review text alongside `recommendation` and `rating`.
4. Export results or connect them to a feedback-reporting workflow.

```json
{
  "inputList": ["Meta"],
  "pagesPerProfile": 2
}
```

Use a Page whose reviews are publicly visible. This example shows the input format and does not guarantee that a particular Page currently exposes reviews.

### Review data fields and output 📦

| Field group | Included data |
|---|---|
| Review | ID, recommendation ID, URL, text, publication time |
| Recommendation | Source wording, normalized recommendation, flag, available star rating |
| Reviewer | IDs, username, name, profile URL, picture, verification flag |
| Engagement and media | Reactions, comments, shares, reaction breakdown, ordered attachments |
| Page and summary | Source Page identity, rating text, recommendation percentage, review total |

Complete illustrative success row. Harbor Workshop and the media URLs below are examples, not a live run.

```json
{
  "input": "harborworkshop",
  "status": "success",
  "id": "123456789055001",
  "recommendation_id": "123456789055002",
  "url": "https://www.facebook.com/alex.morgan.example/posts/123456789055001/",
  "text": "The beginner class was well organized, and the instructor explained each step clearly.",
  "timestamp": 1788256800,
  "published_at": "2026-09-01T10:00:00Z",
  "recommendation_text": "Alex Morgan recommends Harbor Workshop.",
  "recommendation": "recommended",
  "is_recommended": true,
  "rating": 0,
  "reactions_count": 4,
  "comments_count": 1,
  "shares_count": 0,
  "reviewer.id": "100098765432101",
  "reviewer.page_id": "",
  "reviewer.username": "alex.morgan.example",
  "reviewer.name": "Alex Morgan",
  "reviewer.url": "https://www.facebook.com/alex.morgan.example/",
  "reviewer.profile_picture_url": "https://example.com/media/alex-morgan.jpg",
  "reviewer.is_verified": false,
  "reactions.id": [
    "1635855486666999"
  ],
  "reactions.type": [
    "Like"
  ],
  "reactions.count": [
    4
  ],
  "media.id": [
    "123456789012346"
  ],
  "media.type": [
    "photo"
  ],
  "media.url": [
    "https://www.facebook.com/photo/?fbid=123456789012346"
  ],
  "media.image_url": [
    "https://example.com/media/workshop-open-day.jpg"
  ],
  "media.thumbnail_url": [
    "https://example.com/media/workshop-open-day-thumb.jpg"
  ],
  "media.video_url_hd": [
    ""
  ],
  "media.video_url_sd": [
    ""
  ],
  "media.dash_manifest_url": [
    ""
  ],
  "media.dash_manifest": [
    ""
  ],
  "media.duration_ms": [
    0
  ],
  "media.width": [
    1200
  ],
  "media.height": [
    800
  ],
  "media.alt_text": [
    "Visitors making a wooden stool at the workshop open day."
  ],
  "media.captions_url": [
    ""
  ],
  "source_profile.id": "100012345678901",
  "source_profile.page_id": "100012345678901",
  "source_profile.username": "harborworkshop",
  "source_profile.name": "Harbor Workshop",
  "source_profile.url": "https://www.facebook.com/harborworkshop/",
  "source_profile.profile_picture_url": "https://example.com/media/harbor-workshop.jpg",
  "source_profile.is_verified": false,
  "rating_text": "96% recommend (150 reviews)",
  "recommend_percent": 96,
  "reviews_total": 150
}
```

One review remains one row. JSON and the table share flat keys such as `reviewer.name` and `source_profile.name`. Reactions and attachments use aligned lists; matching positions describe the same reaction or media item. Nested lists retain their dimensions when present.

`rating: 0` can mean no numeric star rating was recognized. An empty `recommendation` with `is_recommended: false` is not a confirmed negative recommendation; inspect `recommendation_text`. Other optional fields can be empty, zero, false, or null. A failed row preserves `input`, sets `status` to `failed`, and makes all review-data columns null.

### Input requirements and coverage ⚙️

| Parameter | Type | Required | Default | Rules |
|---|---|---|---|---|
| `inputList` | Array of strings | Yes | None | At least one Page username or Page URL |
| `pagesPerProfile` | Integer | No | `1` | From `1` to `100` |

Submit a plain Page username without `@`, a Page URL, or a numeric Page ID. URLs using `profile.php?id=...` and older `/pages/NAME/ID` forms are recognized when they contain a valid numeric ID. Individual review, post, Reel, group, or event links are not Page inputs.

The initial response counts as page 1. Later requests ask for up to 3 reviews each and continue while Facebook supplies a usable next page. Duplicate review IDs are removed within each Page's collection. The returned row count can be lower than the Page's displayed review total.

### Facebook review scraping use cases 🎯

#### Customer feedback themes

Group public review text by service, product, or experience while retaining the original review URL for analysis.

#### Multi-location reporting

Combine several business Pages and use source Page fields to keep each location's feedback separate.

#### Reputation monitoring

Schedule repeated collection and compare stable review IDs and available recommendation wording in your reporting system.

#### Review context analysis

Study text and visible engagement together, using Page summary figures as context rather than a count of collected reviews.

### Pricing and billable review rows 💰

Check the Actor's **Pricing** tab for the active model and rate. Under dataset-item pricing, each saved success or failed row can be billable. One returned review is one success row; media and Page summary fields remain in that row.

Invalid inputs, unavailable Pages, an initial response with no reviews, or a page that fails after retries can produce a failed row. Retry attempts do not independently add rows. More requested pages can produce more saved results.

### Facebook Page reviews API and integrations 🔌

Replace `$ACTOR_ID` with the ID from the Actor's API tab and `$APIFY_TOKEN` with your Apify token.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["Meta"],"pagesPerProfile":2}'
```

Use Apify schedules for periodic collection, webhooks for completion events, and integrations for Google Sheets, Make, Zapier, cloud storage, or a customer-feedback dashboard.

### Reliability and limits ⚠️

Temporary failures are retried. Reviews already saved remain available if a later page fails. Facebook can restrict the reviews section, return only a visible subset, or omit text and summary figures.

Recommendation and star-rating interpretation depends on Facebook's returned wording. Unrecognized wording can leave the recommendation empty or rating at zero; do not treat those defaults as negative feedback. Direct media URLs can expire.

### Frequently asked questions ❓

#### Does it collect recommendations and star reviews?

Yes. It retains recommendation wording and records a star rating when that wording contains a recognizable numeric rating.

#### Does a rating of zero mean a zero-star review?

No. Zero is also the default when no star rating is recognized. Use the text and recommendation fields for context.

#### Does `is_recommended: false` always mean a negative review?

No. A recognized negative recommendation uses `recommendation: "not_recommended"`. An empty recommendation means the wording was not classified.

#### Why is `reviews_total` larger than the number of rows?

It is the Page's displayed summary total. Your requested pages and Facebook's public collection determine the dataset row count.

#### Can I collect comments under each review?

This Actor returns comment counts. Pass review post URLs to Facebook Post Comments Scraper for available comment text.

### Support, responsible use, and related actors 🛟

For support, share the run ID, a safe public Page input, the page setting, and the field you expected. Keep credentials private.

Use public feedback lawfully, respecting privacy, copyright, and applicable platform terms.

# Actor input Schema

## `inputList` (type: `array`):

Add one Facebook Page username or full Page URL per item. Every input produces success or failed output.

## `pagesPerProfile` (type: `integer`):

Maximum number of result pages to request for each input.

## Actor input object example

```json
{
  "inputList": [
    "Meta"
  ],
  "pagesPerProfile": 1
}
```

# Actor output Schema

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

Actor dataset results with input and status columns.

# 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 = {
    "inputList": [
        "Meta"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/facebook-page-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 = { "inputList": ["Meta"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/facebook-page-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 '{
  "inputList": [
    "Meta"
  ]
}' |
apify call scrapingmonkey/facebook-page-reviews-scraper --silent --output-dataset

```

## MCP server setup

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