Facebook Event Search Scraper - Host, Ticket, Related Event avatar

Facebook Event Search Scraper - Host, Ticket, Related Event

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Facebook Event Search Scraper - Host, Ticket, Related Event

Facebook Event Search Scraper - Host, Ticket, Related Event

Facebook Event Search Scraper extracts public event details by keyword, including event names, dates, locations, hosts, ticket links, descriptions, and related events. Build structured event datasets for research, promotion, competitor analysis, and local event discovery.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

API Empire

API Empire

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

2 days ago

Last modified

Share

Facebook Event Search Scraper - Hosts, Tickets & Related Events searches Facebook's public events by topic and returns each event as typed JSON — title, host, ticket link, venue, coordinates, timezone, attendance counts, and the events Facebook itself suggests alongside it. No login, no HTML, no CSS selectors to maintain. Every response is a normalized dataset row ready to load into a spreadsheet, a database, or an LLM context window. After reading this page you'll know exactly which input fields to set, what every output column means, and where the platform's own limits sit.

It's an Apify Actor that searches Facebook's public event index for one or more topics and, optionally, opens each matching event's own page to read the fields Facebook doesn't expose in search results — host identity, outbound ticket link, corrected start time, end time, timezone, coordinates and cancellation status. No Facebook account or login is required; the Actor reads public pages anonymously.

  • 🔎 Search Facebook events by topic, in batches of one or more queries
  • 👤 Read the host's name, ID and Facebook profile link straight from the event page
  • 🎫 Capture the event's own outbound ticket or registration link, when the organiser published one
  • 🔗 Collect the events Facebook itself suggests alongside each result, as their own labelled rows
  • 📤 Export everything as JSON, CSV, or any other format the Apify dataset supports

Two row types come out of a run — event rows and related-event rows — and each event row carries five distinct data groups you can turn on or off individually.

Data typeKey fieldsJSON field names
Event coretitle, page URL, topic searched, attendancetitle, url, event_id, query, interestedCount, goingCount
Hostname, Facebook ID, profile link, verified badgehostName, hostId, hostProfileUrl, hostIsVerified, hostCount, coHostNames
Ticket & registrationoutbound link the organiser publishedticketUrl, ticketUrlCandidates
Schedule & locationcorrected start time, end time, duration, timezone, venue, coordinatesresolvedStartsAtUtc, endsAtUtc, eventDurationMinutes, tzDisplayName, venueName, venueCity, latitude, longitude
Related eventsFacebook's own per-event suggestion listrelatedEventId, relatedTitle, relatedUrl, relatedInterestedUsersCount

Need more Facebook data?

If you're also pulling reviews or engagement data from Facebook, API-Empire publishes Facebook Reviews Scraper With Comments & Replies for star ratings and reply threads on Pages, and Facebook Video Transcript Extractor With Engagement Data for spoken-word transcripts alongside like/comment/share counts on Facebook videos.

Why not build this yourself?

Meta's Graph API has no public keyword or topic search for events. As documented on developers.facebook.com (checked 2026-08-15), the /event/{id} node only returns an event you already have the ID for and whose privacy is set to OPEN; retrieving events by search, or by Page, requires either user_events permission scoped to a logged-in user or Page-level access that is "restricted to whitelisted partners" and gated behind App Review. There is no endpoint that takes a topic string and returns matching public events.

Building this without that API means reverse-engineering Facebook's internal search GraphQL endpoint, extracting the LSD security token and doc_id from page HTML on every build Facebook ships, rotating residential IPs to avoid blocks, and re-deriving all of it again the next time Facebook changes its bundle — all of which this Actor already does and keeps working.

Why do developers and teams scrape Facebook events?

🤖 For AI engineers and agent builders

Event listings make good grounding data for local-discovery agents and recommendation tools. Pull title, resolvedStartsAtUtc, venueCity and ticketUrl into a vector store or a RAG index, and an agent can answer "what tech conferences are happening in New York this month" with real, dated, sourced facts instead of a hallucinated event list — each row already carries a stable event_id for deduplication across runs.

📢 For marketers and community teams

Track which conferences, meetups or launches are trending in your industry by running the same topic queries on a schedule and diffing interestedCount and goingCount over time. hostName and hostProfileUrl identify which organisers and Pages are driving attendance, useful for partnership and sponsorship outreach.

🔬 For researchers and analysts

Facebook Events is a public record of organised activity — conferences, protests, festivals, fundraisers — searchable by topic and city. Because only publicly visible events are returned, the dataset is suitable for academic study of event frequency, geography (latitude/longitude) and timing patterns without touching any private or friends-only content.

🛠️ For developers building data products

Event aggregator sites and local "what's on" apps need a structured feed, not raw HTML. emitRelatedEventRows gives you Facebook's own "you might also like" graph as separate labelled rows, which is a ready-made signal for building a recommendation feature without computing similarity yourself.

How to scrape Facebook events (step by step)

  1. Open Facebook Event Search Scraper - Hosts, Tickets & Related Events on the Apify Store and click Try for free.
  2. Add one or more topics under 🎟️ Event topics to search (eventQueries) — one per line, e.g. conference, comedy in London. No input field is strictly required by the schema, but the run fails immediately if this (or the legacy startUrls) is left empty.
  3. Set 🔢 Events per topic (searchResultLimit) and decide whether to open each event's own page for full details (fetchEventDetails); if you turn it on, pick which detail groups you actually need in detailFields to skip collecting the rest.
  4. Start the run — from the Apify Console, the apify-client SDK, or an Apify schedule/webhook.
  5. Download results as JSON, CSV, Excel, or any other format the Apify dataset export supports, or read them straight from the Apify API.

What to do when Facebook changes its page structure

The Actor is maintained, and the output schema stays stable — field names and types on your end don't change even when Facebook ships a new page build. No specific turnaround time is promised for fixes.

⬇️ Input

All fields are optional at the schema level, but the run needs at least one search topic (eventQueries or the legacy startUrls) to do anything.

ParameterRequiredTypeConstraintsDescription
eventQueriesNoarray (string list)prefill: ["conference"]One topic per line, e.g. "conference", "tech summit", "comedy in London". Each topic is searched separately. Adding a city to the topic narrows results to that city in most cases, because this is text relevance rather than a map filter.
searchResultLimitNointegermin 1, max 100000, prefill 20How many event results to collect for each topic before moving to the next one. 20 topics × 20 events = up to 400 event rows.
fetchEventDetailsNobooleandefault trueOn: every collected event is opened so the host, ticket link, end time, timezone, coordinates and cancellation status can be read. Off: only the fields present in the search results are returned, and every detail column is null with enrichmentStatus set to "not_requested".
maxEventsToEnrichNointegermin 0, max 1000, prefill 20Caps how many events are opened in one run. Events beyond the cap are still returned with their search-result fields and are labelled enrichmentStatus = "skipped_cap", so you can always see exactly which rows were not opened.
detailFieldsNoarray (select), enum: description, host, schedule, location, ticket, cancellationprefill: all sixPick the detail groups you actually need. Groups you leave out are reported as null instead of being collected.
includeRelatedEventsNobooleandefault trueOn: each opened event also reports how many related events Facebook lists for it and their combined interested count. These suggestions are Facebook's own, per event — not a similarity score calculated here.
emitRelatedEventRowsNobooleandefault trueOn: every suggested event becomes a separate row with type = "relatedEvent", isChild = true and parentEventId pointing at the event it was suggested for. These rows are also mirrored to a run-scoped "related-events" dataset. Off: only the per-event summary columns are kept.
maxRelatedPerEventNointegermin 0, max 25, prefill 3Caps how many suggested events are kept for each event. Facebook publishes three per event in practice, so raising this above 3 changes nothing.
startUrlsNoarray (string list)Accepted as an alternative to "Event topics to search" (eventQueries). Values are treated as search terms, exactly as in the original actor. Used only when eventQueries is empty.
maxEventsNointegermin 1, max 100000Accepted as an alternative to "Events per topic" (searchResultLimit). Used only when searchResultLimit is left empty.
proxyConfigurationNoobject (proxy editor)prefill: {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}Choose how the run connects. Your selection is honoured for every request; nothing is switched on or swapped behind the scenes.

⚠️ maxRelatedPerEvent above 3 has no effect. Facebook's own event page only ever publishes three suggested events per event, so raising this input past 3 does not produce more related rows — measured against live event pages, not assumed.

Example input:

{
"eventQueries": ["tech conference", "startup meetup"],
"searchResultLimit": 25,
"fetchEventDetails": true,
"maxEventsToEnrich": 25,
"detailFields": ["description", "host", "schedule", "location", "ticket", "cancellation"],
"includeRelatedEvents": true,
"emitRelatedEventRows": true,
"maxRelatedPerEvent": 3,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Common pitfall: leaving both eventQueries and startUrls empty stops the run before it starts — the Actor exits with "Add at least one topic to search for, then start the run again" rather than returning zero rows silently.

⬆️ Output

Every row is typed, normalized JSON with a stable field set — no HTML, no selectors. The default dataset view shows a curated 29-column table for quick scanning, but every pushed row carries the full field set documented below; open the dataset's JSON or Excel/CSV export to see every column. Data can be exported as JSON, CSV, Excel, HTML table or RSS directly from the Apify dataset.

Scraped event (type: "search_event")

{
"type": "search_event",
"isChild": false,
"event_id": "1234567890123456",
"title": "Global AI Summit 2026",
"url": "https://www.facebook.com/events/1234567890123456/",
"query": "tech conference",
"queryResultRank": 3,
"scheduleText": "Tomorrow at 9:00 AM – 5:00 PM UTC-5",
"cardStartsAtUtc": "2026-09-02T14:00:00Z",
"isRecurringSeries": false,
"additionalOccurrenceCount": null,
"venueName": "Metro Convention Center",
"venuePlaceId": "998877665544332",
"coverImageUrl": "https://scontent.fxxx.fbcdn.net/v/global-ai-summit-cover.jpg",
"attendanceText": "3.2K interested · 410 going",
"interestedCount": 3200,
"goingCount": 410,
"totalResponses": 3610,
"attendanceScale": "abbreviated",
"attendanceTense": "going",
"resolvedEventId": "1234567890123456",
"description": "Join founders, engineers and investors for two days of talks on applied AI in production.",
"descriptionChars": 812,
"hostName": "Global AI Summit",
"hostId": "556677889900112",
"hostProfileUrl": "https://www.facebook.com/globalaisummit",
"hostIsVerified": true,
"coHostNames": ["TechCity Events"],
"hostCount": 2,
"endsAtUtc": "2026-09-03T21:00:00Z",
"eventDurationMinutes": 2580,
"tzDisplayName": "Eastern Time",
"latitude": 40.7484,
"longitude": -73.9857,
"venueCity": "New York, NY",
"citySource": "place_json",
"ticketUrl": "https://www.eventbrite.com/e/global-ai-summit-2026-tickets-123456",
"ticketUrlCandidates": 1,
"isCanceled": false,
"resolvedStartsAtUtc": "2026-09-02T14:00:00Z",
"startTimeSource": "detail_page",
"scheduleDiscrepancyDays": 0,
"enrichmentStatus": "ok",
"relatedScope": "event",
"relatedEventCount": 3,
"relatedInterestedTotal": 5400,
"scrapedAt": "2026-08-15T10:03:44Z"
}
{
"type": "relatedEvent",
"isChild": true,
"parentEventId": "1234567890123456",
"parentEventTitle": "Global AI Summit 2026",
"query": "tech conference",
"relatedEventId": "2233445566778899",
"relatedTitle": "Applied ML Meetup NYC",
"relatedUrl": "https://www.facebook.com/events/2233445566778899/",
"relatedStartsAtUtc": "2026-09-10T23:00:00Z",
"relatedScheduleText": "Thursday, September 10 at 7:00 PM",
"relatedVenueName": "WeWork Union Square",
"relatedInterestedUsersCount": 214,
"relatedAttendanceText": "214 interested",
"relatedCoverImageUrl": "https://scontent.fxxx.fbcdn.net/v/applied-ml-meetup-cover.jpg",
"scrapedAt": "2026-08-15T10:03:47Z"
}

enrichmentStatus tells you why any detail field is null: "ok" (opened and parsed), "not_requested" (fetchEventDetails was off), "skipped_cap" (over maxEventsToEnrich), or "unavailable" (the page opened but its content didn't match a real event page).

FeatureThis ActorGeneric alternative
Output formatTyped JSON dataset rows, stable field namesRaw HTML/DOM you parse yourself
Entity coverageEvent core + host + ticket + schedule/location + Facebook's own related-event suggestions, as separate labelled rowsUsually just the primary event fields; related items require a second pass
Recurring eventsResolves the corrected start time from the event's own detail page and flags any discrepancy against the search-card timeTypically takes the first start time found, which can be the wrong occurrence in a series
Related-event accuracyDistinguishes an event's own suggestion list from Facebook's generic feed before publishing it as "related"Not distinguished — a generic suggestion list can get mislabelled as event-specific
Anti-bot handlingResidential proxy support, browser-TLS impersonation and automatic retries built inLeft for you to implement

If you're building an AI agent or RAG pipeline, the output format row is the decision-maker — parsing HTML inside an agent loop is a reliability failure mode, not a feature.

There's no fixed cap in the Actor itself beyond the input schema's own ceilings: searchResultLimit (or the legacy maxEvents) goes up to 100,000 events per topic, and maxEventsToEnrich goes up to 1,000 detail-page opens per run. Search results are paginated automatically through Facebook's own GraphQL cursor until your limit is reached, the platform reports no next page, or three consecutive pages add no new events — whichever comes first.

Topics are processed one after another, not in parallel, so a run with many topics and a high per-topic limit takes proportionally longer; the Actor's own input description notes that opening 100 event pages instead of 20 takes roughly five times as long, because detail enrichment is one extra page load per event. No benchmark run time is published beyond that.

Facebook Event Search Scraper - Hosts, Tickets & Related Events works with any language or tool that can send an HTTP request, through the standard Apify API.

REST API integration

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("API-Empire/facebook-event-search-scraper-hosts-tickets-and-related-events").call(
run_input={
"eventQueries": ["tech conference"],
"searchResultLimit": 20,
"fetchEventDetails": True,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item.get("hostName"), item.get("ticketUrl"))

Works in Python, Node.js, Go, Ruby, cURL.

Automation platforms (n8n, Make)

Apify's own Run Actor node in n8n and the Apify module in Make can call this Actor by its ID and pass the same input JSON shown above, then feed the resulting dataset rows into any downstream node or module — no custom HTTP handling required on your end.

Yes — Facebook Event Search Scraper - Hosts, Tickets & Related Events reads only publicly visible Facebook event pages; no login, session cookie or private content is accessed. Because host name, host ID, profile link and verification status are personal data tied to an identifiable person or Page, GDPR (EU) and CCPA (California) considerations apply to how you store and further use that data once collected — the Actor itself only reads what Facebook already serves to a logged-out visitor. Consult legal counsel for commercial use cases involving bulk personal data.

Frequently asked questions

Yes. The Actor fetches Facebook's public search and event pages directly over HTTP with no login, session cookie or account credentials — no Facebook account is needed to run it.

How often is the scraped data updated?

Live per run. Every run sends fresh HTTP requests to Facebook's search and event pages at the moment it executes; nothing is served from a cache.

What happens with a deleted, restricted or ticket-less event?

If an event's detail page doesn't match the content markers of a real event page (deleted, region-restricted, or otherwise unreadable), the row is still pushed with its search-result fields and enrichmentStatus set to "unavailable" — detail columns stay null rather than being guessed. If an organiser never published an outbound ticket link, ticketUrl is null rather than a fabricated URL.

Can I scrape private or restricted Facebook events?

No. Only events surfaced by Facebook's public event search are returned. Friends-only or invite-only events that don't appear in public search results are not accessible to this Actor.

Yes. It's billed on the row_result charged event — every dataset row pushed, whether an event row or a related-event row, counts as one billable event. Current rates are shown on the Actor's pricing tab on the Apify Store.

Yes. It's callable as a standard HTTP endpoint through the Apify API by any agent framework. Every response is typed JSON with stable field names — no HTML, no parsing step before passing rows to an LLM.

How does it handle Facebook's anti-bot system?

It uses an HTTP client that impersonates Chrome's TLS fingerprint, retries each request up to three times with a short delay on a failed or incomplete response, and gates every fetched page on real content markers rather than trusting a 200 status code alone. Proxy routing (residential by default) is applied through Apify Proxy when the proxyConfiguration input has it switched on.

Can I use it without managing proxies?

Yes — when proxyConfiguration.useApifyProxy is on, Apify Proxy handles IP rotation for you, prefilled to the residential group. ⚠️ If you switch it off, the Actor honours that choice exactly and makes every request unproxied — nothing is substituted behind the scenes, which can increase blocking on larger runs.

Does it return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with stable field names — no HTML, no selectors. Pass rows directly into an LLM context window, index them into a vector store, or route them through an agent tool.

What happens when Facebook changes its structure or blocks the scraper?

The Actor is maintained, and the output schema stays stable — field names and types on your end don't change when Facebook updates its page. No numeric turnaround time is promised.

Your feedback

Found a bug or missing a field? We want to know. Reach the API-Empire team through the Actor's Issues tab on the Apify Store, or through the support link on your Apify Console account — reports like these are how the scraper stays working as Facebook changes.