Facebook Event Search Scraper With Attendance Metrics
Pricing
from $2.99 / 1,000 results
Facebook Event Search Scraper With Attendance Metrics
Facebook Event Search Scraper finds upcoming and past Facebook events with attendance metrics, including event names, dates, locations, organizers, descriptions, attendee counts, and event URLs. Ideal for event research, audience analysis, local marketing, and lead generation.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Facebook Event Scraper — Attendance, Rank and Popularity Data
Facebook Event Search Scraper With Attendance Metrics searches public Facebook events by topic and turns each event's displayed attendance into real numbers — interestedCount, goingCount, totalResponses, plus a rank and percentile computed inside its own topic. Figures Facebook shows in shortened form (13K, 4.3K) are expanded and flagged as rounded; a figure an event does not publish stays empty instead of becoming a 0. Event marketers, promoters, sponsors and researchers use it to shortlist the events people are actually turning up for, one topic at a time.
🧭 What is Facebook Event Search Scraper With Attendance Metrics?
It is an Apify Actor that searches Facebook's public events search by keyword and returns each matching event's identity (event_id, title, url) together with its attendance line parsed into typed integers, a within-topic popularity rank, and an engagement tier. No Facebook account, login, or API key is required — the input schema carries no auth fields, and every request goes to Facebook's public search page.
Key capabilities, read from the source:
- 🔎 Discovery by topic — one topic or phrase per line in
topics(or the legacystartUrls); each is searched and ranked independently - 🔢 Typed attendance figures —
interestedCount,goingCount,totalResponsesas integers, never invented zeros for unpublished figures - 🏅 In-topic ranking —
attendanceRankInQueryandattendancePercentile, plus anattendanceTierengagement band - 🎚️ Provenance flags —
attendanceScale(exact vs Facebook's own rounded display) andattendanceTense(goingvswent) - 📉 Engagement floors —
minInterestedandminGoingnarrow results to events clearing a threshold - 📊 A per-topic summary row — optional, with each topic's highest and median interested figure
- ⬇️ Standard Apify export — JSON, CSV, Excel, XML or HTML from the dataset, in the Console or via the API
📦 What data can I extract with Facebook Event Search Scraper With Attendance Metrics?
Every run returns two row shapes in the same dataset: a search_event row per event, and — when enabled — one query_popularity_stats row per topic. Every key below is copied from the row-building code, not the dataset view.
| Field | Example Value | Use Case |
|---|---|---|
type | "search_event" | Discriminate event rows from the per-topic summary row |
isChild | false | true on summary rows only — skip them when iterating events |
event_id | "1268734921543007" | Facebook's internal event ID — dedupe or join across runs |
title | "Comedy Night Live" | The event name as shown in search results |
url | "https://www.facebook.com/events/1268734921543007/" | Direct link to the event page |
query | "comedy" | Which input topic this row belongs to |
interestedCount | 13000 | Typed popularity figure for comparison and sorting |
goingCount | 876 | Typed confirmed-attendance figure |
totalResponses | 13876 | Sum of the figures actually published |
attendanceText | "13K interested · 876 going" | The original line, for auditing the parsed numbers |
attendanceScale | "abbreviated" | "abbreviated" or "exact" — flags a figure as Facebook's own rounded display |
attendanceTense | "going" | "going" (upcoming) or "went" (already happened) |
attendanceParsed | true | Data-quality flag — could an attendance figure be read at all |
attendanceTier | "5000+" | Engagement band (1-49, 50-499, 500-4999, 5000+) without writing a threshold |
attendanceRankInQuery | 1 | Rank by interestedCount within this topic's own results |
attendancePercentile | 97.5 | Percentile within the topic, one decimal |
scrapedAt | "2026-08-10T08:07:29Z" | UTC collection timestamp, for tracking change across scheduled runs |
eventsRanked | 24 | (summary rows only) Events in the topic that carried an interested figure |
queryMaxInterested | 13000 | (summary rows only) Highest interested figure in the topic |
queryMedianInterested | 640.5 | (summary rows only) Median interested figure in the topic |
attendanceCoveragePct | 89.2 | (summary rows only) Share of this topic's events that published an interested figure |
🎟️ Attendance and popularity data
Attendance is delivered two ways on every event row: the raw attendanceText exactly as Facebook writes it, and the parsed, typed fields derived from it. interestedCount and goingCount are separated because Facebook tracks them separately; totalResponses is their sum only for the segments that were actually published. attendanceRankInQuery and attendancePercentile are computed once per topic, after engagement filtering, using standard competition ranking — tied interestedCount values share a rank and the next rank skips accordingly. A promoter comparing five events under the "live music" topic can sort on attendanceRankInQuery directly instead of re-deriving it from raw text.
🏷️ Topic and volume data
query ties every row — event or summary — back to the input line that produced it, so a multi-topic run can be split with a single group-by. The summary row (isChild: true) adds eventsRanked, queryMaxInterested, queryMedianInterested and attendanceCoveragePct, letting a reader gauge how competitive a topic is without pulling every event row into a spreadsheet first.
🛠️ Why not build this yourself?
There is no public, keyless Facebook API for this. The Graph API's /event node retrieves one known event by its ID — it has no keyword search — and Meta's own documentation states that "Access to Events on Users and Pages is only available to Facebook Marketing Partners" (developers.facebook.com/docs/graph-api/reference/event/, checked 2026-08-15). A developer without Marketing Partner status has no supported way to search public events by topic at all.
Building this yourself without that access means reverse-engineering Facebook's public search HTML: extracting the embedded JSON event cards from the first page, then resolving an internal GraphQL doc_id and LSD token to paginate further, handling cursor-based pagination, and detecting Facebook's own capacity-throttling responses that stop pagination mid-topic regardless of how many results you asked for. This Actor already does that, and turns the resulting display text into typed integers instead of leaving you to parse "13K interested · 876 going" yourself.
If you already hold Facebook Marketing Partner access and only need specific, already-known event IDs, the Graph API /event node is the direct route. If you need to discover events by topic without that access, this Actor is the practical path.
💡 How to use data extracted from Facebook Event Search Scraper With Attendance Metrics?
📣 Event marketers and promoters
Run a topic that matches your scene ("comedy", "live music", "startup meetup") with minInterested set to a floor that matters to you, and get back only the events actually drawing attention, ranked by attendanceRankInQuery. Compare a specific listing's interestedCount against queryMaxInterested from the summary row to see how it stacks up before buying a stand or a sponsorship slot.
🤝 Sponsorship and partnership teams
Repeated, per-client shortlisting: run the same topic list on a schedule, keep attendanceTier at 500-4999 or 5000+, and export the result as a candidate list for outreach. Because event_id is stable, later runs can be diffed against earlier ones to see which events grew.
📊 Market and trend research
Track a topic's queryMedianInterested and attendanceCoveragePct across repeated runs (via an Apify schedule) to see whether interest in a scene is rising or falling, without touching individual event pages.
🤖 AI agents and automated pipelines
Because every row is typed JSON with no auth requirement, the Actor drops into an agent pipeline as a plain tool call: give it a topic list, get back ranked events with interestedCount/goingCount already as numbers, ready for a ranking or summarization step downstream.
🔼 Input sample
Nine parameters, all optional at the schema level, though at least one topic is required at run time or the Actor fails with a clear message.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
topics | No | array of strings | One topic, phrase or scene per line, e.g. "comedy", "live music", "startup meetup". Each line is searched separately and gets its own popularity ranking. Prefill: ["comedy", "live music"]. | ["comedy", "live music", "startup meetup"] |
eventsPerTopic | No | integer | How many events to collect per topic before moving to the next. Minimum 1, maximum 1000. Prefill 40. | 40 |
minInterested | No | integer | Keep only events whose published interested figure is at least this number. Minimum 0. 0 keeps every event. Prefill 0. | 500 |
minGoing | No | integer | Keep only events whose published going figure is at least this number. Minimum 0. 0 keeps every event. Prefill 0. | 0 |
unparsedAttendancePolicy | No | string (enum) | What happens to an event whose attendance can't be judged against the thresholds above — because the figure is unpublished or unreadable. "keep" (Keep them, marked with empty counts) or "drop" (Drop them from the results). Prefill "keep". | "keep" |
emitPopularityStats | No | boolean | Adds one extra row per topic with that topic's highest and median interested figure and how many events published one. Prefill true. | true |
startUrls | No | array of strings | Legacy alias of topics. Used only when topics is empty. | ["live music"] |
maxEvents | No | integer | Legacy alias of eventsPerTopic. Minimum 1, maximum 100000. Used only when eventsPerTopic is empty. | 40 |
proxyConfiguration | No | object | Network routing for the run. Whatever you select is used exactly as chosen, never swapped mid-run. Prefill: {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}. | {"useApifyProxy": true} |
Input example
{"topics": ["comedy", "live music", "startup meetup"],"eventsPerTopic": 40,"minInterested": 500,"minGoing": 0,"unparsedAttendancePolicy": "keep","emitPopularityStats": true,"proxyConfiguration": { "useApifyProxy": true }}
Common pitfall. unparsedAttendancePolicy doesn't only apply when minInterested/minGoing are above 0. Per the source, any event whose attendance text could not be read at all (attendanceParsed: false) is governed by this setting on every run — so setting it to "drop" removes those events even with both thresholds left at 0. Separately, eventsPerTopic is a request, not a guarantee: collection stops after 60 pagination requests per topic, or sooner if Facebook throttles how much it will serve, so a niche topic can return fewer rows than requested with no error raised.
🔽 Output sample
Output is typed, normalized JSON with a consistent schema per row type. The dataset exports to JSON, CSV, Excel, XML or HTML from the Apify Console or the API.
Event row
{"type": "search_event","isChild": false,"event_id": "1268734921543007","title": "Comedy Night Live","url": "https://www.facebook.com/events/1268734921543007/","query": "comedy","interestedCount": 13000,"goingCount": 876,"totalResponses": 13876,"attendanceText": "13K interested · 876 going","attendanceScale": "abbreviated","attendanceTense": "going","attendanceParsed": true,"attendanceTier": "5000+","attendanceRankInQuery": 1,"attendancePercentile": 97.5,"scrapedAt": "2026-08-10T08:07:29Z"}
Per-topic summary row (emitPopularityStats: true)
{"type": "query_popularity_stats","isChild": true,"query": "comedy","eventsRanked": 24,"queryMaxInterested": 13000,"queryMedianInterested": 640.5,"attendanceCoveragePct": 89.2,"scrapedAt": "2026-08-10T08:07:29Z"}
🎯 How do you filter and target specific events?
This Actor has one discovery mode — free-text topics — and no separate category browse, so result relevance depends entirely on the phrase you search. There's no dedicated location or date-range parameter either; if geography matters, fold it into the topic itself ("comedy chicago" rather than "comedy").
What you can control precisely:
- Quality thresholds —
minInterestedandminGoingcut out low-turnout events;unparsedAttendancePolicydecides what happens to events neither threshold can honestly judge (unpublished or unreadable attendance), rather than silently dropping or zero-filling them. - Volume —
eventsPerTopic(1–1000) caps how deep each topic goes; the legacymaxEvents(1–100000) does the same for inputs built for the plain event search Actor. Depth is also bounded by how much Facebook is willing to paginate for a given topic on that run. - Precision vs recall on the threshold field — set
unparsedAttendancePolicyto"drop"for a clean, fully-judged shortlist, or"keep"to see everything and decide manually which unparsed rows matter.
Three real examples:
Broad discovery, default thresholds:
{ "topics": ["comedy", "live music", "startup meetup"], "eventsPerTopic": 40 }
High-engagement shortlist, unjudgeable events dropped:
{ "topics": ["live music"], "minInterested": 1000, "unparsedAttendancePolicy": "drop" }
Fast per-topic sample, no summary row:
{ "topics": ["startup meetup"], "eventsPerTopic": 10, "emitPopularityStats": false }
▶️ Want to try other SimpleAPI scrapers?
| Scraper Name | What it extracts |
|---|---|
| Facebook Reviews Scraper | Facebook Page reviews with headlines, tags and reviewer detail |
| Facebook Video Transcript Extractor | Transcripts from Facebook videos found by keyword search |
| Instagram Post Details Scraper | Instagram post details with engagement data |
| TikTok Scraper | TikTok videos with repost insight data |
| Reddit Scraper | Reddit user profiles and subreddit activity |
⚙️ How to extract Facebook event data programmatically
The Actor runs as a standard Apify Actor call — one API call with your input JSON, structured JSON rows back, no separate signup beyond an Apify account.
🐍 Python example
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("<your-username>/facebook-event-search-scraper-with-attendance-metrics").call(run_input={"topics": ["comedy", "live music"],"eventsPerTopic": 40,"minInterested": 500,})for row in client.dataset(run["defaultDatasetId"]).iterate_items():if row.get("type") == "search_event":print(row["title"], row["interestedCount"], row["url"])
📈 Export to spreadsheets or CRM
Export the dataset as CSV directly from the Console or via GET /v2/datasets/{id}/items?format=csv. Map query to a "Topic" column, title and url for identification, and interestedCount / goingCount / attendanceTier as the engagement columns a CRM or spreadsheet filter runs on.
⚖️ Is it legal to scrape Facebook event data?
Yes — this Actor collects only what Facebook's public events search already displays to any visitor, with no login and no private data involved. Event listings are business/promotional data, not personal data: rows carry title, url and aggregate attendance counts, not the names or profiles of individual attendees. That places this under Facebook's Terms of Service and general database-rights considerations, not data-protection law — GDPR and CCPA govern personal data, and no personal data is collected here. Consult legal counsel for commercial applications involving bulk storage of scraped data.
❓ FAQ
Does the output tell me whether an event has already happened?
Only indirectly. There is no dedicated start-time or "past event" field in the output — attendanceTense ("going" vs "went") is the only signal, since Facebook itself writes the tense into the attendance line. "went" means the event has already occurred.
Can I get attendance metrics along with the main event records?
Yes, by default — every event row already carries interestedCount, goingCount, totalResponses, attendanceTier, attendanceRankInQuery and attendancePercentile. No separate request or parameter is needed. Enable emitPopularityStats (on by default) to also get one summary row per topic.
How accurate is the attendance data?
It reflects exactly what Facebook publicly displays for that event at request time. Large figures Facebook itself rounds for display (13K) are expanded and marked attendanceScale: "abbreviated" — the exact underlying count is not published anywhere, so treat abbreviated figures as approximate. For a decision that depends on the precise number, check the event's own page.
How many events can I get per run?
Up to eventsPerTopic per topic (schema maximum 1000; the legacy maxEvents alias allows up to 100000), but the real ceiling can be lower: the source stops paginating a topic after 60 pagination requests, or sooner if Facebook signals it is limiting how much it will serve right now. Asking for more than a topic actually has, or than Facebook will currently hand back, simply returns what's available — no error.
Can I filter out events with no readable attendance figure at all?
Yes — set unparsedAttendancePolicy to "drop". This applies whenever an event's attendance text couldn't be parsed, independent of whether minInterested/minGoing are set above 0.
Does this work with Claude, ChatGPT and AI agent frameworks?
It is not documented as reachable through an MCP server. It is callable as a standard Apify Actor run from any agent framework that can make an HTTP request or use the apify_client SDK — pass a topic list, get typed JSON rows back.
How does this compare to other Facebook event scrapers?
This README does not cite unverified competitor claims. What's verifiable from this Actor's own source: it never substitutes an invented 0 for an attendance figure Facebook doesn't publish, it flags every figure as exact or rounded via attendanceScale, and it computes rank and percentile within each topic rather than leaving that to the buyer. Check current Apify Store listings directly for a feature-by-feature comparison.
Can I use this without a Facebook API key or developer account?
Yes. No Facebook login, API key, or developer account is needed — only an Apify account to run the Actor. The prefilled proxyConfiguration uses Apify's residential proxy group by default; you can change it, and whatever you select is used exactly as chosen.
Can I track an event's attendance changing over time?
Yes, at the platform level — set up an Apify schedule to re-run the same topics periodically. Each run's rows carry scrapedAt, and event_id is stable across runs, so later runs can be diffed against earlier ones for the same event.
Does an input built for the plain Facebook Event Search Scraper still work here?
Yes. startUrls and maxEvents are still declared in the schema and still take effect, used only when their newer counterparts (topics, eventsPerTopic) are left empty.
Conclusion
Facebook Event Search Scraper With Attendance Metrics turns Facebook's public event search into ranked, typed JSON — attendance as real integers, a rank and percentile inside each topic, and honest handling of figures Facebook simply doesn't publish. It's built for marketers, promoters, sponsors and researchers who need to know which events in a scene are actually drawing a crowd, without reading raw attendance strings by hand. Set your topics and thresholds and run it from the Apify Console or the API to get your first ranked list.