Facebook Event Scraper API
Our Facebook event scraper targets a public event page and returns structured JSON: the event name, description, start and end time, location, host, and the attending and interested counts. It reads schema.org event JSON-LD, Open Graph tags, and any embedded event entity. Facebook gates event pages behind a login for logged-out requests, so the endpoint is honest about when an event renders.
Getting Facebook Event data is harder than it looks
Facebook gates event pages behind a login for logged-out visitors: the www event URL commonly returns a bare app shell with no event data, and the official Graph API only reads events for Pages you administer. So a populated public event generally needs an authenticated session.
Hit the Facebook Event Scraper API with one request
curl "https://api.facebookscraperapi.com/api/v1/facebook/event?url=https://www.facebook.com/events/1234567890&api_key=$API_KEY" import requests
BASE = "https://api.facebookscraperapi.com"
API_KEY = "YOUR_API_KEY"
# Pass an event URL or id. Response follows the documented event shape below.
data = requests.get(
f"{BASE}/api/v1/facebook/event",
params={
"url": "https://www.facebook.com/events/1234567890",
"api_key": API_KEY,
},
timeout=30,
).json()
print(data["name"])
print("when:", data["start_time"], "->", data["end_time"])
print("where:", data["location"])
print("host:", data["host"], "| going:", data["attending_count"]) Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
url | optional | - | A full facebook.com/events/ |
id | optional | - | The numeric event id. One of url or id is required. |
country | optional | - | Optional two-letter country code to fetch the event as seen from that region. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
The Facebook Event Scraper API output schema
{
"id": "1234567890",
"url": "https://www.facebook.com/events/1234567890",
"name": "Downtown Summer Food Festival",
"description": "A weekend of local food trucks, live music, and family activities in the city park.",
"start_time": "2026-08-15T17:00:00-05:00",
"end_time": "2026-08-15T22:00:00-05:00",
"location": "City Park, Austin, TX",
"host": "Austin Events Co",
"attending_count": 1240,
"interested_count": 5380,
"cover_image": "https://scontent.xx.fbcdn.net/v/t39.30808-6/example_event_cover.jpg",
"thumbnail": "https://scontent.xx.fbcdn.net/v/t39.30808-6/example_event_cover.jpg",
"is_online": false,
"source": "facebook",
"data_source": "json-ld"
} | Field | Type | Description |
|---|---|---|
id | string | The event id from the URL. |
url | string | The canonical event URL. |
name | string | The event name from JSON-LD, the event entity, or og:title. |
description | string | The event description from JSON-LD, the entity, or og:description. |
start_time | string | The event start time, ISO from JSON-LD or the entity's start timestamp. |
end_time | string | The event end time when present, in the same form as start_time. |
location | string | The venue or place name from JSON-LD location or the event place. |
host | string | The event host or organizer name when exposed. |
attending_count | integer | The going count from the event entity. Null when the entity is not present. |
interested_count | integer | The interested count from the event entity. Null when the entity is not present. |
cover_image | string | URL of the event cover image. Also returned as thumbnail. |
is_online | boolean | True when JSON-LD marks the event as online, otherwise false or null. |
data_source | string | json-ld, relay-entity, or opengraph, showing where the event fields were read from. |
Build with Facebook data
Event discovery
Calendar building
Attendance signals
Host tracking
Venue and location analysis
Session-based pipelines
Why teams ship on our Facebook Event Scraper API
We force the request onto a US residential exit and merge schema.org event JSON-LD, Open Graph tags, and any embedded event entity, preferring JSON-LD for name, time, and location and the entity for the engagement counts. Event pages are login-gated logged-out, so when only the shell or wall is served the endpoint reports a clear diagnostic instead of a fabricated event.
URL or id input
Three sources merged
Structured times
Residential routing built in
Honest wall handling
Data-source flag
How the Facebook Event Scraper API compares
| Our API | DIY (requests / headless) | Facebook Graph API | |
|---|---|---|---|
| Read a public event | When it renders, else honest diagnostic | Usually a bare CSR shell | Events for Pages you administer only |
| Setup | API key only | Residential proxies, headless browser, parsers | Meta app plus a Page access token |
| Time, location, host | Returned when the event renders | You parse it yourself | Available for your own Pages |
| Anti-bot and proxies | Built in, US residential | You build and maintain it | Not applicable |
| Attending / interested | From the entity when present | You parse it yourself | Via Insights, admin only |
| Output | Flat, validated JSON | Whatever you parse | Nested JSON you map yourself |
Pricing built for scale
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
A Facebook event scraper reads a public event page and returns it in a structured format. Our Facebook event scraper API takes an event URL or id and, when the event renders, returns the name, description, start and end time, location, host, attending and interested counts, and cover image as JSON. The extractor merges schema.org event JSON-LD, Open Graph tags, and any embedded event entity.
Often not, and the endpoint is honest about it. Facebook gates event pages behind a login for logged-out visitors, and the www event URL commonly returns a bare app shell. When that happens, the endpoint returns a clear diagnostic rather than a fabricated event. For a reliably populated event, run the endpoint with an authenticated session.
When an event page renders, you get the event id, canonical URL, name, description, start and end time as ISO strings, location, host, attending and interested counts, cover image, an is_online flag, and a data_source flag showing whether the fields came from JSON-LD, the entity, or og tags. Counts are null when the entity is not present.
Those counts live in the embedded event entity, not in JSON-LD or Open Graph. When a page renders JSON-LD and og tags but not the full entity, you still get the name, time, and location, but attending_count and interested_count come back null. We never estimate engagement counts from partial data.
No. You authenticate with a single facebookscraperapi key. The official Graph API only reads events for Pages you administer, so it cannot return a public event on a Page you do not own. Our endpoint reads the public event page when it renders, with no app review. The free tier includes 1,000 requests.
Treat it as an event endpoint that returns the documented shape when a page renders and reports a classifiable diagnostic when Facebook walls or shells the page logged-out. Teams that need consistent event data run it with an authenticated session, and use the honest failure signal to detect and retry blocked captures instead of accepting empty rows.