Facebook Event Search Scraper avatar

Facebook Event Search Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Facebook Event Search Scraper

Facebook Event Search Scraper

Scrape Facebook events easily with Facebook Event Search Scraper! Collect event names, dates, locations, organizers, attendees, and descriptions from Facebook search results. Perfect for event research, trend analysis, marketing insights, and lead generation.

Pricing

$19.99/month + usage

Rating

5.0

(1)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

1

Bookmarked

19

Total users

0

Monthly active users

a day ago

Last modified

Share

Facebook Event Search Scraper — Titles, Dates, Venues & Attendance

Facebook Event Search Scraper searches Facebook's public event search by keyword and returns every matching public event as structured JSON — event title, link, start time, schedule sentence, venue and the attendance line Facebook shows on the card. Enter one or more topics per run; each is searched separately, and results land in your dataset as they're found. No Facebook login, cookies or account required. Start a run on Apify and export the results as JSON or CSV in minutes.


What is Facebook Event Search Scraper?

Facebook Event Search Scraper is an Apify Actor that runs Facebook's own public event search for one or more keywords and returns every matching public event as a structured JSON row — no manual searching, scrolling or copy-pasting. It requires no Facebook account, login or cookies: every request reaches Facebook the way a logged-out visitor's browser would. It's built for event aggregators, marketers, researchers and developers who need public Facebook event data in bulk rather than one search at a time.


What Facebook event data is publicly available to scrape?

Facebook's public event search page returns event titles, links, schedules, venues, cover images and attendance counts to any visitor without logging in — this Actor's requests carry no account, cookie or session, so everything it returns is exactly what that logged-out page already shows.

Data CategoryPublicly available (no login)Restricted — Facebook login required
Event title, ID and link
Schedule sentence and start time
Venue name, place ID and place type
Cover image link
Attendance / interest line, as displayed
Guest list (who's going, who's interested)
Comments and discussion posts on the event
RSVP or "Interested" / "Going" action

Facebook Event Search Scraper only returns publicly visible data — what any visitor sees. Nothing behind a login wall.


What data can I extract with Facebook Event Search Scraper?

Facebook Event Search Scraper returns 19 fields per row, covering the event's identity and venue, its schedule and attendance, and bookkeeping metadata about the search that found it.

Field NameDescription
event_idFacebook's internal numeric ID for the event.
titleThe event's name as published.
urlDirect link to the event's Facebook page.
venueNameVenue or address line as Facebook displays it; null when Facebook publishes none.
venuePlaceIdFacebook's place ID for the venue; null for online-only or unlisted venues.
venuePlaceTypeThe venue's Facebook object type — a Page-backed place versus a freeform typed address.
coverImageUrlLink to the event's cover image. The image itself is not downloaded or stored.
scheduleTextThe schedule exactly as Facebook writes it, e.g. "Sat, 22 Aug at 15:00 EDT and 3 more".
scheduleTimezoneThe time-zone label parsed out of that sentence, kept as Facebook's raw label (EDT, +08, CEST…).
startTimestampEvent start time as a Unix timestamp, when Facebook publishes one; otherwise null.
startsAtThe same start time as an ISO-8601 UTC string; null when no timestamp is published.
isRecurringtrue when the schedule sentence indicates the event repeats on further dates.
additionalOccurrenceCountHow many further dates the series lists, parsed from "and N more" in the schedule sentence; null when the event does not repeat.
isDateRangetrue when the schedule sentence names two or more calendar months, indicating a multi-day span.
attendanceTextThe interest/attendance line exactly as Facebook renders it, e.g. "115 interested · 1 going".
queryThe search word or phrase that returned this row.
typesearch_event for a real event row, skipped_input for an entry that could not be searched.
notePlain-language explanation, present only on skipped_input rows; null otherwise.
scrapedAtWhen this Actor collected the row, ISO-8601 UTC.

Event identity & venue fields

event_id, title, url, venueName, venuePlaceId, venuePlaceType, coverImageUrl — what the event is called, where it lives, and its cover image.

Schedule & attendance fields

scheduleText, scheduleTimezone, startTimestamp, startsAt, isRecurring, additionalOccurrenceCount, isDateRange, attendanceText — when the event runs and how much interest it's drawing, as Facebook displays it.

Row metadata

query, type, note, scrapedAt — which search word found the row, whether it's an event or a skipped-input notice, and when it was collected.

🤖 Add-on: Need additional Facebook data?

Pair this Actor with Facebook Reviews Scraper to pull review/recommendation posts from the Pages hosting events you find here, or Facebook Video Transcript Extractor to turn a Page's video content into readable text. Both are Scraper Engine Actors built to slot into the same pipeline.


Why not build this yourself?

Meta does not currently offer a public API that lets third-party apps search public Facebook events by keyword — as observed on Meta's own developer documentation and confirmed by the wider developer community, checked 2026-08-15, general third-party access to Facebook's Events API was withdrawn some years ago and never replaced with an equivalent public search endpoint.

That leaves two paths: reverse-engineer Facebook's internal search interface yourself, or use a scraper that already does it. Building it yourself means tracking Facebook's internal GraphQL operation IDs and request tokens as they rotate, routing requests through proxies to avoid blocks, and re-testing your parsing logic every time Facebook changes its page structure — an ongoing maintenance cost most teams don't want to carry. Facebook Event Search Scraper already handles that and hands back a stable 19-field JSON schema on every run.


How to use Facebook Event Search Scraper

Run it directly from the Apify Console — no separate signup or API key needed to start.

  1. Open Facebook Event Search Scraper on its Apify Store page (or from your own Apify Console) and click Start.
  2. Provide the required input: startUrls, one keyword or phrase per line.
  3. Optionally raise or lower maxEvents (default 10, range 1 – 100,000) and confirm or change proxyConfiguration.
  4. Click Start to launch the run.
  5. Download or stream the results from the run's dataset — JSON, CSV or the other export formats the Apify platform offers.

How to scale to bulk event extraction

startUrls accepts an array, so a single run already covers every keyword you list — add ten or a hundred topics and each is searched in turn, with maxEvents applied per entry, not shared across them. There's no separate bulk-input field or per-run cap on how many keywords the array holds; scaling up simply means adding more lines.


What can you do with Facebook event data?

  • 📅 Event aggregators building a city guide use venueName, startsAt and scheduleText to populate a calendar feed straight from a list of topic keywords.
  • 📊 Event marketers scouting sponsorship opportunities use attendanceText and query to shortlist which topics and cities are drawing the most interest before committing a budget.
  • 🏛️ Venue and hospitality researchers group rows by venuePlaceId to see which venues host the most events in a given category over time.
  • 🔁 Analysts tracking recurring series use isRecurring and additionalOccurrenceCount to tell a one-off event apart from an ongoing weekly night.
  • 🤖 AI engineers building an events assistant feed the JSON rows — title, scheduleText, venueName, attendanceText — directly into a RAG index or agent tool, with no HTML parsing step in between.

How does Facebook Event Search Scraper handle rate limits and blocking?

Requests are sent with a browser-impersonated TLS fingerprint rather than a headless browser, and routed through whatever proxyConfiguration you select — Apify Proxy's residential group is prefilled, but the run uses exactly what you configure, falling back to a direct connection (with a warning logged) only if your selected configuration fails to initialize.

⚠️ Pagination is internally capped: after the first results page, the scraper walks up to 80 further batches of up to 20 events each per keyword before stopping, regardless of how high maxEvents is set. In practice this puts a practical ceiling of roughly the first page plus ~1,600 more events per keyword — very high maxEvents values are rarely reached because either Facebook's own search runs out of matching public events first, or this batch limit is hit first.

The initial page fetch retries up to 3 times with a backoff between attempts; each pagination batch also retries up to 3 times. If a batch response comes back without a usable results envelope, the scraper reconnects on a fresh identity and retries, up to 2 times, before concluding there are no more results. If a keyword's page can't be loaded at all after retries, that keyword is skipped with a warning and the run continues with the next one — a failure on one keyword never stops the whole run.


⬇️ Input

ParameterRequiredTypeDescriptionExample Value
startUrlsYesarray of stringsOne keyword or phrase per line (e.g. "stand-up comedy", "indie concerts", "AI summit"). Each entry is searched on its own. Takes words, not links — an event URL or numeric ID is reported back as a skipped_input row instead of being answered with unrelated events.["comedy", "live music"]
maxEventsNointegerCaps how many events are collected per entry above before moving to the next one. Range: 1 – 100,000. Default: 10.50
proxyConfigurationNoobjectProxy configuration, used exactly as selected. Default: {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}.{"useApifyProxy": true}

Example input

{
"startUrls": [
"stand-up comedy",
"indie concerts",
"AI summit"
],
"maxEvents": 50,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

⬆️ Output

Every run writes typed, normalized JSON rows to an Apify dataset — the same 19 fields on every row, regardless of how Facebook's page markup changes. Export the dataset as JSON, CSV, Excel, XML or RSS directly from the Apify Console, or pull it with the API/SDK.

Example output

{
"type": "search_event",
"query": "stand-up comedy",
"event_id": "1479005443455364",
"title": "Jinx Comedy Night at Havelock",
"url": "https://www.facebook.com/events/1479005443455364/",
"startTimestamp": 1781177400,
"startsAt": "2026-09-11T11:30:00Z",
"scheduleText": "Fri, 11 Sep at 19:30 SGT and 3 more",
"scheduleTimezone": "SGT",
"isRecurring": true,
"additionalOccurrenceCount": 3,
"isDateRange": false,
"venueName": "The Blue Room, 21 Havelock Road, Singapore 059764",
"venuePlaceId": "1601040098059098",
"venuePlaceType": "FreeformPlace",
"attendanceText": "115 interested · 12 going",
"coverImageUrl": "https://scontent.xx.fbcdn.net/v/t39.30808-6/cover.jpg",
"note": null,
"scrapedAt": "2026-08-15T09:15:00Z"
}

A skipped_input row, produced when an entry looks like a link or numeric ID instead of search words:

{
"type": "skipped_input",
"query": "https://www.facebook.com/events/1479005443455364/",
"event_id": null,
"title": null,
"url": null,
"startTimestamp": null,
"startsAt": null,
"scheduleText": null,
"scheduleTimezone": null,
"isRecurring": null,
"additionalOccurrenceCount": null,
"isDateRange": null,
"venueName": null,
"venuePlaceId": null,
"venuePlaceType": null,
"attendanceText": null,
"coverImageUrl": null,
"note": "Skipped: this entry looks like a link or a numeric ID. This actor searches by words, so enter a topic or phrase (for example \"live music\" or \"startup meetup\") instead.",
"scrapedAt": "2026-08-15T09:15:00Z"
}

Billing is pay-per-result: every search_event row is billed under the row_result charged event. skipped_input notice rows are never charged — filter a dataset export on type == "search_event" to see only billed rows, or on type != "skipped_input" to exclude notice rows.


How does it work?

Facebook Event Search Scraper sends requests to Facebook's public event search page and its internal results endpoint, using a browser-impersonated network fingerprint rather than a rendered headless browser. It reads the same structured JSON that populates Facebook's own search results, then pages through further batches using the request tokens and cursors Facebook's own interface relies on internally. Requests are routed through Apify Proxy (or direct, exactly as you configure) and retried on temporary failures. Because fields are pulled from structured JSON payloads rather than parsed out of rendered HTML, the output schema — the same 19 fields — stays stable even when Facebook changes its page's visual layout. Only what a logged-out visitor's browser already receives is returned; no login or session is ever used.


Integrations

Facebook Event Search Scraper runs on the Apify platform, so it works with anything that can call the Apify API or the Apify SDKs.

Calling Facebook Event Search Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("<your-username>/facebook-event-search-scraper").call(
run_input={
"startUrls": ["comedy", "live music"],
"maxEvents": 50,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

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

No-code tools (n8n, Make, LangChain)

In n8n, use the HTTP Request node (or the Apify node) pointed at this Actor's run endpoint, with your Apify API token in the header. In Make, use the Apify app's "Run an Actor" module and pass startUrls and maxEvents as input fields. For LLM pipelines, load the resulting dataset directly with Apify's LangChain dataset loader to feed event rows into a RAG index without an intermediate parsing step.


Scraping publicly available Facebook event listings — pages any visitor can see without logging in — is generally permitted, though Facebook's own Terms of Service restrict automated data collection on its platform. Facebook Event Search Scraper returns only public event data: no guest lists, no attendee names, no private profile information, nothing behind a login wall. Event listings are business and promotional data about events and venues, not personal data about identifiable individuals, so this is a Terms-of-Service and database-rights question rather than a GDPR one. Consult legal counsel if your use case involves bulk storage or redistribution of scraped data.


Frequently asked questions

What Facebook event fields does Facebook Event Search Scraper return?

The top fields are title, startsAt, scheduleText, venueName and attendanceText, alongside 14 more covering identity, venue, schedule and metadata. See What data can I extract above for the full list.

Does Facebook Event Search Scraper require a Facebook account or login?

No. The scraper never uses an account, cookies or session — every request reaches Facebook's public event search the way a logged-out visitor's browser would.

How many events can I extract in one run?

Up to maxEvents (1 – 100,000) per keyword in startUrls, times however many keywords you list. The actual count for any keyword depends on how many public events Facebook's search returns for it — niche topics stop well short of the ceiling, and the scraper's own pagination walk caps out after roughly 1,600 events per keyword regardless of maxEvents.

What happens if a search word returns zero results?

The run logs it, adds no row for that keyword, and moves on to the next entry — a zero-match search is a real answer, not an error. If every entry you provided turns out to be a link or numeric ID rather than search words, the run fails outright with a message explaining that no usable search words were given.

Can I scrape multiple Facebook event searches at once?

Yes. startUrls accepts an array — list as many keywords or phrases as you want, and each is searched independently within the same run.

Does Facebook Event Search Scraper work with Claude, ChatGPT, and other AI agent tools?

It's callable as a standard HTTP endpoint through the Apify API, so any agent framework that can make an authenticated HTTP request — including custom Claude or GPT tool integrations — can trigger a run and read back the resulting dataset.

Does Facebook Event Search Scraper remove duplicate events?

Within a single keyword, yes — the scraper tracks every event_id it has already saved for that search word and skips repeats across the first page and every pagination batch. Duplicates can still appear across different keywords in the same run: if two of your search words both match the same event, that event is returned once per keyword, each row tagged with the query that found it.

Does Facebook Event Search Scraper return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with consistent field names across runs — no HTML parsing, no CSS selectors. Pass it directly to an LLM, index it in 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 its output schema — the same 19 fields — stays stable across Facebook layout changes, since fields are read from structured JSON payloads rather than parsed HTML.

Can I use Facebook Event Search Scraper without managing proxies or browser infrastructure?

Yes. There's no headless browser to configure — requests use a browser-impersonated HTTP client — and proxy routing is handled through the proxyConfiguration input, defaulting to Apify Proxy's residential group.

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

For RAG, index the high-information text fields — title, scheduleText, venueName and attendanceText. For consistently structured training data, use event_id, startTimestamp, isRecurring and type, which return as typed primitives on every row.


Scraper NameWhat it extracts
Facebook Reviews ScraperPublic review/recommendation posts from Facebook Pages.
Facebook Video Transcript ExtractorClean transcripts extracted from public Facebook videos.

💬 Your feedback

Found a bug or missing a field? Open an issue on this Actor's Apify Store page (Issues tab) or send a message through Apify Console — reports are read and acted on.