Facebook Reviews Scraper for Page Feedback · Apify
Facebook Reviews Scraper avatar

Facebook Reviews Scraper

Pricing

from $1.25 / 1,000 recommendations

Go to Apify Store
Facebook Reviews Scraper

Facebook Reviews Scraper

Collect public Facebook Page recommendations and non-recommendations. Export text, timestamps, status, engagement, Page details, and reviewer details, plus comments, replies, and media when available.

Pricing

from $1.25 / 1,000 recommendations

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

17

Total users

4

Monthly active users

4 days ago

Last modified

Features

Limited permissions

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.

📦 Facebook Page feedback you can export

Each successful dataset row represents one public Facebook Page recommendation or non-recommendation and can contain:

  • recommendationId and recommendationUrl: Facebook's source identifier and stable direct public URL.
  • createdAt, text, and recommendationStatus: publication time, recommendation text, and recommends or doesNotRecommend when exposed.
  • tags: visible recommendation tags when exposed.
  • reactionCount, reactions, commentCount, and shareCount: 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 source-available top-level comments, with direct replies nested when 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.

🚀 Run the Facebook Reviews Scraper

  1. Add one or more Facebook Page handles, Page URLs, review URLs, or numeric Page IDs under Facebook Pages.
  2. Set optional per-Page and run-wide recommendation limits. Leave Recommendations per Page empty or at 0 to return all available results for each Page. Leave Total recommendations empty or at 0 to return all available results until the submitted sources are exhausted.
  3. Turn on Include comments to add public comments to each recommendation. Turn on Include comment replies to also add direct replies to those comments.
  4. Start the Actor, then open the default dataset to inspect or export saved recommendations.

⚙️ Input

Input fields

FieldTypeWhat it does
pageTargetsarray of stringsRequired list of public Facebook Page handles, Page URLs, review URLs, or numeric Page IDs.
dateFromstringReturns only recommendations newer than a calendar date or relative date such as 7 days ago. Leave it empty to include recommendations from any date.
maxRecommendationsPerPageintegerSets the maximum recommendations collected from each Page. Results are newest first when dates are available. Leave it empty or use 0 to return all available results for that Page. The form prefills 10.
maxRecommendationsintegerSets the maximum recommendations collected across the run. Leave it empty or use 0 to return all available results until the submitted sources are exhausted. The form prefills 10.
includeCommentsbooleanAdds public comments to each recommendation. Default: false.
maxCommentsPerRecommendationintegerSets the maximum comments added to each recommendation. Use 0 for all available comments. Default: 10. It applies only when includeComments is on.
includeRepliesbooleanAdds public direct replies to each included comment. Default: false. It applies only when includeComments is on.
maxRepliesPerCommentintegerSets the maximum direct replies added to each comment. Use 0 for all available replies. Default: 5. It applies only when includeReplies is on.

Example input

This example uses a successful current-beta default input:

{
"pageTargets": [
"portosbakery"
],
"maxRecommendations": 10,
"maxRecommendationsPerPage": 10,
"includeComments": false,
"maxCommentsPerRecommendation": 10,
"includeReplies": false,
"maxRepliesPerComment": 5
}

🧾 Output

Output 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.

FieldTypeWhat it does
recommendationIdstringFacebook's source identifier for the recommendation.
recommendationUrlstring (URL)Stable direct public Facebook URL for the recommendation.
createdAtstring (date-time)Source publication time when exposed.
recommendationStatusstringrecommends or doesNotRecommend when Facebook exposes the outcome.
textstringText published with the recommendation when exposed.
pageobjectFacebook Page associated with the recommendation.
page.idstringFacebook's source identifier for the Page.
page.namestringPublic name of the Facebook Page.
page.urlstring (URL)Public Facebook URL for the Page when exposed.
page.imageUrlstring (URL)Public Page image URL when exposed.
reviewerobjectPublic source details for the recommendation author when exposed.
reviewer.idstringStable public Facebook identifier when trustworthy.
reviewer.namestringPublic name of the reviewer.
reviewer.urlstring (URL)Stable public Facebook profile URL when trustworthy.
reviewer.profilePictureUrlstring (URL)Public profile picture URL when exposed.
tagsarray of stringsLabels or tags exposed by Facebook for the recommendation.
reactionCountintegerSource-reported total number of reactions when available.
reactionsarray of objectsReaction totals grouped by source-exposed reaction type.
reactions[].typestringSource-exposed reaction type.
reactions[].countintegerSource-reported total for that reaction type.
commentCountintegerSource-reported total number of comments and replies when available.
shareCountintegerSource-reported total number of shares when available.
mediaarray of objectsSource-hosted media attached to the recommendation.
media[].idstringFacebook's source identifier for the media when exposed.
media[].typestringSource-exposed media type when available.
media[].urlstring (URL)Direct source-hosted media URL.
media[].thumbnailUrlstring (URL)Source-hosted thumbnail URL when available.
media[].widthintegerSource-exposed media width in pixels.
media[].heightintegerSource-exposed media height in pixels.
media[].durationSecondsnumberSource-exposed media duration in seconds.
media[].viewCountintegerSource-reported media view total when available.
media[].altTextstringSource-exposed alternative text for the media.
commentsarray of objectsCollected source-available top-level comments.
comments[].idstringFacebook's source identifier for the comment.
comments[].textstringComment text when exposed.
comments[].createdAtstring (date-time)Source publication time for the comment.
comments[].urlstring (URL)Direct Facebook URL for the comment when exposed.
comments[].authorobjectPublic source details for the comment author when exposed.
comments[].author.idstringFacebook's source identifier for the comment author when exposed.
comments[].author.namestringPublic name of the comment author when exposed.
comments[].author.urlstring (URL)Public Facebook profile URL for the comment author when exposed.
comments[].author.profilePictureUrlstring (URL)Public profile picture URL for the comment author when exposed.
comments[].reactionCountintegerSource-reported reaction total for the comment when available.
comments[].replyCountintegerSource-reported total number of direct replies when available.
comments[].mediaarray of objectsSource-hosted media attached to the comment.
comments[].media[].idstringFacebook's source identifier for the comment media when exposed.
comments[].media[].typestringSource-exposed type of the comment media when available.
comments[].media[].urlstring (URL)Direct source-hosted URL for the comment media.
comments[].media[].thumbnailUrlstring (URL)Source-hosted thumbnail URL for the comment media when available.
comments[].media[].widthintegerSource-exposed width of the comment media in pixels.
comments[].media[].heightintegerSource-exposed height of the comment media in pixels.
comments[].media[].durationSecondsnumberSource-exposed duration of the comment media in seconds.
comments[].media[].viewCountintegerSource-reported media view total when available.
comments[].media[].altTextstringSource-exposed alternative text for the comment media.
comments[].repliesarray of objectsCollected direct replies to the comment, limited by the input.
comments[].replies[].idstringFacebook's source identifier for the reply.
comments[].replies[].textstringReply text when exposed.
comments[].replies[].createdAtstring (date-time)Source publication time for the reply.
comments[].replies[].urlstring (URL)Direct Facebook URL for the reply when exposed.
comments[].replies[].authorobjectPublic source details for the reply author when exposed.
comments[].replies[].author.idstringFacebook's source identifier for the reply author when exposed.
comments[].replies[].author.namestringPublic name of the reply author when exposed.
comments[].replies[].author.urlstring (URL)Public Facebook profile URL for the reply author when exposed.
comments[].replies[].author.profilePictureUrlstring (URL)Public profile picture URL for the reply author when exposed.
comments[].replies[].reactionCountintegerSource-reported reaction total for the reply when available.
comments[].replies[].mediaarray of objectsSource-hosted media attached to the reply.
comments[].replies[].media[].idstringFacebook's source identifier for the reply media when exposed.
comments[].replies[].media[].typestringSource-exposed type of the reply media when available.
comments[].replies[].media[].urlstring (URL)Direct source-hosted URL for the reply media.
comments[].replies[].media[].thumbnailUrlstring (URL)Source-hosted thumbnail URL for the reply media when available.
comments[].replies[].media[].widthintegerSource-exposed width of the reply media in pixels.
comments[].replies[].media[].heightintegerSource-exposed height of the reply media in pixels.
comments[].replies[].media[].durationSecondsnumberSource-exposed duration of the reply media in seconds.
comments[].replies[].media[].viewCountintegerSource-reported media view total when available.
comments[].replies[].media[].altTextstringSource-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-ord5-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=BXfIv1XAiG0Q7kNvwGbHwFj&_nc_oc=AdpMMlC9-HV1NMKIFkvtCyvkSxPwgzOdyuzu26j7cGHpSS9NE6DsBpcp1QF-56KrR90&_nc_zt=24&_nc_ht=scontent-ord5-2.xx&_nc_gid=9rtpz1aXUJWQZNXb8GO-ow&_nc_ss=70289&oh=00_AQQfeQnZSY0ArFEG9gQchp-RMkPOqa9CMobRr3xjkyvhgw&oe=6AF8EA59"
},
"reviewer": {
"id": "100011501148150",
"name": "Eliz Burk",
"url": "https://www.facebook.com/fotografpoznan2",
"profilePictureUrl": "https://scontent-ord5-1.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=WwvNCrIaYV0Q7kNvwH2wXao&_nc_oc=AdrqLxiInoiTwa4ZoS1Q7_OWFyMN1h6i47gmvAGgjP7hmpadHS-ssBP2TOjW6Pq2GDI&_nc_zt=24&_nc_ht=scontent-ord5-1.xx&_nc_gid=phXsL4pfrd4ywUtsh47A1w&_nc_ss=70180&oh=00_AQQin_s4W7X4lkleQKEQZoDHucD9-7HDYZHMeZebT1As5A&oe=6AF8DCE0"
},
"comments": [
{
"id": "Y29tbWVudDoyNzg3MDIxMzY1MDI0NTQxXzE0NTA3ODY0OTAxNDM5NTQ=",
"url": "https://www.facebook.com/fotografpoznan2/posts/pfbid02rqnVSLMnLza9REyoxmxRYaPR3XUf7wrvjBo9fhpYT36mUpumRkmvKkzvJ15X5UJbl?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",
"reactionCount": 0,
"replyCount": 0,
"author": {
"id": "100054189468166",
"name": "homfi",
"url": "https://www.facebook.com/homficom",
"profilePictureUrl": "https://scontent-ord5-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=BXfIv1XAiG0Q7kNvwGbHwFj&_nc_oc=AdpMMlC9-HV1NMKIFkvtCyvkSxPwgzOdyuzu26j7cGHpSS9NE6DsBpcp1QF-56KrR90&_nc_zt=24&_nc_ht=scontent-ord5-2.xx&_nc_gid=QjKn-eQoJYEVoMz3ZkPb4Q&_nc_ss=70180&oh=00_AQRiDb1EcwKkcoJ_sAzvlmuY9t3DQjpk3DRQsNtA-l2TLA&oe=6AF8EA59"
}
}
]
}

💳 Pricing

This Actor uses pay-per-event pricing. It has three events:

  • Recommendation: charged once for each public Facebook recommendation or non-recommendation saved to your dataset.
  • Recommendation comment: charged once for each public comment saved on a recommendation. It happens only when includeComments is on.
  • Comment reply: charged once for each public reply saved on a comment. It happens only when includeReplies is on.

Empty runs, invalid targets, setup work, and media do not create separate events. Use the recommendation, comment, and reply limits to control how much 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.

Yes. recommendationUrl is the direct public Facebook permalink for recommendationId. The same recommendation keeps the same ID and permalink across runs and repeated matches.

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.

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 or at 0 returns all available results for each Page. Leaving Total recommendations empty or at 0 returns all available results until the submitted sources are exhausted.

How do comments and replies affect a run?

Comments and replies are off by default. Turn on Include comments to add public comments, and Include comment replies to add their direct replies. Each saved comment and reply has its own small charge, so use Comments per recommendation and Replies per comment to limit them.

Why use this instead of the Meta API?

The Meta API is designed for approved apps and permissioned workflows. This Actor collects public Facebook Page recommendations and non-recommendations, but 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.2 (10-11-2026)

  • New "Include comments" option adds the public comments on each recommendation. "Comments per recommendation" sets how many to add.
  • New "Include comment replies" option adds the public replies to each included comment. In "Replies per comment", 0 now means all available replies, and replies need both options turned on.
  • Reliability improvements.

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 🫡

Made with ❤️ by Maxime Dupré