Facebook Event Details & New-Event Monitor Scraper
Fetch public Facebook event details by URL, page listing, or keyword/city search, with venue GPS, hosts, ticket links, and a monitor mode that reports only newly-posted events.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
eventUrls | array | optional | Facebook event URLs or IDs, organizer event pages (e.g. https://www.facebook.com/TED/events, /upcoming_hosted_events, /past_hosted_events), or an events search URL. Group event URLs are skipped because they require login. |
searchQueries | array | optional | Keywords for Facebook's public events search (e.g. "music festival", "tech conference"). Each query is paginated up to Max results. |
searchLocation | string | optional | City or place text added to each search query (e.g. "Chicago"). This is a keyword hint, not a strict geographic filter; use Location ID for a strict filter. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
eventUrls | array | optional | Facebook event URLs or IDs, organizer event pages (e.g. https://www.facebook.com/TED/events, /upcoming_hosted_events, /past_hosted_events), or an events search URL. Group event URLs are skipped because they require login. |
searchQueries | array | optional | Keywords for Facebook's public events search (e.g. "music festival", "tech conference"). Each query is paginated up to Max results. |
searchLocation | string | optional | City or place text added to each search query (e.g. "Chicago"). This is a keyword hint, not a strict geographic filter; use Location ID for a strict filter. |
locationId | string | optional | Optional Facebook place ID or /places/<id>/ URL for a location filter on search. Facebook's place scope can include nearby cities. Text-to-ID lookup requires login, which this actor does not use. |
startDate | string | optional | Optional search filter lower bound in YYYY-MM-DD format (e.g. 2026-12-01). Applies to search queries only. |
endDate | string | optional | Optional search filter upper bound in YYYY-MM-DD format. Equal to Start date selects one day. |
category | string | optional | Optional server-side category filter for search queries. Categories are host-set, so some events have none. |
includePastEvents | boolean | optional | For organizer pages, fetch the Past collection instead of Upcoming. Ignored for event URLs and search. |
includeOccurrences | boolean | optional | For recurring events, add every occurrence date and URL to the event record. Uses one extra request only when the event is recurring. |
maxItems | integer | optional | Maximum events per organizer listing or search query. A direct event URL always returns its one event. |
monitorMode | boolean | optional | For organizer pages and searches, output only events not seen by an earlier run for the same target. The first run is a baseline. State is a named Apify store, is actor-wide (not per user), and is shared by all runs of this actor for the same target; clearing it or changing the target re-emits all events. |
Download the published input schema
View complete JSON
{
"description": "Scrape public Facebook event details, organizer Upcoming/Past listings, and keyword search with date, category and location filters. No login or cookies required.",
"properties": {
"category": {
"default": "Any",
"description": "Optional server-side category filter for search queries. Categories are host-set, so some events have none.",
"editor": "select",
"enum": [
"Any",
"Art",
"Causes",
"Comedy",
"Crafts",
"Dance",
"Drinks",
"Film",
"Fitness",
"Food",
"Games",
"Gardening",
"Health",
"Home",
"Literature",
"Music",
"Networking",
"Other",
"Party",
"Religion",
"Shopping",
"Sports",
"Theatre",
"Wellness"
],
"enumTitles": [
"Any category",
"Art",
"Causes",
"Comedy",
"Crafts",
"Dance",
"Drinks",
"Film",
"Fitness",
"Food",
"Games",
"Gardening",
"Health",
"Home",
"Literature",
"Music",
"Networking",
"Other",
"Party",
"Religion",
"Shopping",
"Sports",
"Theatre",
"Wellness"
],
"sectionCaption": "Filters",
"title": "Category",
"type": "string"
},
"endDate": {
"description": "Optional search filter upper bound in YYYY-MM-DD format. Equal to Start date selects one day.",
"editor": "textfield",
"sectionCaption": "Filters",
"title": "End date",
"type": "string"
},
"eventUrls": {
"description": "Facebook event URLs or IDs, organizer event pages (e.g. https://www.facebook.com/TED/events, /upcoming_hosted_events, /past_hosted_events), or an events search URL. Group event URLs are skipped because they require login.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [
"https://www.facebook.com/events/1855253805343101"
],
"sectionCaption": "Input",
"sectionDescription": "Add at least one event/page URL, search query, or search location.",
"title": "Event, organizer or search URLs",
"type": "array"
},
"includeOccurrences": {
"default": false,
"description": "For recurring events, add every occurrence date and URL to the event record. Uses one extra request only when the event is recurring.",
"editor": "checkbox",
"prefill": false,
"sectionCaption": "Options",
"title": "Expand recurring event dates",
"type": "boolean"
},
"includePastEvents": {
"default": false,
"description": "For organizer pages, fetch the Past collection instead of Upcoming. Ignored for event URLs and search.",
"editor": "checkbox",
"prefill": false,
"sectionCaption": "Options",
"title": "Include past events (organizer pages)",
"type": "boolean"
},
"locationId": {
"description": "Optional Facebook place ID or /places/<id>/ URL for a location filter on search. Facebook's place scope can include nearby cities. Text-to-ID lookup requires login, which this actor does not use.",
"editor": "textfield",
"sectionCaption": "Filters",
"title": "Location ID (strict)",
"type": "string"
},
"maxItems": {
"default": 50,
"description": "Maximum events per organizer listing or search query. A direct event URL always returns its one event.",
"editor": "number",
"maximum": 1000,
"minimum": 1,
"prefill": 50,
"sectionCaption": "Options",
"title": "Max results per target",
"type": "integer"
},
"monitorMode": {
"default": false,
"description": "For organizer pages and searches, output only events not seen by an earlier run for the same target. The first run is a baseline. State is a named Apify store, is actor-wide (not per user), and is shared by all runs of this actor for the same target; clearing it or changing the target re-emits all events.",
"editor": "checkbox",
"prefill": false,
"sectionCaption": "Options",
"title": "Monitor mode (only new events)",
"type": "boolean"
},
"searchLocation": {
"description": "City or place text added to each search query (e.g. \"Chicago\"). This is a keyword hint, not a strict geographic filter; use Location ID for a strict filter.",
"editor": "textfield",
"sectionCaption": "Input",
"title": "Search location text",
"type": "string"
},
"searchQueries": {
"description": "Keywords for Facebook's public events search (e.g. \"music festival\", \"tech conference\"). Each query is paginated up to Max results.",
"editor": "stringList",
"items": {
"type": "string"
},
"sectionCaption": "Input",
"title": "Search queries",
"type": "array"
},
"startDate": {
"description": "Optional search filter lower bound in YYYY-MM-DD format (e.g. 2026-12-01). Applies to search queries only.",
"editor": "textfield",
"sectionCaption": "Filters",
"title": "Start date",
"type": "string"
}
},
"schemaVersion": 1,
"title": "Facebook Events Scraper",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
events | string | optional | Dataset containing all scraped Facebook events |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "Public Facebook event records with dates, venue and GPS (when exposed), hosts, ticket data, recurring occurrences, online links and monitor-filtered results.",
"properties": {
"events": {
"description": "Dataset containing all scraped Facebook events",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Event Data",
"type": "string"
}
},
"title": "Facebook Event Details, Organizer Listings & Search Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"title": "Facebook Events Data",
"views": {
"overview": {
"display": {
"component": "table",
"properties": {
"event_id": {
"format": "text",
"label": "Event ID"
},
"formatted_date": {
"format": "text",
"label": "Date"
},
"location_name": {
"format": "text",
"label": "Venue"
},
"name": {
"format": "text",
"label": "Event Name"
},
"ticket_price_text": {
"format": "text",
"label": "Tickets"
},
"url": {
"format": "link",
"label": "URL"
},
"users_responded": {
"format": "number",
"label": "Responded"
}
}
},
"title": "Event Overview",
"transformation": {
"fields": [
"event_id",
"name",
"formatted_date",
"location_name",
"ticket_price_text",
"users_responded",
"url"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Facebook Event Details & New-Event Monitor Scraper
Read public Facebook event pages, organizer event lists, and keyword search results without logging in. Get dates and time zones, venue and GPS when Facebook exposes them, hosts, ticket links and prices, recurring-series dates, and an optional only-new mode for scheduled runs.
What this actor does
- Event details by URL or ID: name, description, start/end time, time zone, venue, coordinates, cover, hosts, creator, categories, tickets and online links.
- Organizer Upcoming and Past: read
/PageName/events,/PageName/upcoming_hosted_events, or/PageName/past_hosted_events; page through the whole list up to your limit instead of stopping at the first batch. - Keyword search: search Facebook's public events index and page through results. Optional date range, category, and location-ID filters (Facebook's place scope can include nearby cities).
- Recurring series: optionally add every occurrence date and URL for recurring events.
- Monitor mode: on a schedule, return only events not seen by an earlier run for the same organizer/search target. State is scoped to the Apify user who runs the actor, so separate users do not share history.
- Durable images: cover and host photos are copied into Apify storage; the original signed URL is kept beside the stored one.
Empty fields are omitted. The actor never fills a missing value with null, 0, or a placeholder.
Output per event
| Field | Description |
|---|---|
event_id, name, description, url |
Event identity and text. |
start_timestamp, end_timestamp |
Unix timestamps when the source provides them. |
start_date, end_date, formatted_date, timezone |
ISO dates, Facebook's own date sentence, and the event's time zone. |
is_online, is_canceled, is_past, is_sale_event |
Present when Facebook carries the flag. is_canceled is also inferred from a cancellation word in the event name when the flag is absent. |
event_kind, rsvp_style, event_frequency |
Visibility, RSVP style, recurring-series frequency. |
has_child_events, child_events_count |
Recurrence signals. |
occurrences[] |
When enabled: {event_id,url,start_timestamp,end_timestamp,start_date,end_date} for every series date. |
parent_event_id |
Present when the returned event is one occurrence of a series. |
location_name, location_address, location_city, location_city_id |
Venue text and city identifiers when exposed. |
one_line_address |
Facebook's normalized full address when available. |
latitude, longitude |
Venue GPS when the venue exposes coordinates. |
venue_place_id, venue_place_type, venue_url, venue_is_user_specified_location |
Venue metadata. |
photo_url, photo_url_original, photo_width, photo_height, photo_caption |
Stored cover image, its original signed URL, and dimensions/caption. |
video_url, video_url_original |
Cover video and original URL when downloadable; the original is retained if it is too large to rehost. |
hosts[] |
{id,name,url,type,is_verified,profile_picture_url,profile_picture_url_original}. |
creator |
{id,name,type} when Facebook exposes the creator. |
categories[], category_urls[] |
Host-set categories and Facebook's category search links. |
ticket_url, ticket_provider, ticket_price_text |
Ticket link, provider, and the price text Facebook shows. Structured price tiers are not public. |
description_links[] |
External links Facebook recognized in the description. |
online_type, online_url |
Online-event type and registration/live link when shown. |
duration |
Facebook's duration text (e.g. 2 hr). |
users_responded |
Combined response count; omitted when Facebook does not expose it. |
source_type |
event_url, page_events, search, or occurrence. |
input_url, scraped_at |
The target that produced the row and collection time. |
Input
| Field | Type | Default | Description |
|---|---|---|---|
eventUrls |
string list | – | Event URLs or IDs, organizer event pages, or an events search URL. The prefill contains one example event. |
searchQueries |
string list | – | Keywords for event search. |
searchLocation |
string | – | City/place text added to each query. This is a relevance hint, not a strict filter. |
locationId |
string | – | Numeric Facebook place ID or /places/<id>/ URL for a location filter. Facebook's place scope can include nearby cities. |
startDate, endDate |
string | – | YYYY-MM-DD search range. |
category |
select | Any | One of Facebook's event categories. |
includePastEvents |
boolean | false | Organizer pages: read Past instead of Upcoming. |
includeOccurrences |
boolean | false | Add every date of a recurring series. |
maxItems |
integer | 50 | Per organizer listing or search query (1–1000). |
monitorMode |
boolean | false | Only events not seen by a previous run for the same target. |
Examples
{
"eventUrls": ["https://www.facebook.com/events/1855253805343101"],
"includeOccurrences": true
}
{
"eventUrls": ["https://www.facebook.com/TED/upcoming_hosted_events"],
"maxItems": 100,
"monitorMode": true
}
{
"searchQueries": ["food festival"],
"searchLocation": "Chicago",
"startDate": "2026-11-01",
"endDate": "2026-11-30",
"category": "Food",
"maxItems": 100
}
Use cases
- Build a local what's-on calendar from venues and organizers.
- Watch an organizer's page on a schedule and report only newly posted events.
- Collect dates, venues, ticket links and host details for event directories.
- Research recurring series across a city or category.
- Map events that expose coordinates.
FAQ
Do I need a Facebook login or cookies? No. The actor reads only public pages. Group events, private events, and city-name typeahead require login and are not supported.
Why is a venue address or GPS missing? Many Facebook events use free-text locations without coordinates. The actor returns what the event exposes and omits the rest; it never geocodes or invents a location.
Why did a search return fewer results than I asked for? Facebook's public search index is relevance-ranked and changes between requests; categories are host-set and often empty. The actor retries a throttled first page and logs a warning when pagination stops short of your limit. Facebook can also end a deep result set early without an error; that can look like exhaustion, so a shortfall is not always flagged. It never fabricates rows to fill the gap.
How does monitor mode decide what is new? It stores the event IDs already reported for each organizer/search target in an Apify key-value store. State is scoped to the Apify user who runs the actor, so separate users do not share history for the same target. Runs without a user identity use a stable anonymous scope. The first run is a baseline; later runs omit seen IDs. Clearing the store, changing the target, or losing state causes a new baseline. There is no webhook; schedule the actor and read the dataset. Concurrent runs can race.
Can I get every date of a recurring event? Yes when the event exposes child occurrences. Turn on includeOccurrences; the record gets an occurrences[] list. A one-off event has no list.
Can I filter by city? Use locationId with a numeric Facebook place ID or /places/<id>/ URL. Facebook's place scope can include nearby cities, so treat it as best-effort, not an exact city boundary. Facebook's city text lookup needs login, so searchLocation is a keyword hint only.
Can I get attendee lists or separate going/interested counts? No. Facebook restricts attendee identities, and it no longer exposes separate going/interested figures to logged-out visitors. users_responded is the combined public count; there is no separate interested field.
Do group events work? No. Facebook Groups require a logged-in session, so group event URLs are skipped with a warning.
Are images permanent? Cover and host images are copied into Apify storage and the original signed URL is kept in *_original. Facebook CDN originals expire after a few days.
Is this affiliated with Facebook or Meta? No. This is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc.
Limits
- No group events, private events, guest lists, or split going/interested counts.
- No true radius/nearby search; a location filter needs a Facebook place ID, and its scope can include nearby cities.
- GPS and street addresses are conditional on what the venue exposes.
- Ticket price is text only; structured price tiers are not public.
- Search results are dynamic; a retry can still return fewer rows than requested.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build k2U4MYmHDAlszwlFn. Documentation is regenerated from the default published build; private drafts are not included.