Facebook Events Scraper - Events by Keyword, City or Page
Pricing
from $0.87 / 1,000 events
Facebook Events Scraper - Events by Keyword, City or Page
Scrape public Facebook events by keyword, city, or Page, Group and event links. Each row has the name, start and end time with timezone, venue address and coordinates, organiser, ticket link, cover image and the going and interested counts. No login needed. $0.90 per 1,000 events.
Pricing
from $0.87 / 1,000 events
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
5
Monthly active users
2 days ago
Last modified
Categories
Share
Search public Facebook events by keyword or city, or paste event, Page and Group links, and get one row per event: name, description, start and end time with the timezone, venue and coordinates, organiser, ticket link and how many people said they are going.
The number to plan around: Facebook's public events search hands back about eight events per search term. One term is a sample, not a sweep. Several terms, a city, or a list of Pages is what makes a run worth doing.
| Input | Search terms, a city, or event, Page and Group links |
| Output | One row per event: name, description, start and end time, timezone, venue, coordinates, organisers, ticket link, going and interested counts |
| Ceiling | 1,000 events per run, about 8 per search term |
| Account needed | None from you |
| Price | $0.90 per 1,000 events, flat on every plan. The free plan's $5 a month covers about 5,500 |
🔍 What Facebook Events Scraper does
Each search term is run in turn, a city narrows them, and anything you paste into startUrls is
followed as well. An event found twice, once by search and once from its organiser's Page, is
delivered once and charged once.
Then every event that makes the cut is opened for the full detail. That is where the description, the exact times, the venue coordinates, the organisers and the ticket link come from, rather than the thin card the search results carry.
A city name is matched against Facebook's own location list, and a few well-known names land in
the wrong place: Rome, Hamburg, Brussels, Warsaw and Bristol can resolve to same-named
towns in the United States, and San Diego to a different town altogether. If the city matters,
open Facebook events in your browser, pick the city there, and paste that events/explore/ URL
into location instead.
📋 What data you get from each Facebook event
| What you get | Field |
|---|---|
| The event, its link and its description | eventId, eventUrl, name, description |
| When it starts and ends | startTime, startTimestamp, endTime, endTimestamp, timezone, dateText |
| Where it happens | venueName, venueAddress, venueCity, venueUrl, latitude, longitude |
| Online or not, cancelled or past | isOnline, onlineUrl, isCanceled, isPast |
| Who is hosting it | organizers, organizerName, organizerUrl |
| Tickets | ticketUrl, priceRange |
| Going, interested and the two together | attendingCount, interestedCount, respondedCount |
| Cover image and categories | coverImageUrl, categories |
| Which of your inputs found it | sourceType, sourceQuery, sourceUrl |
▶️ How to scrape Facebook events
- Open Facebook Events Scraper and click Try for free.
- Put what you are looking for into Search terms, one per line, and a city into City or location if it matters.
- Set Maximum events. Start at 20 while you look at the output.
- Click Start.
- Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.
Run it with empty input and you get one labelled sample row, which is not charged, so you can see the shape before you spend anything.
💰 How much does it cost to scrape Facebook events?
$0.90 per 1,000 events. The same rate on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 5,500 events.
You pay for events that come back with detail. The sample row, every diagnostic row, events dropped by your date window or your filters, and an event found twice through two different inputs are not charged, and neither is a search that finds nothing.
📥 What you give it
{"searchTerms": ["music festival", "food festival"],"location": "Berlin","maxEvents": 20,"startingBefore": "30 days"}
| Field | Default | What it is |
|---|---|---|
searchTerms | none | What to search for: concert, food festival, music festival. Up to 20 terms, each searched in turn. |
location | none | A city name, or an events/explore/ URL for an exact area. A name Facebook does not know is folded into the search text, and a free note row tells you so. |
startUrls | none | Any mix of event links, Page links or handles whose events you want, Group links, a search URL you built in the browser, or a city explore URL. Up to 50. |
maxEvents | empty, runs as 20 | Total events across everything above, 1 to 1,000. This is your spend ceiling. |
startingFrom, startingBefore | none | The window on the start time. 2026-09-01, a full timestamp, an epoch, or a window like 30 days, which counts forward from now; add ago to count back. Anything it cannot read as a date switches that end off. Filtered events are never charged. |
category | none | One of Facebook's own event categories, from music to gardening. Search terms only. |
onlineOnly | off | Only events Facebook marks as online. |
paidOnly | off | Only ticketed events. Search terms only. |
includePastEvents | off | Also read a Page's or Group's past events. Off means upcoming only. |
proxyUrls | none | Optional. One URL per line if you want the traffic to leave through servers you already pay for. |
sessionCookies | none | Optional, and most runs never touch it. Runs are logged out by default, which is enough for public Facebook content. Your own c_user and xs pair is for what Facebook shows only to a signed-in account: the run then uses your account and your own rate limit, shared with nobody. Treat the values like a password. |
📤 What you get back
A real row from a run on 21 September 2026, with the cover link and the category link trimmed:
{"ok": true,"charged": true,"recordType": "event","eventId": "2296861047800608","eventUrl": "https://www.facebook.com/events/2296861047800608/","name": "Pakistan Music Festival 2026","description": "Join us for the Pakistan Music Festival 2026, happening on 25, 26 & 27 September at 8 PM at the Arts Council of Pakistan, Karachi. ...","startTime": "2026-09-25T15:00:00.000Z","startTimestamp": 1790348400,"endTime": "2026-09-27T18:00:00.000Z","endTimestamp": 1790532000,"timezone": "UTC+05","dateText": "25 Sep at 20:00 – 27 Sep at 23:00 PKT","venueName": "Arts Council of Pakistan Karachi","venueAddress": null,"venueCity": null,"latitude": 24.85276668172,"longitude": 67.020439147949,"isOnline": false,"onlineUrl": null,"organizers": [{ "id": "100067158235335", "name": "Arts Council of Pakistan Karachi", "url": "https://www.facebook.com/ACPKHI", "type": "User" }],"organizerName": "Arts Council of Pakistan Karachi","organizerUrl": "https://www.facebook.com/ACPKHI","ticketUrl": "http://www.acpkhi.com/events","priceRange": null,"attendingCount": 67,"interestedCount": 557,"respondedCount": 624,"coverImageUrl": "https://scontent-lax3-2.xx.fbcdn.net/v/t39.30808-6/801786067_13878375...","categories": [{ "label": "Music", "uri": "https://www.facebook.com/events/search/?filters=..." }],"isCanceled": false,"isPast": false,"sourceType": "search","sourceQuery": "music festival","sourceUrl": "https://www.facebook.com/events/search/?q=music+festival","scrapedAt": "2026-09-21T01:29:28.847Z"}
| Field | How to read it |
|---|---|
eventId, eventUrl | Your key and the public link. |
startTime, endTime, timezone, dateText | ISO times in UTC, with the epoch versions beside them, the event's own timezone, and the date line exactly as Facebook prints it locally. |
venueName, venueAddress, venueCity, venueUrl | The place, as far as the organiser filled it in. Plenty of events name a venue and no street. |
latitude, longitude | Coordinates where Facebook has them, ready to map or to match against a radius. |
organizers, organizerName, organizerUrl | Every host with its id, name, link and type. The two flat fields are the first one. |
ticketUrl, priceRange | The outbound ticket link and the price line where the organiser published one. |
attendingCount, interestedCount, respondedCount | Going, interested, and the two added together. Facebook rounds these on busy events. |
isOnline, onlineUrl, isCanceled, isPast | Whether it is online and where, and whether it is cancelled or already over. |
sourceType, sourceQuery, sourceUrl | Which of your inputs found this event: search, city, page, group or url. Useful when you run twenty terms at once. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Billed |
|---|---|---|
| An event | ok: true and charged: true | yes |
| The sample row | _sample: true | no |
| A diagnostic | _diagnostic: true and an errorCode | no |
Filter on charged == true and you have your data. The sample row says recordType: "event" too,
so charged is the flag to trust.
errorCode | What happened |
|---|---|
BAD_INPUT | An entry could not be read as an event, Page, Group or search link. |
LOCATION_UNRESOLVED | Facebook has no location by that name, so the city was folded into the search text. |
NO_RESULTS | The search ran and found nothing, or your filters dropped everything. The row carries the count it found first. |
NOT_FOUND | No public event at that link. |
BLOCKED | Facebook would not serve that page on this run. Re-running usually clears it. |
PARSE_FAILED | The page came back in a shape the run could not read. |
NETWORK | Facebook could not be reached. |
TIME_BUDGET | The run ran out of time before finishing that job. |
PROXY_INPUT_ADJUSTED | A proxyConfiguration setting this actor does not use was dropped. The run carried on. |
CHARGE_ERROR | A billing event could not be recorded. Told to you rather than hidden. |
UNEXPECTED_ERROR | Anything else, with the message attached. |
One quirk of the Console's Overview table: it shows the name, times and venue, so coordinates, organisers, tickets and attendance read as missing there. Open the row or download the JSON and they are all present.
💡 What people use it for
- Building a what's-on list for one city and one month, with venues and ticket links attached.
- Finding sponsorship and stall opportunities: search a category, filter to ticketed, read
organizerUrl. - Watching the events a set of Pages is hosting, by pasting the Pages rather than searching.
- Feeding a map:
latitudeandlongitudeare on the row, so events plot without geocoding.
From a city's events to the people running them, in three steps:
- Run this on a city with a few search terms.
- Copy the
organizerUrlof the events you care about. - Paste them into
Facebook Page Contact Info Scraper
as
startUrlsfor each organiser's website, e-mail and phone.
🚧 What it does not do
- No guest lists. Facebook never publishes who is going, only how many.
- Search is shallow. About eight events per term is what the public search returns. Depth comes
from more terms and more Pages, not from a bigger number in
maxEvents. categoryandpaidOnlyapply to search terms only. Events reached through a Page, Group, city or event link come back whatever their category or price, and they are charged like any other row. Filter those in your own sheet.- Private, group-only and invite-gated events are invisible, as they are to anyone not signed in and invited.
- Recurring series are not expanded. A weekly event is one event, the way Facebook lists it.
- You can get fewer events than you asked for. Past events are only recognised once the full detail is read, and a run does not go back for replacements after dropping them.
- Attendance counts are rounded on busy events, because Facebook rounds them before publishing.
- Some two-word phrases return nothing at all. Try the broader word on its own before assuming there are no events.
🧭 Which events scraper do you need?
| If you want | Use |
|---|---|
| Public Facebook events by keyword, city or link | This one |
| The website, e-mail and phone of the organiser's Page | Facebook Page Contact Info Scraper |
| Recent posts from a Page | Facebook Posts Scraper |
| Posts from a public group | Facebook Groups Scraper |
| Upcoming Eventbrite events in a city | Eventbrite Events Scraper |
| Luma events by city, calendar or link | Luma Events Scraper |
| Trade shows, conferences and expos | 10Times Events Scraper |
❓ Questions people ask
Do I need a Facebook account to scrape events?
No. Runs are logged out by default, and that is enough for public events. sessionCookies is for
what Facebook shows only to a signed-in account: your own cookie then uses your account and your own
rate limit.
How do I get more events for one city?
Run several search terms against it, add the Pages of the venues you care about, and paste the
city's events/explore/ URL rather than typing the name.
Why did my city return events somewhere else?
A few city names match the wrong town. Paste the events/explore/ URL for the city instead, and the
run uses exactly that area.
Can I get past events?
From a Page or Group, yes, with includePastEvents. Search itself is about what is coming up.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/facebook-events-scraper. Either way
the run happens on your Apify account at the same price.
Is scraping Facebook events legal?
This reads public events only. Organiser details are still personal data under GDPR and similar laws, so have a reason for collecting them. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Paste the search term or link you used and the run ID, and the log is enough for us to see what happened.


