Facebook Events Scraper — Keyword & City Search, Upcoming Only
Pricing
from $4.00 / 1,000 event scrapeds
Facebook Events Scraper — Keyword & City Search, Upcoming Only
Search Facebook events by keyword and city, or collect every event from any page or group. Filter to upcoming events or any date range. Each event comes with venue name and GPS coordinates, start and end times, timezone, hosts, categories and cover image. No login or cookies needed.
Pricing
from $4.00 / 1,000 event scrapeds
Rating
5.0
(1)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
43
Total users
14
Monthly active users
8 hours ago
Last modified
Categories
Features
Share
Find upcoming Facebook events by keyword and city, or pull every event from a page or group. Type a keyword like "jazz concert", pick a city, keep only upcoming events, and get back the full record for each one: name, description, start and end time, timezone, the venue with GPS coordinates, every host with their profile links, duration, categories and cover image.
No login. No cookies. No tokens. Nothing to configure — press Start.
| You provide | You get back |
|---|---|
An event URL — facebook.com/events/1023978871819924 | That event, fully detailed |
A page or organizer — facebook.com/LiveNationAustralia | Their full calendar — three event tabs, paginated and merged |
A group — facebook.com/groups/123456789 | The group's upcoming and past events |
A city explore page — facebook.com/events/explore/fr-paris/110774245616525 | Events happening in that city |
A search URL — facebook.com/events/search/?q=jazz | The events matching that search |
A plain keyword — "jazz concert" | Matching events anywhere, or in a city you pick |
Why use it
- Venue and GPS, not
null. Most Facebook event scrapers return an empty location field. This one returns the venue name plus latitude and longitude, so events land straight on a map. - End times, not just start times. Both timestamps, in unix and ISO, plus the timezone.
- Hosts as data. Each host as a structured record with id, name and profile URL — not one flattened string.
- Zero setup. No Facebook account, no session cookie, no API key.
How it works
- Nothing to set up: no Facebook account, cookies or API key.
- Each start URL is classified: direct event, page/organizer, group, city explore, or search URL.
- Page URLs are read three ways —
/events,/upcoming_hosted_eventsand/past_hosted_events— and the results de-duplicated, because Facebook serves a different slice on each. Groups and city pages resolve to their single tab. - Each event comes back as one complete row: description, hosts, categories, venue, coordinates and response counts.
⬇️ Input
Facebook Events Scraper takes URLs — paste them into startUrls. Five kinds work.
🔗 Event URL
A specific event. Everything available is extracted for each one.
https://www.facebook.com/events/1023978871819924
📄 Pages and organizers
Give the page and the scraper reads all three of its event tabs and merges them, so you get more than any single tab returns:
https://www.facebook.com/LiveNationAustralia
It reads /events, /upcoming_hosted_events and /past_hosted_events, pages through each one, and removes duplicates. Facebook shows only ~8 events per tab at first; this Actor pages past that, so a busy calendar returns dozens rather than a handful (48 unique events on a live test where a single tab gives 8). Raise maxEvents to go deeper. You can also pass any one of those URLs directly if you only want that tab.
👥 Groups
Both upcoming and past events of a group:
https://www.facebook.com/groups/GROUP_NAME/events
🌍 City explore
Every event Facebook is surfacing for a city:
https://www.facebook.com/events/explore/fr-paris/110774245616525
Get the URL by opening Facebook Events and picking a city — the address bar gives you the slug and location id.
🔍 Keyword search
Put keywords in searchQueries and skip URLs entirely:
{"searchQueries": ["jazz concert", "startup meetup"],"searchLocation": "110774245616525","onlyFutureEvents": true,"maxEvents": 100}
Each keyword is searched and paginated, so you get dozens of matches rather than the handful Facebook shows on the first screen. A live run for jazz concert returned 25 events across three pages. Keep the default residential proxy; without it, the search often stops at the first page.
Pin it to a city with searchLocation. Without it, Facebook picks the area on its own, so the same keyword can return Norway, North Carolina and Sri Lanka in one batch. Pass a Facebook place id, or a city explore URL and the trailing number is used:
"searchLocation": "110774245616525""searchLocation": "https://www.facebook.com/events/explore/fr-paris/110774245616525"
With Paris set, concert returns Accor Arena, Port de la Villette and boulevard Poissonnière — nothing else.
To find a city's id, open Facebook Events, pick a city, and copy the number off the end of the URL. Facebook's own city-name lookup requires a login, so this Actor takes the id rather than pretending to resolve names it cannot see.
You can also paste a search URL straight into startUrls, with or without Facebook's own filter parameters:
https://www.facebook.com/events/search/?q=Comedy
Mixing inputs
Pass as many URLs of any kind as you like in one run. maxEvents caps the whole run, not each URL, so a run is never more expensive than you set it.
{"startUrls": ["https://www.facebook.com/events/1023978871819924","https://www.facebook.com/LiveNationAustralia","https://www.facebook.com/events/explore/fr-paris/110774245616525"],"maxEvents": 200}
Only future events, or a date range
Set Future events only (onlyFutureEvents) and the run returns nothing that has already started. For a narrower slice, add Start date from / Start date to.
{"startUrls": ["https://www.facebook.com/LiveNationAustralia"],"onlyFutureEvents": true,"startDateTo": "30 days","maxEvents": 100}
Both date fields accept a plain date (2026-09-01), a full ISO timestamp (2026-09-01T18:00:00Z), or an offset from the run time (7 days, -1 month, 2 weeks). A plain date used as the upper bound covers that whole day.
Two things this does beyond filtering the output:
- The page's
past_hosted_eventstab is not requested at all on a future-only run, and a group's past bucket is skipped. Fewer requests, faster runs. - Facebook publishes each event's start time in the listing, so an out-of-window event is dropped before its page is fetched. Excluded events never become results, so
maxEventsis spent entirely on events you asked for — a run capped at 50 returns 50 matching events, not 50 events of which some match.
Filtering is on the event start time. Events Facebook lists without a start time are kept rather than guessed at.
Input fields
| Field | Type | Required | Notes |
|---|---|---|---|
startUrls | array | no* | Any mix of the five kinds above. |
searchQueries | array | no* | Keywords to search, e.g. ["jazz concert"]. Paginated. |
searchLocation | string | no | Facebook place id or city explore URL; pins keyword search to one city. |
maxEvents | integer | no | Caps the whole run. Default 100. |
onlyFutureEvents | boolean | no | Skip anything already started. Default false. |
startDateFrom | string | no | Keep events starting on or after this. Date, ISO timestamp, or offset like 7 days. |
startDateTo | string | no | Keep events starting on or before this. Same formats. |
proxyConfiguration | object | no | Residential proxies recommended. The default works out of the box. |
* Provide startUrls, searchQueries, or both. A run with neither fails immediately.
Output
One row per event. Real result, abridged:
{"id": "1023978871819924","url": "https://www.facebook.com/events/1023978871819924/","name": "Red Hot Chili Peppers with Post Malone | Sydney","description": "Red Hot Chili Peppers are heading to Australia…","dateTimeSentence": "Thursday, February 2, 2023 at 8:00 PM – 12:00 AM AEDT","startTimestamp": 1675328400,"endTimestamp": 1675342800,"startTimeIso": "2023-02-02T09:00:00.000Z","endTimeIso": "2023-02-02T13:00:00.000Z","timezone": "UTC+11","duration": "4 hr","venueName": "Accor Stadium","latitude": -33.84726902893,"longitude": 151.06334209442,"usersResponded": 17528,"isPast": true,"isOnline": false,"isCanceled": false,"eventKind": "PUBLIC_TYPE","hostedBy": "Event by Live Nation Australia, Post Malone and Red Hot Chili Peppers","hosts": [{ "id": "100064346752920", "name": "Live Nation Australia", "url": "https://www.facebook.com/LiveNationAustralia" },{ "id": "100044283856936", "name": "Post Malone", "url": "https://www.facebook.com/postmalone" }],"categories": [{ "label": "Music", "url": "https://www.facebook.com/events/search/?…" }],"coverImageUrl": "https://scontent.fsrg6-1.fna.fbcdn.net/…jpg","onlineUrl": null,"ticketUrl": null,"sourceUrl": "https://www.facebook.com/events/1023978871819924"}
Key fields
| Field | Description |
|---|---|
startTimestamp / endTimestamp | Unix seconds. startTimeIso / endTimeIso are the same in ISO 8601. |
venueName, latitude, longitude | The venue and its coordinates. Online events report Online event with no coordinates. |
hosts[] | Every host with id, name and profile url. |
usersResponded | People who responded to the event. |
categories[] | Facebook's own discovery categories, e.g. Music, Theater. |
onlineUrl | For online events, the external stream or meeting link when Facebook exposes one. |
Pricing
Pay-per-result. You pay for events returned, nothing else.
Notes & limitations
- Keyword search is location-sensitive. With no
searchLocation, Facebook decides the area on its own, so results scatter across countries. Set a city id for predictable output. - Keyword search depth is bounded by
maxEventsand an internal cap of 40 search pages per keyword (~9 events per page). If Facebook changes its search pages, the Actor logs a warning and keeps the first page of results rather than failing the run. - Keyword search past the first page needs the proxy. With the default residential proxy, pagination runs normally. With
useApifyProxy: false, Facebook often stops the search after the first page; the Actor warns and keeps those ~7 results instead of failing. If a keyword returns exactly 7 events and the log shows that warning, switch the proxy back to the default. - Earlier versions of this Actor refused bare keyword URLs, on the basis that Facebook answered "We didn't find any results" for them. That was re-tested on 2026-08-26 and is no longer true — keyword search now returns relevant, upcoming, paginated events with no login. The refusal has been removed.
- Page coverage is bounded by
maxEvents, not by Facebook. Facebook shows only ~8 events per tab at first, but this Actor pages through the rest, so raisingmaxEventsgoes deeper (8 → 48 on a live test). Very large calendars stop at an internal safety cap of 40 pagination pages per tab. If Facebook changes its event pages, the Actor logs a warning and returns the first events it found rather than failing the run. usersInterestedis deliberately not emitted. The interested count on an event page belongs to the related-events rail rather than the event you asked for, so reporting it would attribute another event's number to yours.ticketUrl,onlineUrlandsiblingEvents(other dates of a recurring event) are populated only when Facebook exposes them, which is a minority of events.- No
privacyInfofield: Facebook ships it as an empty placeholder on the page, and it only restatedeventKindplushostedBy, which are both emitted as real fields. - Past events remain fully scrapable;
isPastandstartTimeIsotell you which. SetonlyFutureEvents(or astartDateFrom/startDateTorange) to exclude them — excluded events are dropped before they are fetched, so they cost nothing. - A date filter that matches nothing is reported as a successful empty run, not a failure. A run that finds no events at all still fails loudly, because that means a block or a markup change.
FAQ
Do I need a Facebook account? No. Nothing to log into, no cookie to paste.
Can I scrape a venue's or promoter's whole calendar? Yes — give the page URL and the actor reads its events tab.
Can I search by keyword? Yes — put keywords in searchQueries. Add searchLocation to pin them to a city, otherwise Facebook picks the area on its own.
Why did my keyword return nothing? Either the keyword is too narrow, or a filter excluded everything. Check searchLocation and the date fields first — a nonsense keyword genuinely returns zero, which is Facebook answering honestly.
🤖 For AI Agents & LLM Apps
- Purpose: turn Facebook event or page URLs into structured event records with venue coordinates and precise timing.
- Minimal input:
{ "startUrls": ["https://www.facebook.com/events/1023978871819924"] }— no auth. - Output fields:
id, url, name, description, dateTimeSentence, startTimestamp, endTimestamp, startTimeIso, endTimeIso, timezone, duration, isPast, isOnline, isCanceled, eventKind, venueName, city, latitude, longitude, onlineUrl, coverImageUrl, usersResponded, hosts[], hostedBy, categories[], siblingEvents[], ticketUrl, sourceUrl. - Date filtering:
onlyFutureEvents(boolean),startDateFrom/startDateTo(date, ISO timestamp, or relative offset such as7 days). Applied to the event start time, and applied before fetching wherever Facebook exposes the start time in the listing. - Billing: pay-per-result;
maxEventsbounds cost. One request per event. Date-excluded events produce no result and no charge. - Keyword search:
searchQueries(array of keywords) with optionalsearchLocation(Facebook place id or city explore URL). Paginated;maxEventsbounds depth. EitherstartUrlsorsearchQueriesis required — neither alone is mandatory.
⚠️ Disclaimer
This actor collects only publicly visible Facebook event information, without logging in or bypassing any access control. Use it in compliance with Facebook's Terms of Service and applicable law, including data-protection rules. You are responsible for how you use the data. This tool is not affiliated with or endorsed by Meta Platforms, Inc.
SEO Keywords
Facebook events scraper, scrape Facebook events, Facebook event data, event API, Facebook event extractor, venue GPS coordinates, event listings scraper, Facebook page events, organizer events, event start end time, local events data, event aggregator, Facebook events export, no login Facebook scraper.