Facebook Posts Search Scraper: Top Engagement Posts avatar

Facebook Posts Search Scraper: Top Engagement Posts

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Facebook Posts Search Scraper: Top Engagement Posts

Facebook Posts Search Scraper: Top Engagement Posts

Find public Facebook posts from search results using keywords, hashtags, or topics. This Apify actor extracts post text, authors, timestamps, links, and engagement signals. Great for trend monitoring, audience research, brand tracking, and competitor analysis in structured data.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

25

Total users

6

Monthly active users

5 days ago

Last modified

Share

Facebook Posts Search Scraper — Engagement, Reactions and Sentiment

Facebook Posts Search Scraper: Top Engagement Posts searches Facebook by keyword and returns every matching public post as structured JSON — page name, post text, likes, comments, shares, and an optional per-post reaction-type breakdown (like, love, haha, wow, sad, angry) with a lexicon-based sentiment tag. No Facebook login or manual searching required. Every field is typed and consistently named across runs. Start a run on Apify to pull keyword-matched engagement data in minutes.

What is Facebook Posts Search Scraper: Top Engagement Posts?

Facebook Posts Search Scraper: Top Engagement Posts is an Apify Actor that runs a keyword search across Facebook and pulls every publicly visible post that matches, returning page details, engagement counts, and post text as structured JSON. No Facebook account or login is required for the core search and scrape — Facebook session cookies are only needed for the optional reaction-type breakdown, which returns null without them rather than a guessed value. It's built for social listening teams, market researchers, and developers who need keyword-matched Facebook post data without maintaining their own scraper or Facebook API access.

What Facebook post search data is publicly available to scrape?

Facebook exposes post text, page names, and engagement counts to anyone browsing logged out — this Actor collects exactly that. Only accurate per-type reaction counts sit behind a session, not a paid tier.

Data CategoryPublicly available (no login)Requires a Facebook session cookie
Post text, page name, URLsYes
Aggregate engagement (likes, comments, shares)Yes
Reaction-type breakdownReturns null without a sessionYes, real counts
Top-level commentsYes
Page contact infoYes, when listed
Private groups, DMsNoNot supported at all

This Actor only returns publicly visible data — what any visitor sees, nothing behind a login wall except the optional reaction breakdown.

What data can I extract with Facebook Posts Search Scraper: Top Engagement Posts?

Each row covers post and page identity, engagement and sentiment metrics, and media/timestamp/enrichment data — every key below is written by the Actor's row-builder, not just the fields shown in the default dataset view.

Post and page identity fields

Field NameDescription
facebookUrlPublic Facebook URL of the page that published the post
pageIdNumeric Facebook ID of the page, parsed from the post's embedded JSON or URL
facebookIdSame numeric page ID as pageId, kept for compatibility with the base actor's field name
pageNamePage's display name, taken from the post's og:title/<title> tag or URL handle
postIdNumeric Facebook post (or video/reel) ID
postFacebookIdSame value as postId, kept for compatibility
urlCanonical permalink URL of the post, resolved from embedded JSON when available
topLevelUrlThe original URL that was fetched (may differ from the resolved permalink)
linkSame value as url, duplicated for compatibility with the base actor's field name
searchQueryThe topic/keyword that produced this row
textFull post message text (up to 5,000 characters)

Engagement and sentiment metrics

Field NameDescription
likesAggregate reaction count parsed from the post page
commentsAggregate top-level comment count
sharesAggregate share count (0 when Facebook doesn't expose one)
reactionsPer-type object {like, love, haha, wow, sad, angry, sampledTotal} sampled from real reactors via GraphQL; null when includeReactionBreakdown is off or the session couldn't be resolved
sentimentLexicon-based label: positive / negative / neutral / mixed; null when includeSentiment is off or there's no text
sentimentScoreNumeric sentiment score from -1 to 1; null under the same conditions as sentiment

Media, timestamps and enrichment

Field NameDescription
timeHuman-readable UTC post-creation timestamp (YYYY-MM-DD HH:MM:SS)
timestampUnix epoch seconds for the same post-creation time
thumbURL of the post's first extracted image (fbcdn/scontent), when present
contact{email, phone, website, address} scraped from the page's own contact card; each field null when not publicly listed, populated only when enableContactLookup is on
commentsFetchedCount of comments written to the separate comments-<runId> dataset for this post (0 when maxCommentsPerPost is 0)
scrapedAtISO-8601 UTC timestamp of when this row was scraped

🤖 Add-on: Need additional Facebook data?

Pair this Actor with facebook-page-posts-scraper-with-engagement-analytics if you need posts from specific pages ranked by a real computed engagement score, virality, and best posting hour rather than raw keyword-discovery order. For deeper comment-level analysis on posts you already have URLs for, facebook-comments-scraper-reaction-breakdown decodes per-comment reaction breakdowns and engagement metrics. If your keyword research points to group communities instead of pages, facebook-groups-scraper-with-lead-contact-finder mines public Facebook groups for leads and contact details.

How does Facebook Posts Search Scraper: Top Engagement Posts differ from the official Facebook API?

Meta's Graph API lets an approved app read posts from Facebook pages it owns or manages (or has been granted the Page Public Content Access feature for) — it does not offer a keyword search across arbitrary public posts the way this Actor does; Facebook's public post-search endpoint was removed from the Graph API years ago.

FeatureFacebook Graph APIFacebook Posts Search Scraper: Top Engagement Posts
Keyword search across arbitrary public postsNot availableYes, any keyword via topics
Access requirementApp review plus pages_read_engagement/pages_read_user_content, or Page Public Content AccessNone — public post pages are fetched directly
Scope of accessible pagesOnly pages you own/manage, or pages granting the featureAny public page/post surfaced by the search
Reaction-type breakdownNot exposed per type via standard endpointsOptional, using your own session cookies
Output formatRaw Graph API JSON, requires your own pagination/parsingNormalized JSON dataset, one row per post
Setup timeDeveloper app registration plus review processProvide keywords and run

Use the Graph API when you manage the pages yourself and need an officially supported, long-term integration. Use this Actor when you need to discover posts across pages you don't control, by keyword, without an app-review process.

How to use Facebook Posts Search Scraper: Top Engagement Posts

Facebook Posts Search Scraper: Top Engagement Posts runs directly on the Apify platform — there's no separate signup or API key needed beyond an Apify account.

  1. Open the Actor's page in Apify Console (or from the Apify Store).
  2. Add one or more search keywords in topics (e.g. ["football", "cricket"]) — this is the input that actually drives results, though the schema marks nothing as required.
  3. Optionally set postLimit, recencyWindow, or turn on includeReactionBreakdown / includeSentiment for richer rows.
  4. Click Start and watch results populate the dataset in real time as each post is discovered and scraped.
  5. Export the dataset as JSON, CSV, Excel, or another supported format from Apify Console, or pull it via the API.

How to scale to bulk Facebook post search extraction

topics accepts an array, so a single run already searches multiple keywords concurrently — each topic runs as its own async task, and postLimit applies per topic (up to 5,000), not per run. To scale further, add more keywords to the same array or schedule repeated runs with different keyword batches via the Apify API or Scheduler. There's no separate bulk-URL-list input since discovery is keyword-driven, not URL-driven.

What can you do with Facebook post search data?

  • A social listening analyst tracking a brand keyword uses text, likes, and sentiment to flag spikes in negative sentiment before they escalate.
  • A market researcher comparing topics uses searchQuery and pageName to see which pages are actually publishing about a given keyword across public Facebook.
  • A lead-gen specialist running keyword searches for local businesses turns on enableContactLookup and filters rows where contact.email or contact.phone isn't null.
  • A content strategist studying reaction mix uses reactions (like/love/haha/wow/sad/angry) to see whether posts on a topic skew toward "love" or "angry" reactions.
  • An AI engineer builds a RAG pipeline over the text and sentiment fields, feeding keyword-matched post excerpts as grounding context to an LLM-based trend-summary agent.

Because the dataset returns typed JSON, these use cases also work directly inside agent frameworks via the Apify MCP server (see Integrations below).

How does Facebook Posts Search Scraper: Top Engagement Posts handle rate limits and blocking?

The Actor routes Google search discovery through Apify's GOOGLE_SERP proxy group and post-page fetches through Apify Proxy, using a separate residential proxy group for the optional reaction/comment GraphQL calls, so requests don't all come from one IP. HTML and SERP fetches retry up to 3 times with a short backoff, and the SERP loop pauses 1-2 seconds between pages and stops after 3 consecutive empty pages rather than hammering Google indefinitely. Each keyword topic runs as an independent concurrent task; if one topic's search fails outright, the run logs the failure and keeps the data already collected for the other topics instead of aborting. If a single post can't be fetched, it's skipped and logged, not retried indefinitely. The reaction-type breakdown and contact lookup are opt-in secondary fetches — if Facebook requires a login the Actor doesn't have, they return null instead of guessing or crashing. The Actor does not solve CAPTCHAs; if Facebook or Google blocks a request outright, that item is skipped and logged rather than the run failing entirely.

⬇️ Input

All 13 parameters are optional — the Actor falls back to a default keyword (football) if topics is left empty.

ParameterRequiredTypeDescriptionExample Value
topicsNoarrayKeywords to search for on Facebook; each topic runs as a separate search["football", "cricket"]
postLimitNointegerPosts to collect per topic (1–5000)50
recencyWindowNostringKeep only posts published within this window: "" (all time), 24h, 7d, 30d, 90d; out-of-range posts are excluded from the dataset, not just the log"7d"
includeReactionBreakdownNobooleanFetch a per-post reaction-type breakdown (like/love/haha/wow/sad/angry) via Facebook's reactions GraphQL endpoint (default false)true
reactionSampleSizeNointegerReactions sampled per post to build the breakdown (10–500, default 50)50
fbSessionCUserNostring (secret)Facebook c_user session cookie, used only for the reaction-breakdown request"10000xxxxxxxxx"
fbSessionXsNostring (secret)Facebook xs session cookie, used only for the reaction-breakdown request"1%3Aabc123xyz"
includeSentimentNobooleanTag each post's text with a lexicon-based sentiment label + score (default false)true
targetCountryNostringBias the underlying search toward a country's results (SERP gl param); blank = no bias"us"
targetLanguageNostringLanguage for the search UI/results (SERP hl param); blank = English default"en"
enableContactLookupNobooleanFetch each post's Facebook Page and extract public email/phone/website/address (default false)false
maxCommentsPerPostNointegerTop-level comments to fetch per post into a separate uncharged comments-<runId> dataset (0–500, default 0)0
proxySettingsNoobjectApify Proxy configuration{"useApifyProxy": true}

Example input

{
"topics": ["football", "cricket", "tech news"],
"postLimit": 50,
"recencyWindow": "7d",
"includeReactionBreakdown": true,
"reactionSampleSize": 50,
"fbSessionCUser": "",
"fbSessionXs": "",
"includeSentiment": true,
"targetCountry": "us",
"targetLanguage": "en",
"enableContactLookup": false,
"maxCommentsPerPost": 0,
"proxySettings": { "useApifyProxy": true }
}

⬆️ Output

Every run writes typed, normalized JSON rows to an Apify dataset — the same field names and shape on every run, regardless of which posts were found. Export as JSON, CSV, Excel, HTML table, or XML directly from Apify Console, or read it via the API.

Example output

{
"facebookUrl": "https://www.facebook.com/PremierLeague",
"pageId": "144368918939860",
"facebookId": "144368918939860",
"pageName": "Premier League",
"postId": "1122334455667788",
"postFacebookId": "1122334455667788",
"url": "https://www.facebook.com/PremierLeague/posts/1122334455667788",
"topLevelUrl": "https://www.facebook.com/PremierLeague/posts/1122334455667788",
"link": "https://www.facebook.com/PremierLeague/posts/1122334455667788",
"searchQuery": "football",
"text": "What a finish! That stoppage-time winner has the whole stadium on its feet.",
"likes": 18420,
"comments": 963,
"shares": 512,
"reactions": {
"like": 31,
"love": 12,
"haha": 2,
"wow": 4,
"sad": 0,
"angry": 1,
"sampledTotal": 50
},
"sentiment": "positive",
"sentimentScore": 0.62,
"time": "2026-07-24 19:42:10",
"timestamp": 1785014530,
"thumb": "https://scontent.xx.fbcdn.net/v/t39.30808-6/sample_thumb.jpg",
"contact": {
"email": null,
"phone": null,
"website": null,
"address": null
},
"commentsFetched": 0,
"scrapedAt": "2026-07-25T08:15:32.104211+00:00"
}

How does it work?

Facebook Posts Search Scraper: Top Engagement Posts turns a keyword into Facebook posts in three steps. First, it queries Google (through Apify's SERP proxy) for <keyword> site:facebook.com and collects the resulting Facebook URLs page by page. Second, it fetches each discovered post's own public HTML page through Apify Proxy and parses page and post details — name, ID, text, likes, comments, shares, and timestamp — directly out of Facebook's embedded page data, not from screen-scraped visual text. Third, if enabled, it separately queries Facebook's reaction and comment GraphQL endpoints to add a per-type reaction breakdown, top-level comments, or page contact details. Because every field is parsed from named JSON keys rather than CSS selectors, the same row shape comes back even when Facebook changes its visual layout — only genuinely publicly visible information is ever returned.

Integrations

Facebook Posts Search Scraper: Top Engagement Posts is a standard Apify Actor, so it works with anything that can call the Apify API — your own scripts, no-code automation tools, or AI agents.

Calling Facebook Posts Search Scraper: Top Engagement Posts programmatically

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("Scraper-Engine/facebook-posts-search-scraper-top-engagement-posts").call(
run_input={"topics": ["football"], "postLimit": 50}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["pageName"], item["likes"], item["text"][:80])

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

MCP integration for AI agents

This Actor is reachable through Apify's own MCP server, which exposes any Apify Actor as a callable tool to MCP-compatible clients. Register it with npx @apify/actors-mcp-server --actors Scraper-Engine/facebook-posts-search-scraper-top-engagement-posts (with APIFY_TOKEN set in the environment). Compatible with Claude Desktop, Claude Code, and other MCP clients.

No-code tools (n8n, Make, LangChain)

In n8n, use the HTTP Request node (or the community Apify node) pointed at this Actor's run endpoint to trigger a search and read back the dataset. In Make, the Apify app's "Run Actor and get dataset items" module does the same without code. In LangChain, the ApifyWrapper/Apify Actor tool lets an agent call this Actor and load the resulting dataset directly as Documents.

Is it legal to scrape Facebook post search results?

Scraping publicly visible Facebook posts is generally lawful in most jurisdictions — courts have repeatedly held that data a platform makes visible to any logged-out visitor is treated differently from private or authenticated data. Facebook Posts Search Scraper: Top Engagement Posts only returns what a logged-out visitor can already see: public post text, page names, and public engagement counts. Because posts are authored by identifiable people and pages, post text, page names, and any contact details collected via enableContactLookup count as personal data under GDPR and CCPA — you need a lawful basis to store and process them, particularly at scale or for profiling. Facebook's own Terms of Service also restrict automated collection, which is a contractual matter separate from data-protection law. Consult legal counsel if your use case involves bulk storage or processing of personal data.

Frequently asked questions

What Facebook post fields does Facebook Posts Search Scraper: Top Engagement Posts return?

The core fields are text, likes, comments, shares, and pageName, plus optional reactions and sentiment/sentimentScore when those features are enabled. See the full fields table above for every key the Actor writes.

Does Facebook Posts Search Scraper: Top Engagement Posts require a Facebook account or login?

No. Keyword search, post discovery, and the core fields (text, likes, comments, shares, page info) are scraped without any Facebook account. Only the optional reaction-type breakdown uses fbSessionCUser/fbSessionXs cookies from your own account — without them it returns null instead of a guessed value.

How many Facebook posts can I extract in one run?

postLimit accepts 1 to 5,000 posts per topic, and you can search multiple topics in one run — so total output scales with how many topics you list, each capped independently at up to 5,000.

What happens if a keyword search returns zero results?

If Google's SERP returns no facebook.com URLs for a topic (or the request is blocked), the Actor logs a warning for that topic and moves on — no rows are pushed for that keyword, but other topics in the same run are unaffected and the run still completes.

Can I search multiple Facebook keywords at once?

Yes. topics is an array — list multiple keywords and each one runs as its own concurrent search within the same run, with postLimit applied per topic.

How is "top engagement" actually determined?

It isn't a computed ranking — rows are returned in the order Google's search results surface matching posts, not sorted by likes, comments, shares, or reactions. Every engagement field (likes, comments, shares, reactions) is included on every row precisely so you can sort or filter for the highest-engagement posts yourself downstream; the Actor does not pre-rank them.

Does Facebook Posts Search Scraper: Top Engagement Posts work with Claude, ChatGPT, and other AI agent tools?

Yes. It's reachable through Apify's MCP server (see Integrations above) for MCP-compatible clients like Claude Desktop and Claude Code, and it's callable as a plain HTTP/API endpoint by any other agent framework.

Does Facebook Posts Search Scraper: Top Engagement Posts return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with consistent field names across runs — no HTML parsing or CSS selectors needed. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.

What happens when Facebook changes its layout or anti-bot system?

The Actor is maintained and the output schema is designed to stay stable across Facebook layout changes, since fields are parsed from named JSON keys rather than visual position. No specific update turnaround time is promised.

Can I use Facebook Posts Search Scraper: Top Engagement Posts without managing proxies or browser infrastructure?

Yes. Apify Proxy (including a residential pool for the reaction/comment GraphQL calls) is built in and used automatically — you don't need to supply or rotate your own proxies to run it.

Which Facebook post fields work best for AI training data and RAG indexing?

For RAG, index text alongside pageName and sentiment for retrievable, labeled context. For training data, likes, comments, shares, and reactions are the most consistently structured numeric fields across records, since they're typed integers/objects rather than free text.

ScraperWhat it extracts
Facebook Page Posts Scraper With Engagement AnalyticsPosts from specific pages with a real computed engagement score, virality, rank, and best posting hour
Facebook Comments Scraper: Reaction BreakdownPer-comment reaction breakdown and engagement metrics for posts you already have URLs for
Facebook Groups Scraper With Lead & Contact FinderPosts from public Facebook groups with extracted leads (emails, phones, socials)
Facebook Posts ScraperGeneral-purpose public Facebook post scraper
Facebook User Search Scraper: Photos & AI Bio AnalysisFacebook user search results with photos and AI-generated bio analysis
Facebook Ads Library Scraper & Creative MediaPublic ad creatives and media from Facebook's Ads Library

Your feedback

Found a bug or a missing field? Let the Scraper-Engine team know through this Actor's Issues tab on Apify Console, or via the support link on its Apify Store listing — reports are what keep the field list and extraction logic in sync with Facebook's current markup.