# Resident Advisor Events Scraper - Lineups (`maximedupre/resident-advisor-events`) Actor

Collect public Resident Advisor events by city, area ID, or listing URL. Get dates, venues, lineups, and ticket details when published. Use date and keyword filters to build event lists for music research or local calendars.

- **URL**: https://apify.com/maximedupre/resident-advisor-events.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Automation, Business, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.01 / 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 Resident Advisor

Resident Advisor Events Scraper helps music researchers, promoters, and local calendar teams collect public events from ra.co. Get event IDs, titles, dates, start times, and venue names in structured rows. Published lineups, ticket offers, and other details help you compare listings without copying each page by hand.

- Find a weekend event list with **[Events in NYC This Weekend](https://apify.com/maximedupre/resident-advisor-events/examples/events-in-nyc-this-weekend)**.
- Find local club nights with **[Techno Events New York](https://apify.com/maximedupre/resident-advisor-events/examples/techno-events-new-york)**.
- Review venues and schedules with **[New York Nightlife Events](https://apify.com/maximedupre/resident-advisor-events/examples/new-york-nightlife-events)**.
- Build a music calendar from **[Resident Advisor Events](https://apify.com/maximedupre/resident-advisor-events/examples/resident-advisor-events)**.
- Export public listings for data work with **[Resident Advisor Scraper](https://apify.com/maximedupre/resident-advisor-events/examples/resident-advisor-scraper)**.

#### 📦 Event dates, venues, and lineups in each row

Each row is one public event. Its ID, title, listing date, start time, and venue name are required. Other fields appear when Resident Advisor publishes them. These can include artist and promoter names and IDs, venue addresses, genres, ticket prices, flyer links, and attendance counts.

Flyers are direct links to source-hosted images. The Actor does not download or change the images. Ticket offers describe published prices and sale dates; they do not guarantee that tickets are in stock.

The first eligible occurrence of an event is saved as soon as it is found. Later matches from another submitted location are ignored and do not add data to the saved row.

#### ▶️ Collect events for your chosen locations

1. Choose **Find events by**: City names, Area IDs, or Listing URLs.
2. Fill in that section. For a city name that could mean more than one place, add its country.
3. Add date or keyword filters if needed. Choose which listing dates to collect first and set event limits for a smaller run.
4. Start the run, then open **Events** to view or export the saved data.

All locations share the same filters, order, and limits. Values in the other location sections are ignored. If one location cannot be found or read, collected events are kept and other submitted locations can still be processed.

#### ⚙️ Input

**Input fields**

`findBy` is required. Fill in the location list for that choice. Dates use `YYYY-MM-DD` and refer to each event's local listing date.

| Field | Type | What it does |
| --- | --- | --- |
| `findBy` | string | Selects `cityNames`, `areaIds`, or `listingUrls`. |
| `cityNames` | string array | One or more cities, with country hints when needed. Required for `cityNames`. |
| `areaIds` | string array | Resident Advisor area IDs as digit strings. Required for `areaIds`. |
| `listingUrls` | object array | Resident Advisor city event-listing URLs. Required for `listingUrls`. |
| `listingUrls[].url` | string | A city listing URL, such as `https://ra.co/events/uk/london`. |
| `startDate` | string | Includes events on or after this local listing date. Leave empty for no start-date filter. |
| `endDate` | string | Includes events on or before this local listing date. Leave empty for no end-date filter. |
| `keywords` | string array | Keeps events that match at least one keyword in an artist name, venue name, or event title. Leave empty for no keyword filter. |
| `dateOrder` | string | Uses `earliestFirst` or `latestFirst` within each location. Default: `earliestFirst`. This affects which events are reached before a limit. |
| `maxItems` | integer | Overall event limit, at least 1. Leave empty to return all available matching events until the source is exhausted, subject to any per-location limit. The form prefills 20. |
| `maxItemsPerLocation` | integer | Event limit for each location, at least 1. Leave empty to return all available matching events from each location until the source is exhausted. The overall limit still applies when set. |

**Example input**

This is the public input from a successful hosted default-input run:

```json
{
  "findBy": "cityNames",
  "cityNames": [
    "London, United Kingdom"
  ],
  "dateOrder": "earliestFirst",
  "maxItems": 20
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `events` | string | Links to the event rows in the default dataset. |

**Event row**

All three location choices return the same event shape. `id`, `title`, `listingDate`, `startTime`, and `venue.name` are required. Other details may be missing. Dotted paths describe nested fields; `[]` means an array entry.

| Field | Type | What it does |
| --- | --- | --- |
| `id` | string | Resident Advisor event ID for matching events. |
| `title` | string | Published event title. |
| `listingDate` | string | Published local listing date. |
| `startTime` | string | Published start date and time, with the source offset when provided. |
| `endTime` | string | Published end date and time, with the source offset when provided. |
| `timezone` | string | Published event timezone. |
| `description` | string | Published event description. |
| `venue` | object | Venue details from the listing. |
| `venue.name` | string | Published venue name. |
| `venue.id` | string | Resident Advisor venue ID. |
| `venue.address` | string | Published street address. |
| `venue.latitude` | number | Published latitude. |
| `venue.longitude` | number | Published longitude. |
| `venue.isLive` | boolean | Resident Advisor's live status for the venue. |
| `city` | string | Event city named by Resident Advisor. |
| `country` | string | Event country named by Resident Advisor. |
| `areaId` | string | Resident Advisor area ID. |
| `artists` | object array | Published lineup. An empty array means no artist names were available. |
| `artists[].name` | string | Artist name. |
| `artists[].id` | string | Resident Advisor artist ID. |
| `promoters` | object array | Published promoters. An empty array means no promoter names were available. |
| `promoters[].name` | string | Promoter name. |
| `promoters[].id` | string | Resident Advisor promoter ID. |
| `genres` | string array | Published genre names. |
| `flyerUrls` | string array | Source-hosted flyer image links that open without signing in. |
| `isTicketed` | boolean | Resident Advisor's ticketed status for the event. |
| `ticketOffers` | object array | Published offers, without a guarantee of ticket stock. |
| `ticketOffers[].description` | string | Offer description. |
| `ticketOffers[].price` | number | Published offer price. |
| `ticketOffers[].currency` | string | Currency for the offer price. |
| `ticketOffers[].saleStart` | string | Published start of ticket sales. |
| `ticketOffers[].saleEnd` | string | Published end of ticket sales. |
| `ticketUrls` | string array | Published external ticket purchase links. |
| `admissionPrice` | string | Published admission pricing text. |
| `minimumAge` | string | Published minimum-age rule as text. |
| `isFestival` | boolean | Resident Advisor's festival status for the event. |
| `isSecretVenue` | boolean | Resident Advisor's secret-venue status for the event. |
| `isLive` | boolean | Resident Advisor's live status for the event. |
| `attendanceCount` | integer | Published attendance count. |
| `interestCount` | integer | Separate published interest count. |
| `editorialPickText` | string | Published Resident Advisor editorial pick text. |

This complete event row is from a successful hosted run of the current beta build:

```json
{
  "id": "2529433",
  "title": "Club Rua",
  "startTime": "2026-10-09T23:00:00.000",
  "endTime": "2026-10-10T03:30:00.000",
  "timezone": "Europe/London",
  "description": "Club Rua is an intimate queer club event that prioritises FLINTA DJs playing undergound electronic music.\n\nClub Rua has been described by COLD Magazine as a queer 'midnight mass' and a 'glorious paradox' and by fourfour Magazine as 'a ritual led club night that fuses club aesthetics with distinctly queer, Irish visual language'.\n\nAt our next event we will have a little something different - some of London's hottest emerging designers and communities will be around to sell you their sexy creations and educate about their business/community.",
  "venue": {
    "name": "EartH Kitchen",
    "id": "212481",
    "address": "11-17 Stoke Newington Rd, Dalston, London, N16 8BH",
    "latitude": 52,
    "longitude": 0,
    "isLive": true
  },
  "city": "London",
  "country": "United Kingdom",
  "areaId": "13",
  "artists": [
    {
      "name": "Nina Pixina",
      "id": "149184"
    },
    {
      "name": "HOLY C",
      "id": "134379"
    },
    {
      "name": "Toraigh",
      "id": "143837"
    },
    {
      "name": "Eseccaro",
      "id": "150707"
    }
  ],
  "promoters": [
    {
      "name": "Club Rua",
      "id": "142969"
    }
  ],
  "genres": [
    "Trance",
    "Techno"
  ],
  "flyerUrls": [
    "https://images.ra.co/897228c974ad09d9e9deb7c62b957f296929ce02.jpg"
  ],
  "isTicketed": true,
  "ticketOffers": [
    {
      "description": "General admission",
      "price": 10.82,
      "currency": "GBP",
      "saleStart": "2026-09-05T08:00:00.000Z",
      "saleEnd": "2026-10-09T20:00:00.000Z"
    }
  ],
  "ticketUrls": [],
  "admissionPrice": "10.82",
  "minimumAge": "18",
  "isFestival": false,
  "isSecretVenue": false,
  "isLive": true,
  "attendanceCount": 31,
  "interestCount": 31,
  "listingDate": "2026-10-09"
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The **Event** charge applies to one saved event with its ID, title, listing date, start time, and venue name. It does not charge this event fee for setup, empty searches, or events that are not saved. Check the Actor's Pricing tab for the current event price.

#### 🔌 Integrations

Read the saved events through the Apify dataset API or export them as JSON or CSV for a spreadsheet, database, or local event calendar.

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

#### ❓ FAQ

##### How do I limit New York events to a weekend?

Choose City names and enter `New York, United States`. Set `startDate` and `endDate` to the weekend's dates. Both dates are included, using the local listing date. Keywords can narrow the list by artist, venue, or event title.

##### Can I collect events in Philadelphia as well?

Yes. Add `Philadelphia, United States` to the city list. Both cities share the same date filters, keywords, and order. Use `maxItemsPerLocation` if you want a limit for each location.

##### Does a techno or house keyword filter the genre field?

No. Keywords match artist names, venue names, or event titles. They do not filter the published genre field. You can use returned `genres` for further filtering after the run.

##### What if a city name is unclear or cannot be found?

Add the country after the city name, or use a known Resident Advisor area ID or city event-listing URL. If one location cannot be found or read, the Actor keeps collected data and continues with other locations.

##### Are ticket offers proof that I can still buy a ticket?

No. They are the offers published by the source. They do not guarantee stock, and this Actor does not buy tickets.

##### What happens when I leave both event limits empty?

The Actor returns all available matching events until the source is exhausted. A set overall or per-location limit still applies. Neither limit has a fixed upper bound in the public input schema.

##### Does this collect artist or venue profiles?

No. Artist and venue details come from event listings. This Actor does not collect standalone artist, venue, or promoter profiles.

##### Do I need a Resident Advisor login or API approval?

No. The Actor collects public listings without requiring a Resident Advisor login or API approval.

### 📝 Changelog

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

- Initial release.

### 🆘 Support

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

### 🔗 Related Actors

- [Posh Events Scraper](https://apify.com/maximedupre/posh-events) collects nightlife events with schedules, venues, ticket prices, and public organizer details.
- [Fever Events Scraper](https://apify.com/maximedupre/fever-events) adds city experiences and concerts with published dates and prices.
- [Partiful Events Scraper](https://apify.com/maximedupre/partiful) collects public social events and host details for local event research.
- [Resident Advisor Events Scraper](https://apify.com/whatsup/ra-events-scraper) offers another way to collect RA area events with lineups and ticket details.
- [Resident Advisor Events Scraper](https://apify.com/parseforge/residentadvisor-events-scraper) collects RA events by area ID or keyword for an alternate event export.

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

# Actor input Schema

## `findBy` (type: `string`):

Choose how to select the locations whose events you want to collect.

## `cityNames` (type: `array`):

Enter one or more cities. Add a country after the city name when needed, such as London, United Kingdom. Required when you choose City names.

## `areaIds` (type: `array`):

Enter one or more Resident Advisor area IDs as digit strings. Required when you choose Area IDs.

## `listingUrls` (type: `array`):

Add one or more Resident Advisor city event-listing URLs, such as https://ra.co/events/uk/london. Required when you choose Listing URLs.

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

Include events on or after this date, based on the event's local listing date. Leave blank for no start-date filter.

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

Include events on or before this date, based on the event's local listing date. Leave blank for no end-date filter.

## `keywords` (type: `array`):

Keep events that match at least one keyword in an artist name, venue name, or event title. Leave blank to collect events without a keyword filter.

## `dateOrder` (type: `string`):

Choose which listing dates to collect first in each location. This sets which events are reached first when you use a limit.

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

Stop after this many events across all selected locations. Leave empty to return all available matching events until the source is exhausted, subject to any per-location limit.

## `maxItemsPerLocation` (type: `integer`):

Collect up to this many events from each location. Leave empty to return all available matching events from each location until the source is exhausted. The overall limit still applies when set.

## Actor input object example

```json
{
  "findBy": "cityNames",
  "cityNames": [
    "London, United Kingdom"
  ],
  "dateOrder": "earliestFirst",
  "maxItems": 20
}
```

# Actor output Schema

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

Open the event rows in the default 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 = {
    "findBy": "cityNames",
    "cityNames": [
        "London, United Kingdom"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/resident-advisor-events").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 = {
    "findBy": "cityNames",
    "cityNames": ["London, United Kingdom"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/resident-advisor-events").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 '{
  "findBy": "cityNames",
  "cityNames": [
    "London, United Kingdom"
  ],
  "maxItems": 20
}' |
apify call maximedupre/resident-advisor-events --silent --output-dataset

```

## MCP server setup

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

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/CP1ROVbQfLa9kC828/builds/CEnNHJo8A4CIzan4v/openapi.json
