Facebook Reviews Scraper: Recommends, Text, Replies, Rating
Pricing
from $1.26 / 1,000 reviews
Facebook Reviews Scraper: Recommends, Text, Replies, Rating
Scrape reviews of public Facebook Pages: reviewer, recommends or not, text, tags, date, reactions, comments, Page replies and the Page rating. Page links in, one row per review. No login.
Pricing
from $1.26 / 1,000 reviews
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Facebook Reviews Scraper: Recommends, Text, Page Replies, Rating
From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.
Why choose this actor?
- Every field a review has, in columns. Reviewer, the recommend or not recommend verdict as
trueorfalse, the review text, the tags the reviewer picked, the exact date, reactions with their split, the comment count, and whether the Page replied, with the reply text and date. Each row also carries the Page's overall rating line, for example94% recommend (201 reviews), split intopage_recommend_percentandpage_review_count. - Honest about depth. Facebook shows a logged out visitor only part of a Page's reviews. In our test on 23 October 2026 that was 62 of the 201 a small restaurant advertises, 88 of 603 for a Page with more, and 113 of 1,955 for a busy venue. The run summary tells you, per Page, how many were reachable next to the number Facebook advertises. You pay only for rows you receive.
- No Facebook account. No login, no cookies of yours, no browser and no CAPTCHA solving. Pages that do not exist, personal profiles and Pages with no reviews get a free
errorrow with the reason and are never charged.
Part of The Mine Works Marketing, SEO and reviews family: Facebook Ad Library Scraper, Google Ads Transparency Scraper, Similarweb Scraper, Google News Scraper, Trustpilot Reviews Scraper, Google Trends Scraper.
Try it in one minute
Paste this into the JSON tab of the input page. It returns 30 reviews of one restaurant Page, with the Page's replies. It took 23 seconds in our test.
{"startUrls": [{ "url": "https://www.facebook.com/copperkettleyqr/reviews" }],"maxReviewsPerPage": 30}
Apify's free plan includes $5 of credit every month, which covers about 2,100 reviews at this actor's price.
Copy to your AI assistant
themineworks/facebook-reviews-scraper on Apify. Reads reviews of public Facebook Pages as a logged out visitor and returns one flat row per review: reviewer_name, reviewer_id, reviewer_url, recommends (true or false), verdict_text, text, tags, created_at, reactions_count, likes_count, reactions, comments_count, owner_replied, owner_reply_text, owner_reply_date, owner_replies, comments, photo_urls, review_id, review_url and the Page: page_name, page_id, page_url, page_rating_text, page_recommend_percent, page_review_count. Call ApifyClient("TOKEN").actor("themineworks/facebook-reviews-scraper").call(run_input={"startUrls": [{"url": "https://www.facebook.com/copperkettleyqr/reviews"}], "maxReviewsPerPage": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Give startUrls (Page or /reviews links) and or pages (usernames or numeric ids). Optional: maxReviewsPerPage (default 50, applies to each Page, 0 means all that Facebook shows), onlyReviewsNewerThan (YYYY-MM-DD), includeComments (default true). Skip rows with a _type field (summary, info, error: never charged). Facebook shows a logged out visitor only part of a Page's reviews, so fewer rows than page_review_count is normal; the summary row (and the OUTPUT record) lists reviews_delivered and advertised_reviews per Page. Full spec: GET https://api.apify.com/v2/acts/themineworks~facebook-reviews-scraper/builds/default (Bearer TOKEN). Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
Key features
- Recommend verdict as a boolean. Facebook replaced star ratings with recommend or not recommend in 2018.
recommendsistrueorfalse;verdict_textkeeps Facebook's own sentence ("Jay Enn doesn't recommend The Copper Kettle Restaurant."). - Page replies marked. A comment under a review is the Page's reply when its author is the Page.
owner_replied,owner_reply_textandowner_reply_dategive the first reply;owner_replieslists all of them;commentsholds the whole visible thread with replies nested andis_page_owneron each comment. - Review tags and photos. Tags such as
Child-friendlyorFast deliverywhen the reviewer picked any, and the links of photos attached to the review. - Reactions with their split.
reactions_countis every reaction;reactionslists type and count (Like, Love, Haha, Wow and so on), andlikes_countis Likes only. - Stop at a date.
onlyReviewsNewerThanends paging at the first older review. - Many Pages, one run. Up to 5,000 Pages; four are read at the same time. The input accepts Page links,
/reviewslinks,m.facebook.comlinks,profile.php?id=links, usernames and numeric ids. - Stops cleanly. The run stops before its time limit, on your max cost, after repeated refusals by Facebook, or when two answers in a row bring nothing new, and it keeps every row it read.
How to use it
Reputation monitoring
Schedule a weekly run with onlyReviewsNewerThan set to a week ago. Rows with recommends: false and owner_replied: false are the unanswered complaints.
{"startUrls": [{ "url": "https://www.facebook.com/copperkettleyqr" }],"maxReviewsPerPage": 0,"onlyReviewsNewerThan": "2026-10-01"}
Compare competitors
Put several Pages in one run and sort the rows by page_name. page_recommend_percent and page_review_count repeat on every row, so a combined sheet needs no second lookup.
{"startUrls": [{ "url": "https://www.facebook.com/copperkettleyqr" },{ "url": "https://www.facebook.com/kissatanto" }],"maxReviewsPerPage": 100}
Sentiment datasets
text with the binary recommends label, tags and created_at make a labelled set. Many rows have no text (the reviewer only gave a verdict); filter on text if you need words.
Light export
{"pages": ["copperkettleyqr", "kissatanto"],"maxReviewsPerPage": 200,"includeComments": false}
Off, rows carry comments_count and the first Page reply but not the comments and owner_replies lists. Same price either way.
Input parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
startUrls | array | the sample Page | Facebook Page or /reviews links. |
pages | array of strings | empty | Usernames (copperkettleyqr, @copperkettleyqr) or numeric Page ids. |
maxReviewsPerPage | integer | 50 | Most reviews from each Page (not the run total). 0 means every review Facebook shows. |
onlyReviewsNewerThan | string | empty | YYYY-MM-DD. Paging stops at the first older review. |
includeComments | boolean | true | Include the comments thread and owner_replies list. |
proxyConfiguration | object | {"useApifyProxy": true} | Apify datacenter proxy, which is all this actor needs. Residential is not used, even if selected. |
Give startUrls, pages or both. Up to 5,000 Pages per run. List each Page once; two links to the same Page give one set of rows.
What data do you get?
One row per review. Fields that a review does not have are left out of that row.
| Field | What it is |
|---|---|
review_id, review_url | Facebook's id of the review post and its permalink |
reviewer_name, reviewer_id, reviewer_url | The reviewer. The URL is present when the profile is public |
recommends, verdict_text | true or false, and Facebook's sentence |
text | The review; absent when the reviewer gave only a verdict |
tags | Review tags the reviewer picked |
created_at | ISO 8601 UTC |
reactions_count, likes_count, reactions | All reactions, Likes only, and the split by type |
comments_count | Comments and replies Facebook counts under the review |
owner_replied, owner_reply_text, owner_reply_date | The Page's first reply |
owner_replies | Every reply by the Page: text, created_at, reactions_count |
comments | The comments Facebook includes, replies nested: id, author_name, author_id, author_url, text, created_at, reactions_count, is_page_owner, replies |
photo_urls | Photos attached to the review (signed links that expire within hours) |
page_name, page_id, page_url | The Page |
page_rating_text, page_recommend_percent, page_review_count | The Page's overall rating line and its parts |
input, scraped_at | The entry you gave, and when the row was written |
Summary row (_type: "summary", never charged, also saved as the OUTPUT record): pages_requested, pages_read, pages_failed, pages_without_reviews, reviews_delivered, charged_for, transport (requests, megabytes, block_rate) and per_page, one entry per Page with advertised_reviews, reviews_delivered, reached_end and status (all_reachable_delivered, max_reviews_reached, older_than_cutoff, partial, not_available, personal_profile, no_reviews, blocked).
Error rows (_type: "error", never charged): one per entry that gave no reviews, with error_type, identifier and reason.
Output examples
A review with a Page reply (test run, 23 Oct 2026, trimmed):
{"review_id": "10159367163365044","review_url": "https://www.facebook.com/jayna.nicholson/posts/pfbid0FSQcQb26G1WcLGW2AmuuogpjgEatGc8rodR2qSD8HoP1moQG5cG3sMYtHPDEZ4sul","reviewer_name": "Jay Enn","recommends": false,"verdict_text": "Jay Enn doesn't recommend The Copper Kettle Restaurant.","text": "Normally the food from here is really good but we got pizza last night and it was somewhere in the range of sub par to just really not good. ...","tags": [],"created_at": "2024-04-11T17:40:55.000Z","reactions_count": 1,"reactions": [{ "type": "Haha", "count": 1 }],"comments_count": 1,"owner_replied": true,"owner_reply_text": "Thank you for sharing your feedback with us, Jay. We're sorry to hear that your recent experience with our pizza was disappointing. ...","owner_reply_date": "2024-04-15T14:44:58.000Z","page_name": "The Copper Kettle Restaurant","page_rating_text": "94% recommend (201 reviews)","page_recommend_percent": 94,"page_review_count": 201}
A review with tags:
{"review_id": "10163596241145646","reviewer_name": "Jill Schmidt","recommends": true,"text": "We had the Christmas platter and it was fantastic! Enough food for easily 2 meals. ...","tags": ["Large menu"],"created_at": "2020-05-24T02:15:54.000Z","comments_count": 1,"owner_replied": true,"owner_reply_date": "2020-05-25T23:02:07.000Z"}
The per Page entry of the summary for a full run on that Page:
{ "page_name": "The Copper Kettle Restaurant", "status": "all_reachable_delivered", "advertised_reviews": 201, "reviews_delivered": 62, "reached_end": true }
Pricing
Pay per event: you pay for the reviews you receive, plus a flat $0.003 per run, whatever memory you choose.
| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
review-scraped | Once per review row stored in your dataset | $2.25 per 1,000 | $1.80 per 1,000 | $1.53 per 1,000 | $1.26 per 1,000 |
run-start | Once per run, when the first reviews are stored | $0.003 | $0.003 | $0.003 | $0.003 |
The price of one review is the price per 1,000 divided by 1,000.
Never charged:
- Pages that do not exist, personal profiles, Pages without reviews, and entries that are not Pages (each gets an error row);
- the summary, info and error rows;
- reviews past
maxReviewsPerPageor older thanonlyReviewsNewerThan; - a run with no valid input or whose Pages returned no reviews: the start fee is charged only when the first reviews are stored;
- anything past your "Max cost per run". The actor checks the budget before each batch and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.
Run it on a schedule
- Open the actor in Apify Console, set your input and click Save as a new task.
- In the task, open Schedules, click Add schedule and pick how often.
- Compare runs on
review_idto find new reviews, or useonlyReviewsNewerThanso each run reads only recent ones. - Optional: add an integration (Google Sheets, Slack, a webhook) so new complaints reach your team.
FAQ
Do I need a Facebook account or cookies?
No. The actor reads each Page's public Reviews tab as a visitor who is not logged in.
How many reviews can I get per Page?
Fewer than the Page advertises. Facebook gives a logged out visitor a limited list: 62 of 201, 88 of 603 and 113 of 1,955 on the three Pages we tried, the same on datacenter and residential proxy. The list reaches back years (2016 on the first Page), and includes reviews with no text. The summary row shows advertised_reviews and reviews_delivered for every Page, so you know what you got.
Why is there no star rating?
Facebook removed star ratings in 2018. A review is a recommend or a do not recommend, which is recommends. The Page level equivalent is page_recommend_percent.
Are the Page's replies included?
Yes, when Facebook includes the comments under a review. For some reviews Facebook reports a comment count but sends no comment text; comments_count is then higher than the number of items in comments. On the three Pages we tried, 34 of 36 reviews with comments on one Page carried them, 16 of 57 on another and none on the third.
Why do some rows have no text?
A recommendation can be a verdict alone. About one review in five in our test had no text. Filter on text if you only want written reviews.
Is the language fixed?
The verdict is read from Facebook's English sentence, requested in English. Review text is returned in whatever language the reviewer used.
How fast is it and what does a run cost me?
Facebook sends three reviews per request, so a full Page of 60 reviews takes 20 requests and about 50 seconds. Four Pages are read at the same time. In our tests none of about 300 requests was refused.
Which formats can I download?
JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. In CSV and Excel the nested comments and owner_replies are flattened into columns such as comments/0/text; use JSON to keep the thread.
Can I use it from Claude, ChatGPT or Cursor (MCP)?
Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/facebook-reviews-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code:
claude mcp add -t http facebook-reviews-scraper "https://mcp.apify.com/?tools=themineworks/facebook-reviews-scraper"
Is it legal to scrape Facebook reviews?
The actor reads only reviews that anyone can see without logging in. Reviews are their authors' words and contain personal data (names, profile links). You are responsible for how you use the data, including Facebook's terms and data protection law such as GDPR and CCPA. This is general information, not legal advice.
Integrations
- Google Sheets: send each run's reviews to a sheet with Apify's Google Sheets integration; one row per review fits a sheet as is.
- Make, Zapier and n8n: start a run and read its dataset, for example "new negative reviews without a reply every Monday to Slack".
- Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
- API and SDKs: run it from Python or JavaScript with the Apify client (see "Copy to your AI assistant" above).
- MCP clients: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.
More from The Mine Works
Marketing, SEO and reviews
- Facebook Ad Library Scraper
- Google Ads Transparency Scraper
- Similarweb Scraper
- Google News Scraper
- Trustpilot Reviews Scraper
- Google Trends Scraper
- Semrush Scraper
- App Reviews Scraper
- Trustpilot Business Search
- TripAdvisor Reviews Scraper
- Username Checker
- Backlink Building Agent
Social media and video
Leads and business directories
Real estate
Science, health and government data
Jobs and hiring
Company and business data
E-commerce and marketplaces
Food and local services
Developer and AI tools
More tools

