# Facebook Events Scraper (`fetch_cat/facebook-events-scraper`) Actor

Export public Facebook event details and organizer event lists with dates, venues, hosts, ticket links, media, and engagement data to CSV, JSON, Excel, or API.

- **URL**: https://apify.com/fetch\_cat/facebook-events-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Social media, Marketing, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.39 / 1,000 item extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Facebook Events Scraper

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. |

### Ready-to-run examples

- [Facebook Events Scraper: Event Details](https://apify.com/fetch_cat/facebook-events-scraper/examples/scrape-facebook-event-details) extracts one public event with dates, venue, host, ticket, media, engagement, and provenance fields.
- [Export Facebook Organizer Events Data](https://apify.com/fetch_cat/facebook-events-scraper/examples/export-facebook-organizer-events-data) collects up to five public events from an organizer's hosted-events page for CSV, JSON, or API workflows.
- [Facebook Events API Example for Developers](https://apify.com/fetch_cat/facebook-events-scraper/examples/facebook-events-api-example) demonstrates mixed organizer and event-ID input with deduplicated structured output.

Every example is a public Apify task with a safe input, the `overview` dataset view, a current-build run, and verified non-empty output. Open one to inspect its input or run it as-is.

### Example input

```json
{
  "startUrls": [
    { "url": "https://www.facebook.com/events/1855253805343101" }
  ],
  "maxItems": 1,
  "includePastEvents": false
}
```

### 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

```json
{
  "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"
}
```

### Pricing

This Actor uses pay-per-event pricing:

- A small one-time `start` charge is applied when a run starts.
- The primary `item` charge is applied for each Facebook event record saved to the dataset.
- Failed inputs that produce no dataset items do not create per-item charges.
- See the live [Pricing tab](https://apify.com/fetch_cat/facebook-events-scraper/pricing) for current rates.

Use `maxItems` to control spend. Organizer lists can contain several events, so set a low limit for test runs and increase it once the output matches your workflow.

### 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.
- `includePastEvents` switches 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

```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

```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

```bash
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 and AI agents

Use this Actor through the official Apify MCP server. The focused URL exposes only Facebook Events Scraper.

```bash
claude mcp add --transport http apify-facebook-events "https://mcp.apify.com?tools=fetch_cat/facebook-events-scraper"
```

```json
{
  "mcpServers": {
    "apify-facebook-events": {
      "url": "https://mcp.apify.com?tools=fetch_cat/facebook-events-scraper"
    }
  }
}
```

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."

### Related actors

#### More Facebook scrapers

- [Facebook Ads Library Scraper](https://apify.com/fetch_cat/facebook-ads-library-scraper)
- [Facebook Comments Scraper](https://apify.com/fetch_cat/facebook-comments-scraper)
- [Facebook Marketplace Scraper](https://apify.com/fetch_cat/facebook-marketplace-scraper)
- [Facebook Pages Scraper](https://apify.com/fetch_cat/facebook-pages-scraper)
- [Facebook Reels Scraper](https://apify.com/fetch_cat/facebook-reels-scraper)

### FAQ

#### Can I export public Facebook events to CSV or JSON without logging in?

Yes. Provide public Facebook event URLs or public organizer event-list URLs, then export Facebook events data from the Apify dataset as CSV, JSON, Excel, Google Sheets, or via API.

#### Can I scrape Facebook organizer event lists through an API?

Yes. Use this Actor as a Facebook events API endpoint through Apify: send organizer URLs, set `maxItems`, and read normalized event records from the dataset.

#### Can it scrape private Facebook events?

No. The Actor is designed for public event pages and public organizer event lists only.

#### Why did my organizer URL return fewer events than expected?

Facebook may expose only a limited public list for anonymous visitors. The Actor saves every public event it can discover and logs the discovered count.

#### Can I scrape past events?

Yes. Set `includePastEvents` to `true` and provide an organizer hosted-events URL.

#### Does it support keyword search?

No. Keyword search is deferred because current public search routes return empty results and would create unreliable empty runs.

#### How do I keep a test run cheap?

Use one direct `eventIds` value or one direct event URL with `maxItems: 1`.

### Support and reproducibility

Open an issue from the Actor page if a run fails, returns fewer events than expected, or produces incorrect fields. Include the run ID or run URL, exact input JSON, expected output, actual output, and one reproducible public Facebook URL.

# Actor input Schema

## `startUrls` (type: `array`):

Direct event URLs, page/profile hosted-event URLs, or group event-list URLs. Keyword search URLs are not supported.

## `eventIds` (type: `array`):

Optional Facebook event IDs to scrape directly.

## `maxItems` (type: `integer`):

Maximum number of fully enriched event records to save.

## `includePastEvents` (type: `boolean`):

When an organizer hosted-events URL is provided, collect the past-events list instead of upcoming events and allow past details in output.

## `proxyConfiguration` (type: `object`):

Facebook list/detail scraping usually requires residential egress. The default uses Apify Residential Proxy with one sticky session per run.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/events/1855253805343101"
    },
    {
      "url": "https://www.facebook.com/SzigetFestival/upcoming_hosted_events"
    }
  ],
  "eventIds": [
    "1855253805343101"
  ],
  "maxItems": 10,
  "includePastEvents": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.facebook.com/events/1855253805343101"
        },
        {
            "url": "https://www.facebook.com/SzigetFestival/upcoming_hosted_events"
        }
    ],
    "eventIds": [
        "1855253805343101"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/facebook-events-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [
        { "url": "https://www.facebook.com/events/1855253805343101" },
        { "url": "https://www.facebook.com/SzigetFestival/upcoming_hosted_events" },
    ],
    "eventIds": ["1855253805343101"],
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/facebook-events-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.facebook.com/events/1855253805343101"
    },
    {
      "url": "https://www.facebook.com/SzigetFestival/upcoming_hosted_events"
    }
  ],
  "eventIds": [
    "1855253805343101"
  ]
}' |
apify call fetch_cat/facebook-events-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fetch_cat/facebook-events-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/iDn3fMy3vpvLOvF5A/builds/V7sIqrjaDF55S5HOb/openapi.json
