Facebook Events Scraper avatar

Facebook Events Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Facebook Events Scraper

Facebook Events Scraper

Scrape Facebook events effortlessly using this Apify actor. It collects event titles, dates, venues, organizers, and links from Facebook pages or search results. Ideal for market research, event aggregation, or trend analysis with structured, exportable data in JSON, CSV, or Excel formats.

Pricing

$19.99/month + usage

Rating

5.0

(1)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

2

Bookmarked

108

Total users

0

Monthly active users

6 days ago

Last modified

Share

Facebook Events Scraper — Dates, Locations and Attendance Data

Facebook Events Scraper turns a list of search keywords into structured JSON of public Facebook events — event name, date and time, venue location, organizer, and going/interested attendance counts, pulled straight from each event's own page. No Facebook login or cookies required. Results write to the Apify dataset live as each event finishes enriching. Start a run on the Store listing below to see it in action.

🎉 What is Facebook Events Scraper?

Facebook Events Scraper is an Apify Actor that accepts a list of search phrases and returns structured data for the public Facebook events matching them — names, dates, venues, organizers, and attendance counts as typed JSON. It runs entirely without a Facebook account, login, or session cookie: every field is read from event pages that are already visible to an anonymous visitor. It's built for market researchers, local-SEO teams, community organizers, and developers who need a live feed of public event activity without maintaining their own scraping pipeline.

🔓 What Facebook event data is publicly available to scrape?

Anyone can view a public Facebook event's name, date, description, venue, organizer, cover image, and approximate going/interested counts without logging in — Facebook only login-gates the search results page itself, not the event pages it links to.

Data categoryPublicly visible (no login)Requires Facebook login
Event name, date sentence, descriptionYes
Venue name, address, coordinatesYes, when the page embeds them
Approximate going / interested countsYes (rounded, e.g. "1.4K")Exact live counts
Organizer name and profile linkYes, when stated on the pageOrganizer's private profile fields
Cover imageYes
Recurring-occurrence linksYes, when present in the page data
Keyword-based event search results pageYes — login-gated platform-wide as of 2026-08-01
Full guest list, comments, private RSVPsYes

Facebook Events Scraper only returns publicly visible data — what any visitor sees on an event's own page. Nothing behind a login wall.

📋 What data can I extract with Facebook Events Scraper?

Every run returns one JSON row per event, covering identity and descriptive fields, date and scheduling fields, and engagement/media/metadata fields — 32 fields in total.

Identity & descriptive fields

FieldDescription
inputUrlRelative Facebook search URL used to discover this event, e.g. /events/search/?q=jazz%20night
urlCanonical public Facebook event page URL
idFacebook's numeric event ID
nameEvent title, read from the event page's og:title tag
descriptionEvent description text, from the page's embedded JSON or og:description
addressComposed address string (street, city, country), or the venue name when no street-level address is found
locationNested venue object: url, id, name, contextualName, placeType, latitude, longitude, countryCode, streetAddress, city
organizedByName of the primary organizer, when stated on the page
organizatorsArray of organizer objects: name, id, url, isVerified
imageUrlEvent cover image URL, from og:image
imageCaptionReserved for a cover-image caption — not populated by the current pipeline (always null)
ticketsInfoReserved for ticketing details — not populated by the current pipeline (always null)
discoverySourceHow the event was found — always "google_serp" in the current pipeline

Date & scheduling fields

FieldDescription
dateTimeSentenceHuman-readable date/time sentence, uppercased, e.g. "FRIDAY, AUGUST 21, 2026"
startTimeThe same date sentence in original casing, used as a fallback start-time string
utcStartDateReserved for an ISO-8601 UTC start timestamp — not populated by the current pipeline (always null)
durationHuman-readable event duration, when the page states one
eventFrequencyRecurrence label — always "SINGLE" in the current pipeline (recurring-series classification isn't wired in)
hasChildEventstrue if recurring occurrences were found in the page's embedded JSON
childEventsArray of occurrence objects: id, url, name, dateTimeSentence
isPastReserved to flag past events — always false in the current pipeline
isCanceledReserved to flag canceled events — always false in the current pipeline

Engagement, media & metadata fields

FieldDescription
usersGoingApproximate "going" count, parsed from the page's going/interested sentence (Facebook abbreviates as e.g. "1.4K")
usersInterestedApproximate "interested" count, parsed the same way
usersRespondedusersGoing + usersInterested
isOnlineReserved to flag online events — always false in the current pipeline
eventTypeEvent visibility type — always "PUBLIC" (only public events are discoverable via a public search index)
privacyInfoPrivacy sentence, either extracted from the page or composed from eventType + organizedBy
discoveryCategoriesArray of {url, label} category tags Facebook attaches to the event, when present
externalLinksArray of external URLs found in the event description
externalLinksSourceReserved field noting where externalLinks came from — not populated by the current pipeline (always null)
scrapedAtISO-8601 UTC timestamp of when the row was pushed

The dataset's default view surfaces 29 of these 32 fields; inputUrl, externalLinksSource, and discoverySource are hidden from the view table but present in every row and available through the full dataset export or the API.

🤖 Add-on: Need additional Facebook data?

Pair this with Facebook Group Posts And Details Scraper : Comments & Engagement Analytics to pull the discussion happening in the groups that promote these events, or run Google Maps Extractor alongside it to cross-reference event venues against verified local business listings. Both are Scraper Engine Actors that share the same JSON-first, no-login approach.

🆚 Why not build this yourself?

Facebook does not offer an open, keyless way to search public events by keyword. The Graph API's page-content and event endpoints require Meta app review and Page Public Content Access before they return anything beyond your own app's data, and general Graph API access has grown steadily more restricted for third-party developers (observed via Meta's developer documentation and related coverage, checked 2026-08-04). Facebook's own on-site events-search page went login-gated platform-wide on 2026-08-01 — even a logged-out browser now sees "Log in or sign up to view" instead of results. Building this yourself means chasing Facebook's internal GraphQL query IDs, handling constant selector and endpoint churn, and still hitting the same login wall the moment the search endpoint changes — exactly why this Actor now discovers events through Google's public search index instead of Facebook's own search. Facebook Events Scraper keeps that pivot, the retry logic, and the proxy routing maintained for you, behind one Actor call.

🚀 How to use Facebook Events Scraper

Facebook Events Scraper runs like any Apify Actor — no separate signup or API key beyond your Apify account.

  1. Open the Actor on its Apify Store listing and click Start, or launch it from the Apify Console or API.
  2. Provide the required input — searchQueries, an array with at least one search phrase (e.g. "jazz night", "tech meetup").
  3. Optionally set maxEvents (1–1000, default 10) to cap results per query, and narrow proxyConfiguration by country if needed — the proxy group itself always stays RESIDENTIAL.
  4. Start the run.
  5. Read results live from the dataset as they're pushed, or download the finished run as JSON, CSV, Excel, XML, RSS, or HTML.

How to scale to bulk event extraction

searchQueries is the bulk-input mechanism — add one phrase per line and every query runs in the same call, merged into one dataset, with maxEvents applied per query rather than as a total cap. There is no separate bulk-URL or bulk-event-ID input: this Actor discovers events by keyword search only. If your workflow needs data for a fixed list of already-known event URLs rather than open-ended discovery, this Actor is not built for that use case.

💡 What can you do with Facebook event data?

  • 📈 A market researcher tracking event density by niche uses discoveryCategories and organizedBy to see which organizers and categories dominate a search term.
  • 🗺️ A local-SEO or city-guide editor building a "this week" listings page uses dateTimeSentence, address, and location to auto-populate a local events calendar.
  • 🎟️ A promoter benchmarking demand for a themed event uses usersGoing and usersInterested to compare attendance signals across similar events before booking a venue.
  • 🏟️ A community manager scouting active hosts uses organizedBy and organizators to shortlist organizers already running events in their niche.
  • 🤖 An AI engineer building a local-events assistant feeds description, dateTimeSentence, and location straight into a RAG pipeline or agent tool, without writing an HTML parser.

Because every field lands as typed JSON, the same output can be queried by an LLM agent or piped into a no-code workflow without extra parsing.

🛡️ How does Facebook Events Scraper handle rate limits and blocking?

Every event-page fetch routes through Apify Proxy's RESIDENTIAL group — this is hard-enforced in the code and cannot be disabled from the input, because datacenter and direct IPs have proven unreliable against facebook.com in live testing. The separate Google-search discovery step uses Apify's dedicated GOOGLE_SERP proxy group instead, kept fully independent from the RESIDENTIAL pool used for Facebook itself. Each request retries up to 3 times with exponential backoff (1s, 2s, 4s), rotating to a fresh proxy IP whenever a response looks blocked (a 403/429 status, a rate-limit message, or a tunnel/connection error). Event enrichment runs with up to 25 concurrent requests per run. Google-search discovery paginates until it collects maxEvents results, hits two consecutive empty result pages, or reaches Google's own pagination ceiling for that query — whichever comes first. ⚠️ If an individual event page still fails after 3 retries, the Actor does not drop it: it pushes the row anyway with whatever data it already has (at minimum the URL and ID), so one blocked page never breaks the rest of a run. The Actor fetches server-rendered HTML and JSON directly — it does not run a headless browser or solve CAPTCHAs.

⬇️ Input

ParameterRequiredTypeDescriptionExample value
searchQueriesYesarray (string list)One Facebook event search phrase per line; every line is processed as its own search theme, in order.["jazz night", "tech meetup"]
maxEventsNointegerMaximum number of events to return per search query. Minimum 1, maximum 1000, default 10.25
proxyConfigurationNoobject (proxy editor)Apify Proxy configuration. You can narrow by country, but the proxy group is always forced to RESIDENTIAL for event-page fetches regardless of what you select here.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

⚠️ Residential is hard-enforced. Facebook's event pages have proven unreliable over datacenter and direct connections in live testing, so this Actor always uses the RESIDENTIAL proxy group for event-page fetches — even if you set proxyConfiguration to "no proxy" or a different group. You can still restrict RESIDENTIAL to a specific country through this input.

Example input

{
"searchQueries": ["jazz night", "tech meetup", "art fair"],
"maxEvents": 25,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

⬆️ Output

Every row is typed, normalized JSON with the same field names on every run, regardless of how Facebook's page layout changes. Facebook Events Scraper is charged per event row pushed to the dataset (the row_result event) — there is no separate uncharged status or error row. Results are available through the standard Apify dataset export: JSON, CSV, Excel, XML, RSS, or HTML, or straight from the dataset via the Apify API.

Example output

{
"inputUrl": "/events/search/?q=jazz%20night",
"url": "https://www.facebook.com/events/1202620635007207/",
"id": "1202620635007207",
"name": "Downtown Jazz Night",
"eventFrequency": "SINGLE",
"dateTimeSentence": "FRIDAY, AUGUST 21, 2026",
"utcStartDate": null,
"startTime": "Friday, August 21 2026",
"imageUrl": "https://scontent.xx.fbcdn.net/v/t39.30808-6/jazz_night_cover.jpg",
"imageCaption": null,
"duration": "3 hr",
"description": "Jazz event in Seraing, Belgium by Blue Note Collective on Friday, August 21 2026 with 1.4K people interested and 145 people going. Tickets: https://example-tickets.com/jazz-night",
"address": "12 Rue des Arts, Seraing, BE",
"isCanceled": false,
"hasChildEvents": false,
"childEvents": [],
"usersGoing": 145,
"usersInterested": 1400,
"usersResponded": 1545,
"location": {
"url": "https://www.facebook.com/lecomptoirseraing/",
"id": "104938271",
"name": "Le Comptoir, Seraing",
"contextualName": "Le Comptoir, Seraing",
"placeType": "PLACE",
"latitude": 50.6167,
"longitude": 5.4,
"countryCode": "BE",
"streetAddress": "12 Rue des Arts",
"city": "Seraing"
},
"ticketsInfo": null,
"organizedBy": "Blue Note Collective",
"organizators": [
{
"name": "Blue Note Collective",
"id": "61556325142266",
"url": "https://www.facebook.com/profile.php?id=61556325142266",
"isVerified": false
}
],
"eventType": "PUBLIC",
"privacyInfo": "Public · Hosted by Blue Note Collective",
"isPast": false,
"isOnline": false,
"discoveryCategories": [
{
"url": "https://www.facebook.com/events/discovery/category/music/",
"label": "Music"
}
],
"externalLinks": ["https://example-tickets.com/jazz-night"],
"externalLinksSource": null,
"scrapedAt": "2026-08-04T09:15:00.000Z",
"discoverySource": "google_serp"
}

⚙️ How does it work?

Facebook Events Scraper doesn't call Facebook's own search feature — that endpoint now returns "Log in or sign up to view" for anonymous requests, confirmed live as of 2026-08-01. Instead, for each search phrase, the Actor queries Google's public index (site:facebook.com/events <phrase>) through Apify's GOOGLE_SERP proxy group to find real, currently-public event URLs. It then fetches each event's own page — still viewable by anyone, logged in or not — through Apify's RESIDENTIAL proxy group, and parses the page's meta tags and embedded JSON with BeautifulSoup to pull out name, date, description, location, organizer, and attendance figures. No headless browser is used, and nothing but publicly visible content is read. Because fields are read from structural signals — meta tags, JSON keys — rather than fixed CSS selectors, the output schema stays stable even when Facebook changes its page layout.

🔌 Integrations

Facebook Events Scraper runs on the Apify platform, so it works with the same tools every Apify Actor does — no separate API key or signup flow beyond your Apify account.

Calling Facebook Events Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("facebook-events-scraper-pay-per-events").call(run_input={
"searchQueries": ["jazz night", "tech meetup"],
"maxEvents": 25,
})
for event in client.dataset(run["defaultDatasetId"]).iterate_items():
print(event["name"], event["dateTimeSentence"])

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

No-code tools (n8n, Make)

In n8n, use the HTTP Request node (or the official Apify node) pointed at this Actor's run endpoint with your API token, and parse the returned JSON directly. In Make, the Apify app's "Run an Actor" module starts the run, and a follow-up "Get Dataset Items" call retrieves the rows. Either way, no custom HTML parsing is needed on your end — the Actor already returns typed fields.

Scraping publicly visible Facebook event pages — the same names, dates, venues, and attendance counts any logged-out visitor can see — is generally lawful; legal exposure in web scraping usually comes from how data is collected and used, not from reading public pages. Facebook Events Scraper returns only publicly available event data: it does not access private guest lists, comments, or messages, and it never logs in. Because the core entity here is a public event listing rather than a personal profile, the relevant framework is Facebook's Terms of Service and general database/content-scraping law rather than GDPR or CCPA, which govern personal data specifically — an event's core fields (name, date, venue, aggregate attendance count) are not personal data about an identifiable individual. Some fields, such as organizedBy, can name an individual host rather than a business page. Consult legal counsel if your use case involves bulk storage of personal data.

❓ Frequently asked questions

What Facebook event fields does Facebook Events Scraper return?

The core fields are name, dateTimeSentence, location, usersGoing/usersInterested, and organizedBy, plus 27 more covering description, images, categories, and recurrence — see the field tables above for the full list.

Does Facebook Events Scraper require a Facebook account or login?

No. Every field is read from an event's own public page, which Facebook still serves to logged-out visitors; the Actor never logs in, stores cookies, or uses a Facebook session.

How many events can I extract in one run?

Up to maxEvents (1–1000, default 10) per search query, times however many queries you list in searchQueries — there's no fixed cap on the number of queries per run. Actual counts depend on how many public event pages Google's index surfaces for each phrase.

What happens if a search query returns zero events?

The Actor logs a warning and moves on to the next query instead of failing the run. This happens when Google's public index has no indexed facebook.com/events page matching that phrase — try a broader or more common phrase if you consistently get zero results.

Can I scrape multiple Facebook event searches at once?

Yes — searchQueries accepts an array, and every line is processed in the same run and merged into one dataset. There's no separate bulk-URL or event-ID input mode; this Actor is keyword-search-only.

Because Facebook's own anonymous events-search endpoint stopped returning results and now shows a login wall, confirmed live as of 2026-08-01. The Actor instead finds event URLs through Google's public index of facebook.com/events pages, then reads each event's own detail page — which is still public — for every field.

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

Yes, as an HTTP endpoint — any agent framework that can call the Apify API or apify_client can trigger a run and read the resulting JSON. There is no dedicated MCP server published for this Actor.

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

Yes. Every row is typed, normalized JSON with the same field names on every run — no HTML parsing or CSS selectors required. 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?

Field extraction is built around structural signals — meta tags and embedded JSON keys — rather than fixed CSS selectors, so minor layout changes typically don't break field mapping. The Actor is actively maintained; no specific update turnaround time is published.

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

Yes. Apify Proxy (RESIDENTIAL for event pages, GOOGLE_SERP for discovery) is configured and rotated automatically — you never provide or manage a proxy list. The Actor also doesn't run a headless browser; it fetches HTML and JSON directly, so there's no browser infrastructure to manage either.

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

For RAG, index description, dateTimeSentence, and address — they carry the most free-text context. For structured training data, usersGoing, usersInterested, eventType, and hasChildEvents are the most consistently populated typed fields; reserved fields like utcStartDate, ticketsInfo, and imageCaption are not currently populated and should be excluded from training features.

ScraperWhat it extracts
Facebook Group Posts And Details Scraper : Comments & Engagement AnalyticsPosts, comments, and engagement data from public Facebook groups
LinkedIn Search Jobs Scraper By Multiple Keywords & LocationsJob listings from LinkedIn, by keyword and location search
Threads Search Post Scraper: Posts, Quotes & RepliesPosts, quotes, and replies from Threads keyword search
Google Maps ExtractorLocal businesses and venues from Google Maps search

💬 Your feedback

Found a bug, or a field that's coming back empty when it shouldn't? Open the Issues tab on this Actor's Apify Store page and let us know — that's the fastest way to get a fix into the next update.