# Facebook Page Events Scraper (`maximedupre/facebook-page-events-scraper`) Actor

Collect public Facebook events from Pages or known event links. Get titles, dates, venues, hosts, and ticket links when available, with filters for dates and cancelled events.

- **URL**: https://apify.com/maximedupre/facebook-page-events-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Marketing, Business
- **Stats:** 2 total users, 2 monthly users, 85.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.35 / 1,000 events

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 📅 Build event lists from public Facebook Pages

Facebook Page Events Scraper helps event planners, community teams, and researchers collect public Facebook events. Get titles, dates, venues, hosts, and ticket links when available in structured rows for event lists and research. Submit Pages to find their events, or submit known event links to get their details. No Facebook login is required.

- Find future events with **[Facebook Upcoming Events Scraper](https://apify.com/maximedupre/facebook-page-events-scraper/examples/facebook-upcoming-events-scraper)** for a planning list.
- Review earlier listings with **[Facebook Past Events Scraper](https://apify.com/maximedupre/facebook-page-events-scraper/examples/facebook-past-events-scraper)** for event research.
- Collect published ticket links with **[Facebook Event Ticket Links Scraper](https://apify.com/maximedupre/facebook-page-events-scraper/examples/facebook-event-ticket-links-scraper)** for your event list.
- Review published places with **[Facebook Event Venue Scraper](https://apify.com/maximedupre/facebook-page-events-scraper/examples/facebook-event-venue-scraper)** for venue research.
- Get published series details with **[Facebook Recurring Event Scraper](https://apify.com/maximedupre/facebook-page-events-scraper/examples/facebook-recurring-event-scraper)** for repeating events.

#### 📋 Public event details in one row

Each saved row is one public event with an ID, title, and Facebook link. Published descriptions, schedules, venue details, hosts, tickets, media links, categories, and series details appear when available. Missing optional details are left out rather than guessed.

For Page discovery, the row can also show the Page and submitted value that first led to the event. Media fields are source links, not downloaded files.

#### ▶️ Choose Pages or known events

1. Choose **Pages** to find events listed by public Pages, or **Events** to look up known events.
2. Add Page URLs, handles, or numeric IDs for Pages. For Events, add event URLs or numeric IDs.
3. Add public list files, date filters, or a result limit if needed.
4. Start the run, then open the dataset to read or export the events.

Only the list for your chosen method is used. List files and filters apply to both methods. The Actor saves the first eligible occurrence of each event as it finds it and ignores later matches for the same event. Later matches do not change the saved row.

#### ⚙️ Input

Choose one method per run. Add at least one reference in its list or through a public list file.

| Field | Type | What it does |
| --- | --- | --- |
| `findEventsBy` | string | Required. Choose `pages` for Page discovery or `events` for known event details. |
| `pages` | array of strings | Facebook Page URLs, handles, or numeric Page IDs. Used only for `pages`. |
| `events` | array of strings | Facebook event URLs or numeric event IDs. Used only for `events`. |
| `listUrls` | array of strings | Public text or CSV file URLs with references for the chosen method. Use one reference per line in text files or one column in CSV files. Entries are added to the chosen list. |
| `startDate` | string | Keep events that start on or after this UTC date, in `YYYY-MM-DD` form. Leave blank for no lower date limit. |
| `endDate` | string | Keep events that start on or before this UTC date, in `YYYY-MM-DD` form. Leave blank for no upper date limit. |
| `upcomingOnly` | boolean | Keep events whose start time is in the future when the run begins. Applies to both methods. Defaults to `false`. |
| `excludeCancelled` | boolean | Skip events Facebook marks as cancelled. Defaults to `false`. |
| `maxItems` | integer | Stop after this many saved events across all inputs. Must be at least `1`, with no fixed upper bound. Leave empty to return all available results that match your filters until the source is exhausted. |

**Example input**

This is the public input from the successful current-beta default-input run.

```json
{
  "findEventsBy": "pages",
  "pages": [
    "https://www.facebook.com/BoisdaleRestaurants/upcoming_hosted_events"
  ],
  "upcomingOnly": false,
  "excludeCancelled": false,
  "maxItems": 10
}
```

#### 🧾 Output

The run output has an `events` link that opens the saved events in the dataset. Page discovery and direct event lookup use the same event row shape. Page context is present only for Page discovery.

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `events` | string | Opens the saved public events in the dataset. |

**Event row fields**

Every row has `id`, `title`, and `url`. Other fields appear when available from Facebook. Published lists may be empty.

| Field | Type | What it does |
| --- | --- | --- |
| `id` | string | Facebook event ID for matching events across runs. |
| `title` | string | Published event title. |
| `url` | string | Facebook event link. |
| `description` | string | Published event description. |
| `startTime` | string | Published start time with a UTC offset. |
| `endTime` | string | Published end time with a UTC offset. |
| `timezone` | string | Published event timezone. |
| `eventKind` | string | Published event kind or visibility class. |
| `isCancelled` | boolean | Whether Facebook marks the event as cancelled. |
| `isOnline` | boolean | Whether Facebook marks the event as online. |
| `venue` | object | Published venue details. |
| `venue.id` | string | Facebook venue ID. |
| `venue.name` | string | Venue name. |
| `venue.address` | string | Venue address. |
| `venue.city` | string | Venue city or town. |
| `venue.region` | string | Venue state, province, or region. |
| `venue.country` | string | Venue country. |
| `venue.latitude` | number | Published venue latitude. |
| `venue.longitude` | number | Published venue longitude. |
| `venue.classification` | string | Published venue type or class. |
| `hosts` | array of objects | Published hosts and organizers. |
| `hosts[].id` | string | Facebook host ID. |
| `hosts[].name` | string | Host name. |
| `hosts[].url` | string | Facebook host link. |
| `hosts[].classification` | string | Published host type or class. |
| `hosts[].imageUrl` | string | Source link to the host image. |
| `ticketUrls` | array of strings | Published ticket links. |
| `coverImageUrl` | string | Source link to the event cover image. |
| `videoUrls` | array of strings | Source links to published event videos. |
| `categories` | array of strings | Published event categories. |
| `recurrence` | string | Published schedule for a repeating event. |
| `relatedEventIds` | array of strings | Published IDs of related events in the series. |
| `page` | object | Published Page identity for the first Page that led to the event. |
| `page.id` | string | Facebook Page ID. |
| `page.name` | string | Page name. |
| `page.url` | string | Facebook Page link. |
| `discoveredFrom` | string | Submitted Page URL, handle, or ID that first led to this saved event. |

**Example event row**

This complete row comes from the successful current-beta default-input run. The event description is the source's own text.

```json
{
  "id": "1147240440256790",
  "title": "Saturday Soul Lunch | Soul Giants",
  "url": "https://www.facebook.com/events/1147240426923458/?event_time_id=1147240440256790",
  "description": "Experience the ultimate blend of soulful sounds and exceptional dining with our Saturday Soul Lunch. FiL Straughan brings the spirit of Marvin Gaye, Lionel Richie, George Benson, Earth, Wind & Fire and Luther Vandross to life channelling their timeless sound with effortless elegance and emotional depth.\n\nRecognised as one of the UK’s leading soul vocalists, FiL’s velvety tone and charismatic presence make every performance feel personal and alive. From the romantic warmth of “Let’s Get It On” and “Endless Love” to the feel-good uplift of “All Night Long”, “Give Me the Night” and “September”, his setlist is a celebration of the golden age of soul.\n\nPaired with a beautifully curated three-course lunch featuring the finest seasonal ingredients, this afternoon of live music is the perfect way to elevate your weekend.\n\nBOISDALE OF CANARY WHARF\n\nBest Spirits List in the World 2022 at The World Of Fine Wine\n\nTop Ten restaurant wine lists in London 2022 at The World Of Fine Wine\n\nPerched elegantly above Cabot Square, Boisdale of Canary Wharf offers a multi-dimensional experience across two floors. With Jools Holland as Patron of Music, it is celebrated for its dedication to live performances, with daily live music creating the perfect ambience in the second-floor restaurant.\n\nThe venue features a refined restaurant, four exclusive private dining rooms, the distinguished Hine Bar, an extensive whisky and wine selection, a sophisticated Cigar Lounge and an inviting Heated Garden Terrace - making it a haven for discerning patrons seeking the finest in dining, music and atmosphere. On weekends, the vibrant first-floor bar and terrace come to life with DJ Nights, adding another dimension to the Boisdale experience.\n\n\"London's number one jazz venue\" Tatler\n\"Best Whisky Bar in the World\" Whisky Magazine\n\"A carnivore's dream\" Evening Standard\n\"Aged steaks are deemed incredible\" Square Meal\n\"The world's most individualistic style bar & restaurant\" Hot Tickets",
  "startTime": "2026-10-24T12:00:00.000Z",
  "endTime": "2026-10-24T14:00:00.000Z",
  "timezone": "UTC+01",
  "eventKind": "PUBLIC_TYPE",
  "isCancelled": false,
  "isOnline": false,
  "venue": {
    "id": "1274085878088140",
    "classification": "FreeformPlace",
    "name": "Boisdale Restaurants (Canary Wharf)",
    "address": "City of London Dry Cleaning, Cabot Square, London, E14 4QT, United Kingdom",
    "country": "United Kingdom",
    "latitude": 51.505208275131,
    "longitude": -0.022026676777676
  },
  "hosts": [
    {
      "id": "100064602192940",
      "name": "Boisdale Restaurants",
      "url": "https://www.facebook.com/BoisdaleRestaurants",
      "classification": "User",
      "imageUrl": "https://scontent-sjc6-1.xx.fbcdn.net/v/t39.30808-1/316407310_5880787605276076_7896729762068783471_n.jpg?stp=cp0_dst-jpg_tt6&cstp=mx800x800&ctp=s40x40&_nc_cat=111&ccb=1-7&_nc_sid=2d3e12&_nc_ohc=9_gXx_wllSIQ7kNvwGh6XVr&_nc_oc=AdrlAnB9hx3gwwAhLDfr1AJQjZRhtnz9FtxKwxgPLq7WTB6U-Ec2kqbT1W3imG9JKQ4&_nc_zt=24&_nc_ht=scontent-sjc6-1.xx&_nc_gid=bB161U_U5oPBK4IlLoI6hg&_nc_ss=70289&oh=00_AQP1lvTOZB8devS--IA720ckx1MjteK45WhKh41-M5GXgQ&oe=6AC7B60B"
    }
  ],
  "ticketUrls": [
    "https://boisdaletickets.co.uk/calendar?search=FiL+Straughan"
  ],
  "coverImageUrl": "https://scontent-sjc6-1.xx.fbcdn.net/v/t39.30808-6/568883902_1274086038088124_5400046872180153_n.jpg?stp=dst-jpg_tt6&cstp=mx2048x1152&ctp=s960x960&_nc_cat=108&ccb=1-7&_nc_sid=75d36f&_nc_ohc=XfrZKBPGD5YQ7kNvwEscVZ_&_nc_oc=AdrRveddyo0ukdWm3MtgDMG_mV0a76avoK4KqZlCvMYVQt7OJnhbKQFdIZV3n8ia0Hw&_nc_zt=23&_nc_ht=scontent-sjc6-1.xx&_nc_gid=nyxXGAqV3fZaQeYNhgJulw&_nc_ss=70289&oh=00_AQPpIBPlvsjfXY36VYNXinadao2xjJT_NveD3rUYYXwpEw&oe=6AC7C399",
  "categories": [
    "Music"
  ],
  "relatedEventIds": [
    "1147240430256791",
    "1147240433590124"
  ],
  "recurrence": "CUSTOM",
  "page": {
    "id": "100064602192940",
    "name": "Boisdale Restaurants",
    "url": "https://www.facebook.com/BoisdaleRestaurants"
  },
  "discoveredFrom": "https://www.facebook.com/BoisdaleRestaurants/upcoming_hosted_events"
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. One public event read successfully and saved to the dataset is one charged event. The current pricing setup has no separate run-start charge. See the Store pricing panel for the current rate.

#### 🔌 Integrations

Export the dataset in Apify Console or read its rows through the Apify API. Use Apify schedules for repeat runs and webhooks for actions after a run ends.

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I get a full archive of a Page's past events?

The Actor can collect publicly listed past and upcoming events. It returns what Facebook makes available, so it cannot promise a complete Page archive.

##### Do date filters use my local timezone?

Start and end dates use UTC and filter the event's start time. `upcomingOnly` checks whether that time is in the future when the run begins. These filters also apply to direct event lookup.

##### What happens if several Pages list the same event?

The first eligible occurrence is saved. Later matches are ignored. The saved row keeps only the first discovery context.

##### Why are some details missing?

Optional fields appear only when Facebook exposes them. An event can still be saved with its ID, title, and link when other details are unavailable.

##### What happens when I leave Maximum events empty?

The Actor returns all available results that match your filters until the source is exhausted. There is no fixed upper bound for this input.

##### Can I search by keyword or city?

No. Submit known Pages or events. The Actor does not search events by keyword, city, or area.

##### Do I need a Facebook login or a separate Graph API setup?

You do not need a Facebook login or a separate Graph API setup to use this Actor. Run it from Apify with Page or event references. Private events and login-restricted content are outside its scope.

##### Can I download cover images or videos?

The Actor returns published media links when available. It does not download or mirror those files.

### 📝 Changelog

**v0.0** (04-10-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~facebook-page-events-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Facebook Business Page Lead Scraper](https://apify.com/maximedupre/facebook-page-lead-scraper) collects public Page contact and business details for host research.
- [Facebook Profile and Page Search Results Scraper](https://apify.com/maximedupre/facebook-search-results) finds public Pages by keyword to help build a Page list.
- [Meetup Events Scraper](https://apify.com/maximedupre/meetup) collects public events and groups for nearby community research.
- [Bandsintown Scraper](https://apify.com/maximedupre/bandsintown) collects concert dates, venues, and ticket links for music event research.
- [10times Events Scraper](https://apify.com/maximedupre/10times-events-scraper) collects trade shows and conferences for business event research.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `findEventsBy` (type: `string`):

Find events listed by Pages, or look up specific events.

## `pages` (type: `array`):

Enter Facebook Page URLs, handles, or numeric Page IDs, one per line. Add at least one Page here or in a list file when you choose Pages.

## `events` (type: `array`):

Enter Facebook event URLs or numeric event IDs, one per line. Add at least one event here or in a list file when you choose Events.

## `listUrls` (type: `array`):

Enter public text or CSV file URLs. Use Page URLs, handles, or numeric Page IDs for Pages; use event URLs or numeric event IDs for Events. Use one reference per line in text files or a single column in CSV files. These entries are added to the list above.

## `startDate` (type: `string`):

Keep events that start on or after this date, in UTC. Leave blank for no lower date limit.

## `endDate` (type: `string`):

Keep events that start on or before this date, in UTC. Leave blank for no upper date limit.

## `upcomingOnly` (type: `boolean`):

Keep only events whose start time is in the future when the run begins. This also applies when you enter specific events.

## `excludeCancelled` (type: `boolean`):

Skip events that Facebook marks as cancelled.

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

Stop after saving this many events across all inputs. Leave blank to return all available events that match your filters until the source is exhausted.

## Actor input object example

```json
{
  "findEventsBy": "pages",
  "pages": [
    "https://www.facebook.com/BoisdaleRestaurants/upcoming_hosted_events"
  ],
  "upcomingOnly": false,
  "excludeCancelled": false,
  "maxItems": 10
}
```

# Actor output Schema

## `events` (type: `string`):

Open the event rows in the dataset.

# 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 = {
    "findEventsBy": "pages",
    "pages": [
        "https://www.facebook.com/BoisdaleRestaurants/upcoming_hosted_events"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/facebook-page-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 = {
    "findEventsBy": "pages",
    "pages": ["https://www.facebook.com/BoisdaleRestaurants/upcoming_hosted_events"],
    "maxItems": 10,
}

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

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

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

```

## CLI example

```bash
echo '{
  "findEventsBy": "pages",
  "pages": [
    "https://www.facebook.com/BoisdaleRestaurants/upcoming_hosted_events"
  ],
  "maxItems": 10
}' |
apify call maximedupre/facebook-page-events-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/facebook-page-events-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cUJ07y2tNexS6kJTo/builds/kQ4Y8fYYVgxddJXOO/openapi.json
