Facebook Reviews Scraper
Pricing
from $1.25 / 1,000 recommendations
Facebook Reviews Scraper
Collect public Facebook Page recommendations and non-recommendations. Export text, timestamps, status, engagement, Page details, and reviewer details, plus optional comments, replies, and media when requested and available.
Pricing
from $1.25 / 1,000 recommendations
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
⭐ Turn public Facebook Page feedback into structured data
Facebook Reviews Scraper helps developers, agencies, analysts, and business teams collect public Facebook Page recommendations and non-recommendations in an Apify dataset. Each row can include source-backed text, status, timestamps, engagement, Page details, and public reviewer details, with a direct recommendation link and a trustworthy reviewer ID or profile link when available. This gives you structured Page feedback to review or export without supplying Facebook credentials.
- Collect public Page recommendations with the Facebook reviews scraper task.
- Export public Facebook Page reviews with the Facebook Page reviews export task.
- Track public Page feedback over time with the Facebook recommendations monitoring task.
- Review newer Page recommendations with the Recent Facebook reviews task.
- Compare visible recommendation engagement with the Facebook review engagement analysis task.
📦 Data you can export
Each successful dataset row represents one public Facebook Page recommendation or non-recommendation and can contain:
recommendationIdandrecommendationUrl: Facebook's source identifier and stable direct public URL.createdAt,text, andrecommendationStatus: publication time, recommendation text, andrecommendsordoesNotRecommendwhen exposed.tags: visible recommendation tags when exposed.reactionCount,reactions,commentCount, andshareCount: visible engagement totals and reaction breakdowns when available.page: the reviewed Page's ID, name, image, and public URL.reviewer: the public reviewer name and image, plus a stable public ID and profile URL when trustworthy.media: source-hosted media details attached to the recommendation when available.comments: collected top-level comments and direct replies when requested and available.
Facebook does not expose every value on every recommendation. Missing values are omitted rather than inferred; the Actor does not fabricate star ratings, statuses, identities, or engagement.
Each row is the first eligible occurrence of a source recommendation. If the same recommendation appears again through another submitted handle, URL, ID, or equivalent target, the later match is ignored.
🚀 How to run the Actor
- Add one or more Facebook Page handles, Page URLs, review URLs, or numeric Page IDs under Facebook Pages.
- Set optional per-Page and run-wide recommendation limits. Leave Recommendations per Page empty to return all available results until the source is exhausted for each Page. Leave Total recommendations empty to return all available results until the submitted sources are exhausted.
- Set comment and reply limits if you want the Actor to request those source-available details. Use
0to exclude them. - Start the Actor, then open the default dataset to inspect or export saved recommendations.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
pageTargets | array of strings | Required list of public Facebook Page handles, Page URLs, review URLs, or numeric Page IDs. |
dateFrom | string | Returns only recommendations newer than a calendar date or relative date such as 7 days ago. Leave it empty to include recommendations from any date. |
maxRecommendationsPerPage | integer | Sets the maximum recommendations collected from each Page. Leave it empty to return all available results until the source is exhausted for that Page. |
maxRecommendations | integer | Sets the maximum recommendations collected across the run. Leave it empty to return all available results until the submitted sources are exhausted. |
maxCommentsPerRecommendation | integer | Sets the maximum source-available top-level comments requested per recommendation. Use 0 to leave comments out. |
maxRepliesPerComment | integer | Sets the maximum direct replies requested for each included comment. Use 0 to leave replies out. This setting is ignored when comments per recommendation is 0. |
Example input
This example uses the Actor's public default input:
{"pageTargets": ["portosbakery"],"maxCommentsPerRecommendation": 0,"maxRepliesPerComment": 0,"maxRecommendationsPerPage": 10,"maxRecommendations": 10}
🧾 Output
Dataset link
| Field | Type | What it does |
|---|---|---|
results | string | Opens the default dataset overview with the saved recommendation rows. |
Recommendation row fields
The default dataset has one recommendation row shape for both recommendations and non-recommendations. Optional fields are omitted when Facebook does not expose them or when the requested details are unavailable.
| Field | Type | What it does |
|---|---|---|
recommendationId | string | Facebook's source identifier for the recommendation. |
recommendationUrl | string (URL) | Stable direct public Facebook URL for the recommendation. |
createdAt | string (date-time) | Source publication time when exposed. |
recommendationStatus | string | recommends or doesNotRecommend when Facebook exposes the outcome. |
text | string | Text published with the recommendation when exposed. |
page | object | Facebook Page associated with the recommendation. |
page.id | string | Facebook's source identifier for the Page. |
page.name | string | Public name of the Facebook Page. |
page.url | string (URL) | Public Facebook URL for the Page when exposed. |
page.imageUrl | string (URL) | Public Page image URL when exposed. |
reviewer | object | Public source details for the recommendation author when exposed. |
reviewer.id | string | Stable public Facebook identifier when trustworthy. |
reviewer.name | string | Public name of the reviewer. |
reviewer.url | string (URL) | Stable public Facebook profile URL when trustworthy. |
reviewer.profilePictureUrl | string (URL) | Public profile picture URL when exposed. |
tags | array of strings | Labels or tags exposed by Facebook for the recommendation. |
reactionCount | integer | Source-reported total number of reactions when available. |
reactions | array of objects | Reaction totals grouped by source-exposed reaction type. |
reactions[].type | string | Source-exposed reaction type. |
reactions[].count | integer | Source-reported total for that reaction type. |
commentCount | integer | Source-reported total number of comments and replies when available. |
shareCount | integer | Source-reported total number of shares when available. |
media | array of objects | Source-hosted media attached to the recommendation. |
media[].id | string | Facebook's source identifier for the media when exposed. |
media[].type | string | Source-exposed media type when available. |
media[].url | string (URL) | Direct source-hosted media URL. |
media[].thumbnailUrl | string (URL) | Source-hosted thumbnail URL when available. |
media[].width | integer | Source-exposed media width in pixels. |
media[].height | integer | Source-exposed media height in pixels. |
media[].durationSeconds | number | Source-exposed media duration in seconds. |
media[].viewCount | integer | Source-reported media view total when available. |
media[].altText | string | Source-exposed alternative text for the media. |
comments | array of objects | Collected source-available top-level comments, limited by the input. |
comments[].id | string | Facebook's source identifier for the comment. |
comments[].text | string | Comment text when exposed. |
comments[].createdAt | string (date-time) | Source publication time for the comment. |
comments[].url | string (URL) | Direct Facebook URL for the comment when exposed. |
comments[].author | object | Public source details for the comment author when exposed. |
comments[].author.id | string | Facebook's source identifier for the comment author when exposed. |
comments[].author.name | string | Public name of the comment author when exposed. |
comments[].author.url | string (URL) | Public Facebook profile URL for the comment author when exposed. |
comments[].author.profilePictureUrl | string (URL) | Public profile picture URL for the comment author when exposed. |
comments[].reactionCount | integer | Source-reported reaction total for the comment when available. |
comments[].replyCount | integer | Source-reported total number of direct replies when available. |
comments[].media | array of objects | Source-hosted media attached to the comment. |
comments[].media[].id | string | Facebook's source identifier for the comment media when exposed. |
comments[].media[].type | string | Source-exposed type of the comment media when available. |
comments[].media[].url | string (URL) | Direct source-hosted URL for the comment media. |
comments[].media[].thumbnailUrl | string (URL) | Source-hosted thumbnail URL for the comment media when available. |
comments[].media[].width | integer | Source-exposed width of the comment media in pixels. |
comments[].media[].height | integer | Source-exposed height of the comment media in pixels. |
comments[].media[].durationSeconds | number | Source-exposed duration of the comment media in seconds. |
comments[].media[].viewCount | integer | Source-reported media view total when available. |
comments[].media[].altText | string | Source-exposed alternative text for the comment media. |
comments[].replies | array of objects | Collected direct replies to the comment, limited by the input. |
comments[].replies[].id | string | Facebook's source identifier for the reply. |
comments[].replies[].text | string | Reply text when exposed. |
comments[].replies[].createdAt | string (date-time) | Source publication time for the reply. |
comments[].replies[].url | string (URL) | Direct Facebook URL for the reply when exposed. |
comments[].replies[].author | object | Public source details for the reply author when exposed. |
comments[].replies[].author.id | string | Facebook's source identifier for the reply author when exposed. |
comments[].replies[].author.name | string | Public name of the reply author when exposed. |
comments[].replies[].author.url | string (URL) | Public Facebook profile URL for the reply author when exposed. |
comments[].replies[].author.profilePictureUrl | string (URL) | Public profile picture URL for the reply author when exposed. |
comments[].replies[].reactionCount | integer | Source-reported reaction total for the reply when available. |
comments[].replies[].media | array of objects | Source-hosted media attached to the reply. |
comments[].replies[].media[].id | string | Facebook's source identifier for the reply media when exposed. |
comments[].replies[].media[].type | string | Source-exposed type of the reply media when available. |
comments[].replies[].media[].url | string (URL) | Direct source-hosted URL for the reply media. |
comments[].replies[].media[].thumbnailUrl | string (URL) | Source-hosted thumbnail URL for the reply media when available. |
comments[].replies[].media[].width | integer | Source-exposed width of the reply media in pixels. |
comments[].replies[].media[].height | integer | Source-exposed height of the reply media in pixels. |
comments[].replies[].media[].durationSeconds | number | Source-exposed duration of the reply media in seconds. |
comments[].replies[].media[].viewCount | integer | Source-reported media view total when available. |
comments[].replies[].media[].altText | string | Source-exposed alternative text for the reply media. |
Example recommendation
This genuine saved row includes one top-level comment. Optional fields that Facebook did not return are absent.
{"recommendationId": "UzpfSTEwMDAxMTUwMTE0ODE1MDoyNzg3MDIxMzY1MDI0NTQxOjI3ODcwMjEzNjUwMjQ1NDE=","recommendationUrl": "https://www.facebook.com/fotografpoznan2/posts/2787021365024541","createdAt": "2026-07-23T10:53:13.000Z","recommendationStatus": "recommends","text": "Bardzo polecam współpracę z panią Agnieszką Majchrzak. Kupowaliśmy mieszkanie i dzięki pani Agnieszce cały proces przeszedł spokojnie i bezstresowo. Od samego początku czuliśmy się zaopiekowani i mogliśmy liczyć na profesjonalne wsparcie na każdym etapie. Wszystkie formalności były jasno wyjaśnione, a komunikacja przebiegała szybko i bezproblemowo. Z całego serca polecamy!","reactionCount": 0,"commentCount": 1,"shareCount": 0,"page": {"id": "100054189468166","name": "homfi","url": "https://www.facebook.com/homficom","imageUrl": "https://scontent-lga3-2.xx.fbcdn.net/v/t39.30808-1/305569664_8453045728101706_5469064813037601261_n.jpg?stp=dst-jpg_tt6&cstp=mx2047x2047&ctp=s720x720&_nc_cat=107&ccb=1-7&_nc_sid=3ab345&_nc_ohc=bbRYQ-jWEFsQ7kNvwEP2QtV&_nc_oc=AdqQC9jSP3dDJPdxJdMEP1rwvEoiElLWGXySHfcVIAxBqZInEMkY8b-ucbBP6sh2VBY&_nc_zt=24&_nc_ht=scontent-lga3-2.xx&_nc_gid=LCR5XcYES0kMAJ9LKuRQaA&_nc_ss=70289&oh=00_AQKZETr-kbVsfPmSlcpfqNPc0qZWYFU5LHvIVG1sSzZXrA&oe=6A9B1799"},"reviewer": {"id": "100011501148150","name": "Eliz Burk","url": "https://www.facebook.com/fotografpoznan2","profilePictureUrl": "https://scontent-lga3-2.xx.fbcdn.net/v/t39.30808-1/460942611_2208110809582269_7479974801955945577_n.jpg?stp=c0.173.1365.1365a_cp0_dst-jpg_tt6&cstp=mx1365x1365&ctp=s50x50&_nc_cat=101&ccb=1-7&_nc_sid=1d2534&_nc_ohc=3v8WtIFcWTkQ7kNvwFhEBZf&_nc_oc=Adod9U2AxXTr69fuV11tyAn9bgNkerCZqfyVaBu2E6PM-yA090oBwZpfw0dWQBEKdhg&_nc_zt=24&_nc_ht=scontent-lga3-2.xx&_nc_gid=y_w3bqsC9Gr0ZHmNTr-6yQ&_nc_ss=70180&oh=00_AQLj5SHQjG3q8fxqrMjJQWu0uh1SXmXUNQ0sxwvb-xqQBQ&oe=6A9B0A20"},"comments": [{"id": "Y29tbWVudDoyNzg3MDIxMzY1MDI0NTQxXzE0NTA3ODY0OTAxNDM5NTQ=","url": "https://www.facebook.com/fotografpoznan2/posts/pfbid0nrL7HEV9Uruk63V1thdndKqJXKkm4XNDPAyQvP7hxyXMQWdrhVAWbGwrMSHeAZokl?comment_id=1450786490143954","text": "Cześć!\n\nDziękujemy za zaufanie i słowa uznania. W homfi zawsze stawiamy na pierwszym miejscu dobro i radość naszych klientów, dlatego cieszymy się, że nasz Agent mógł wesprzeć Cię w tym ważnym dla Ciebie momencie.\n\nPozdrawiamy,\nhomfi","createdAt": "2026-07-28T13:19:12.000Z","replyCount": 0,"author": {"id": "100054189468166","name": "homfi","url": "https://www.facebook.com/homficom","profilePictureUrl": "https://scontent-lga3-2.xx.fbcdn.net/v/t39.30808-1/305569664_8453045728101706_5469064813037601261_n.jpg?stp=cp0_dst-jpg_tt6&cstp=mx2047x2047&ctp=s32x32&_nc_cat=107&ccb=1-7&_nc_sid=2d3e12&_nc_ohc=bbRYQ-jWEFsQ7kNvwEP2QtV&_nc_oc=AdqQC9jSP3dDJPdxJdMEP1rwvEoiElLWGXySHfcVIAxBqZInEMkY8b-ucbBP6sh2VBY&_nc_zt=24&_nc_ht=scontent-lga3-2.xx&_nc_gid=y_w3bqsC9Gr0ZHmNTr-6yQ&_nc_ss=70180&oh=00_AQITi0I_Ysj993FOxYxXKfGUY-b_9pxTD_xmQEgFEWMkHA&oe=6A9B1799"}}]}
💳 Pricing
This Actor uses pay-per-event pricing. A recommendation event is charged only when one accepted public Facebook recommendation is saved. Empty runs, invalid targets, setup work, comments, replies, and media do not create separate recommendation events.
Use the total and per-Page recommendation limits to bound how many recommendations a run can save.
🔌 Integrations
Use Apify API clients, webhooks, schedules, and dataset exports to move saved rows into spreadsheets, BI tools, databases, or your own application.
❓ FAQ
Does the Actor return Facebook star ratings?
No. Facebook commonly exposes Page feedback as a recommendation status rather than a star rating. The dataset does not add a star rating when Facebook does not provide one.
What happens when Facebook does not expose a recommendation status or optional field?
The unavailable field is omitted. The Actor does not substitute unknown, invent a status, or create placeholder data.
Does each recommendation have a stable direct link?
Yes. recommendationUrl is the direct public Facebook permalink for recommendationId. The same recommendation keeps the same ID and permalink across runs and repeated matches.
Are reviewer IDs and profile links stable?
The Actor keeps reviewer IDs and profile links only when they are trustworthy. If Facebook returns a changing alias or an untrustworthy link, those optional fields are left out. The reviewer name can remain when Facebook exposes it.
What happens when the same recommendation is found more than once?
The Actor saves the first eligible occurrence and ignores later matches for that recommendation. The saved row describes only the first match.
Does it need a Facebook login, cookies, or Meta API key?
No. It collects publicly accessible Page recommendations without asking you for Facebook credentials, cookies, or a Meta API key.
Can it access private or login-only reviews?
No. Private, removed, login-only, or otherwise inaccessible Facebook content is outside its scope.
Which Facebook Page identifiers can I submit?
The input accepts Page handles, full Page URLs, review URLs, and numeric Page IDs. Unsupported or unresolved targets do not become dataset rows.
Why might a Page return fewer recommendations than its limit?
A limit is a maximum, not a promised count. Facebook may expose fewer public recommendations, omit fields, or make a target unavailable.
What happens when I leave a recommendation limit empty?
Leaving Recommendations per Page empty returns all available results until the source is exhausted for each Page. Leaving Total recommendations empty returns all available results until the submitted sources are exhausted.
How do comments and replies affect a run?
Set Comments per recommendation and Replies per comment to request those source-available details. Use 0 to leave them out. Comments and replies do not create separate recommendation events.
Why use this instead of the Meta API?
The Meta API is designed for approved apps and permissioned workflows. This Actor exports publicly accessible Page recommendations without requiring your own Meta app or API key; it does not provide private or permissioned data.
Can I use the collected data responsibly?
Use the Actor only for lawful purposes and follow applicable privacy, data-protection, and platform rules. You are responsible for how you store and use collected public data.
📝 Changelog
v0.0
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- AmbitionBox Reviews Scraper: collect public employee reviews with ratings, pros, cons, and workplace context.
- DoorDash Reviews Scraper: collect public restaurant review previews from DoorDash store pages.
- TeamBlind Reviews Scraper: export public company reviews for employer and workplace research.
- Apple App Store Scraper: collect public iOS app reviews alongside App Store metadata.
- Google Play Store Scraper: export public Android app reviews and developer replies.
Made with ❤️ by Maxime Dupré

