Extract public Facebook event details and organizer event lists to a clean dataset you can export to CSV, JSON, Excel, Google Sheets, or consume through the Apify API.
What does Facebook Events Scraper do?
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
Input
| Field | Type | Required | Description |
|---|---|---|---|
startUrls |
array | No | Direct event URLs, page/profile hosted-event URLs, or group event-list URLs. Keyword search URLs are intentionally not exposed because current public search routes return empty results. |
eventIds |
array | No | Plain Facebook event IDs to scrape directly. Use this when you already have numeric event IDs. |
maxItems |
integer | No | Maximum number of event records to save. Default is 10. |
includePastEvents |
boolean | No | Collect organizer past-events lists instead of upcoming lists and allow past detail records. |
proxyConfiguration |
object | No | Standard Apify proxy configuration. The default uses Apify Residential Proxy with session rotation on inaccessible/private/cookies, rate-limit, proxy, network, and TLS failures. |
Output
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 |
usersGoing and usersInterested are included as explicit null compatibility aliases when only a combined response count is publicly available.
Example output
{
"type": "event",
"eventId": "1855253805343101",
"name": "Public event name",
"url": "https://www.facebook.com/events/1855253805343101",
"dateTimeSentence": "Sat, 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"
}
Limits and behavior
- Only public Facebook surfaces are supported.
- Private events, login-only pages, deleted events, and blocked pages may not return data.
- Organizer list inputs are deduplicated by event ID before enrichment.
includePastEventsswitches organizer list collection from upcoming to past events.- If all inputs fail or produce no records, the Actor fails clearly instead of returning a silent empty success.
API usage
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,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/facebook-events-scraper').call(run_input={
'eventIds': ['1855253805343101'],
'maxItems': 1,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~facebook-events-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"eventIds":["1855253805343101"],"maxItems":1}'
MCP
You can use this Actor from Apify MCP tools by calling fetch_cat/facebook-events-scraper with the same JSON input shown above, then reading the default dataset items.
Add the Apify MCP server to Claude Desktop or Claude Code:
claude mcp add apify -- npx -y @apify/actors-mcp-server --actors fetch_cat/facebook-events-scraper --server-url https://mcp.apify.com?tools=fetch_cat/facebook-events-scraper
Example MCP server configuration:
{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server", "--actors", "fetch_cat/facebook-events-scraper"],
"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
}
}
}
Example prompts:
- "Run Facebook Events Scraper for this event ID and summarize the date, venue, and host."
- "Collect up to 5 upcoming Sziget Festival Facebook events and return the dataset as a table."
- "Export public Facebook event URLs from this organizer list and include ticket links when available."
Support and reproducibility
If a run fails or returns fewer events than expected, open the run in Apify Console and share the run URL with Support. For reproducible reports, include the exact startUrls or eventIds, maxItems, whether includePastEvents was enabled, and one public Facebook URL you expected to appear. Support can inspect the run log, INPUT record, and dataset to separate private/deleted Facebook pages from parser or proxy issues.