Facebook Events Scraper
Pricing
from $2.39 / 1,000 item extracteds
Facebook Events Scraper
Export public Facebook event details and organizer event lists with dates, venues, hosts, ticket links, media, and engagement data to CSV, JSON, Excel, or API.
Pricing
from $2.39 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Fetch Cat
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
3
Monthly active users
5 days ago
Last modified
Categories
Share
Extract public Facebook event details and organizer event lists into a dataset for CSV, JSON, Excel, or API use. Collect dates, venues, hosts, ticket links and available media without providing a Facebook login. Anonymous access varies by target.
Quick start
Paste a public event URL or numeric event ID, choose a small maxItems, then run the Actor and open its dataset. For an older event, enable includePastEvents:
{"eventIds": ["1855253805343101"],"maxItems": 1,"includePastEvents": true}
This is an input recipe, not a guarantee that this event remains publicly accessible. Use an event you can view without signing in.
Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.
Ready-to-run examples
Choose a public example to see its settings before starting a run:
- Facebook Events API Example for Developers
- Export Facebook Organizer Events Data
- Facebook Events Scraper: Event Details
What you get
Facebook Events Scraper collects public event pages and public organizer hosted-event lists. Use it to monitor event calendars, enrich lead lists, track local event activity, or build research datasets without manually opening every event page.
The Actor accepts direct Facebook event URLs, numeric event IDs, and organizer hosted-event URLs such as facebook.com/{page}/upcoming_hosted_events.
Who is it for?
- Event marketers building outreach lists
- Local media and community researchers tracking upcoming events
- Tourism, venue, and entertainment teams monitoring public calendars
- Data teams enriching event IDs with names, dates, venues, hosts, and media
- Analysts who need repeatable exports instead of manual copy-paste work
How you can use the data
- Enrich a known public event ID. Use the existing numeric-ID recipe with a one-event cap. Keep
eventId,name,url,startISO,timezoneandscrapedAttogether, checking available dates and the source page before adding it to a calendar. - Review an organizer's public event list. Supply its supported hosted-event URL with a small cap. Inspect host, venue and event links for your own editorial or research sheet. This is not keyword or city-based event discovery.
- Research an older event explicitly. Enable past events when using the existing older-event recipe. A past-list URL selects the organizer list, while older detail records still require the past-events setting.
- Verify a calendar export downstream. Sort and compare records in your own system after reviewing source dates and timezones. Dataset order follows input or discovery order, and compatibility fields such as separate going/interested counts do not supply attendee lists or populated ticket-price details.
Input settings
| Setting / API key | Type | Required | Description |
|---|---|---|---|
Facebook URLs / startUrls | array | Alternative | Direct event URLs or public page, profile or group event-list URLs. Search and shared links are unsupported. |
Event IDs / eventIds | array | Alternative | Numeric Facebook event IDs. Supply URLs, IDs, or both. |
Maximum events / maxItems | integer | No | Maximum saved event records across the run. Default 10. |
Include past events / includePastEvents | boolean | No | Select past organizer lists and allow older detail records. Default false. |
Provide at least one URL or event ID, with at most 100 combined targets. IDs must contain 5–30 digits. maxItems accepts 1–10,000. URL strings and { "url": "..." } objects are accepted. Remote URL lists are not supported. New inputs use direct public connections. Explicit connection settings are respected. The Actor does not switch to another route when your selected route is unavailable.
Example inputs
Use the Quick start input as a small first run. Adjust the fields described above for your own data.
Output data
Each dataset item represents one Facebook event.
| Group | Fields |
|---|---|
| Identity and provenance | type, discoveredVia, id, eventId, inputUrl, url, canonicalUrl, sourceUrl, sourceType, scrapedAt |
| Core event details | name, description, isOnline, isCanceled, isPast, eventType, privacyInfo |
| Dates and times | formattedDate, dateTimeSentence, timezone, startTimestamp, endTimestamp, startISO, endISO, startDate, endDate, utcStartDate, utcEndDate, startTime, duration, durationSeconds |
| Venue and coordinates | location, locationName, locationAddress, address, locationCity, locationCountry, locationLat, locationLng, latitude, longitude, onlineDetails |
| Hosts and organizers | hosts, organizators, organizedBy, hostName, hostUrl, hostId, hostType, hostPhotoUri, hostCount |
| Media and links | photo, photos, photoUri, photoUrl, imageUrl, imageUri, imageCaption, video, videoUrl, videoThumbnailUri, videoThumbnailUrl, coverVideo, ticketUrl, ticketsInfo, externalLinks |
| Categories, series, and children | categories, discoveryCategories, categoryLabel, categoryCount, parentEvent, parentEventId, siblingEvents, siblingEventIds, hasChildEvents, childEvents, eventFrequency |
| Engagement and compatibility | usersResponded, usersGoing, usersInterested, paidContent, isClassEvent, isLiveAudioRoom, isRemoteLearningClass, isRemoteLearningCourse, groupEventPinnedToFeatured, hasRecordingAvailable |
Available fields depend on the public event. usersResponded is a combined count, not an attendee list. usersGoing, usersInterested, imageCaption, eventType, privacyInfo, eventFrequency, hasChildEvents, paidContent, isClassEvent, isLiveAudioRoom, isRemoteLearningClass, isRemoteLearningCourse, groupEventPinnedToFeatured and hasRecordingAvailable are always null. childEvents is always empty. ticketsInfo supplies only the available ticket URL. Its price, title, subtitle and provider fields are null. These compatibility fields do not imply extraction of those details.
Results follow input/discovery order, not chronological order. startTime repeats the formatted date text rather than an isolated clock time. Per-input outcomes and run totals are available in the RUN_SUMMARY key-value-store record. Diagnostic messages are not dataset rows.
More example output
Illustrative shape only. These sample values are not an observed event. Optional fields depend on what Facebook exposes publicly.
{"type": "event","eventId": "1855253805343101","name": "Public event name","url": "https://www.facebook.com/events/1855253805343101","dateTimeSentence": "Sun, Aug 9 at 10:00 AM UTC+02","utcStartDate": "2026-08-09T08:00:00.000Z","hostName": "Event organizer","locationName": "Venue name","usersResponded": 123,"discoveredVia": "event","scrapedAt": "2026-08-01T14:30:00.000Z"}
Download your results
Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.
See Apify's download and export guide for the available formats and field options.
Pricing
The start event is charged once when startup capacity permits the run, including runs that ultimately save no events. The primary item event is charged for each Facebook event record saved to the dataset. Failed inputs that produce no dataset items do not create item charges.
Use a small item cap for an initial organizer-list sample. See the live Pricing tab for current rates and discounts.
Tips for best results
- Use supported event IDs or public event-list URLs. Search and shared links are not supported starting inputs.
- Start with a small global cap. Organizer lists can contain several events, so inspect the initial output before increasing volume.
- Set past-event handling deliberately. The default is not a strict future-only filter, and older detail records need the explicit setting.
- Inspect actual date fields before calendar use. Source text and timezone coverage can vary, and
startTimeis formatted date text rather than an isolated clock time. - Read final status and per-input outcomes. Check
RUN_SUMMARYas well as saved records when a target is unavailable or work stops early.
Limits and caveats
The default run has a 15-minute timeout and a shorter processing limit. Large inputs can stop before reaching the item cap, and a shorter custom timeout can stop them earlier. Start a new run rather than restarting or resurrecting one that already began processing.
- Only public Facebook surfaces are supported.
- Private events, login-only pages, missing events and blocked pages may not return data. An inaccessible response alone does not establish why a target is unavailable.
- Organizer list inputs are deduplicated by event ID before enrichment.
includePastEventsselects past organizer lists and allows past details. An explicitpast_hosted_eventsURL also selects a past list, but older detail records still requireincludePastEvents: true. With the default setting, events are filtered only when their end time (or start time if no end is known) is more than 24 hours old. This is not a strict future-only filter.- Completed valid lists with no matches and events excluded as past succeed with an empty dataset and truthful reasons in the
RUN_SUMMARYkey-value-store record. - Parser failures, unverified blocked responses and unresolved extraction failures are not treated as legitimate emptiness. All-failed extraction runs fail. Mixed batches preserve useful records and diagnostics.
- Essential storage, billing and processing-limit failures stop the run. Saved records may remain available in a failed run. Check the final run status as well as its dataset.
Automation and integrations
Save your settings for next time
Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.
Run on a schedule
Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.
Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.
Send results to your other tools
Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.
For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.
API usage
Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.
The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.
For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~facebook-events-scraper/runs' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \--data @- <<'JSON'{"eventIds": ["1855253805343101"],"maxItems": 1,"includePastEvents": true}JSON
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/facebook-events-scraper').call({"eventIds": ["1855253805343101"],"maxItems": 1,"includePastEvents": true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('fetch_cat/facebook-events-scraper').call(run_input={'eventIds': ['1855253805343101'], 'maxItems': 1, 'includePastEvents': True})print(client.dataset(run['defaultDatasetId']).list_items().items)
MCP and AI agents
You can ask your AI assistant to collect data with Facebook Events Scraper and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.
Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.
Easier setup with an Apify plugin
If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.
Use Apify AI in Console
Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's Facebook Events Scraper. You can describe the data you want and ask questions about the results.
Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.
Choose your assistant
- Claude and Claude Code (Anthropic): Apify setup guide.
- ChatGPT and Codex (OpenAI): Apify setup guides.
- Grok Bot (xAI): Apify plugin guide.
- Gemini CLI (Google): MCP server setup guide. Use the server URL below with the HTTP configuration supported by Gemini CLI.
Connect just this scraper
To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/facebook-events-scraper"}}}
Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.
Use Apify's general server
Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use Facebook Events Scraper by Fetch Cat, or give it the identifier fetch_cat/facebook-events-scraper.
Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.
Example requests
- “Use Fetch Cat’s Facebook Events Scraper to retrieve one public event from the numeric ID I provide. Show its available name, source URL, start time and timezone so I can verify it before a calendar import.”
- “Collect up to 5 events from the public organizer hosted-events URL I provide. Include host names, venue information and source event links, then explain any unavailable targets or partial output.”
- “Retrieve the older public event ID I supply with past events enabled and a one-event cap. Show available dates and ticket links without inventing ticket prices or attendee information.”
Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.
Pay with x402
If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.
Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.
Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.
Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.
Other ways for agents to pay
Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.
FAQ
Can I export public Facebook events to CSV or JSON without logging in?
Yes. Provide public Facebook event URLs or public organizer event-list URLs, then export Facebook events data from the Apify dataset as CSV, JSON, Excel, Google Sheets, or via API.
Can I scrape Facebook organizer event lists through an API?
Yes. Use this Actor as a Facebook events API endpoint through Apify: send organizer URLs, set maxItems, and read normalized event records from the dataset.
Can it scrape private Facebook events?
No. The Actor is designed for public event pages and public organizer event lists only.
Why did my organizer URL return fewer events than expected?
Facebook may expose only a limited public list for anonymous visitors. The Actor saves available discovered events within maxItems, run budgets and charge capacity. Public lists may be incomplete even when more events are visible after login.
Can I scrape past events?
Yes. Set includePastEvents to true for direct event IDs or URLs, or to request an organizer's past-events list.
Does it support keyword search?
No. Supply event IDs or supported Facebook URLs. City discovery, keyword queries and search-result URLs are not supported.
How do I keep a test run cheap?
Use one direct eventIds value or one direct event URL with maxItems: 1.
Related Actors
- Facebook Pages Scraper — Collect public Page profile and contact fields, visible audience counts and optional post links.
- Facebook Ads Library Scraper — Collect public Meta ad copy, advertiser details and available creative links for advertising research.
- Facebook Posts Scraper — Collect visible public post text, publication dates and media from known Pages, groups or post URLs.
- Eventbrite Events Scraper — Collect public event URLs, dates, venues and available ticket-price information from Eventbrite.
- Meetup Events Scraper — Collect public event titles, dates, venues and available RSVP counts from Meetup targets or searches.
Support and feedback
For custom additions or integrations, email hello@fetchcat.dev.
Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.
Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.
Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.
Made with care for curious people, AI agents and the possibilities in data. ♥