# Resident Advisor Scraper — Electronic Music Events (`aitorsm/ra-events`) Actor

Get electronic-music events from Resident Advisor (RA.co): title, date, venue, lineup, and ticket status. Every event includes enriched promoter leads — name, website, Instagram/Facebook/Twitter handles, and follower count. Built for music-industry BD, booking, and sponsorship targeting.

- **URL**: https://apify.com/aitorsm/ra-events.md
- **Developed by:** [Aitor Sanchez-Mansilla](https://apify.com/aitorsm) (community)
- **Categories:** Automation, Lead generation, E-commerce
- **Stats:** 7 total users, 2 monthly users, 97.4% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 results

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

## Resident Advisor Events Scraper — Electronic Music Lead-Gen with Enriched Promoter Data

[![Resident Advisor Events Scraper status](https://apify.com/actor-badge?actor=aitorsm/ra-events)](https://apify.com/aitorsm/ra-events)

Get structured data on **electronic music events** worldwide — every club night, festival, warehouse party, and the promoters behind them — from [Resident Advisor (RA.co)](https://ra.co), the global directory for electronic music events, clubs, festivals, and promoters. The **Resident Advisor Events Scraper** turns that listing into clean event + promoter records. Each event returns:

- Event title, date, start/end time, RA event URL, flyer image
- **Enriched promoter (organizer) data** — name, RA profile URL, website, **social links (Instagram, Facebook, Twitter, SoundCloud)**, follower count, upcoming events count, area, country, blurb, festival flag. The one feature competing RA scrapers don't expose.
- Full venue record — name, RA venue URL, live-status flag
- Artist lineup (every act on the bill, with their RA artist IDs and names)
- Ticket availability + interested count (RSVP-equivalent for the electronic music crowd)
- Editorial "pick" blurb when RA features the event

### Why this scraper

Resident Advisor is where indie electronic-music promoters publish their entire programming calendar. With `enrichPromoters` on (default), every event comes back as a self-contained lead row — the promoter's name, website, social links, audience size, and activity level — so there's no follow-up enrichment step to run.

### Use Cases

#### 1. **Electronic Music Events Data + Promoter Lead Generation**

Build a structured dataset of electronic music events for any city and pull every active promoter behind them, ranked by `followerCount` + `upcomingEventsCount`. Direct input for ticketing-platform BD (Posh, vivenu, Ticket Fairy, Showpass), event-marketing CRMs (Audience Republic, Bizzabo), and music-industry sponsorship outreach.

#### 2. **Festival + Club Booking Intelligence**

Each event carries the full venue record. Run the scraper for London / Berlin / Barcelona / Tokyo to map the active club ecosystem — useful for booking agents, music-tech vendors, and AV / production companies.

#### 3. **Artist / DJ Tracking**

Each event's `artists[]` array gives every act on the lineup. Useful for talent agencies (which DJs are headlining where), labels (gauging act-deployment frequency), and music-data SaaS.

#### 4. **Cross-Platform Organizer Database**

Combine RA output with Eventbrite, Posh, Luma, and DICE datasets for unified multi-source organizer intelligence. RA covers the global electronic-music niche that those platforms don't index deeply.

#### 5. **Sponsorship + Brand Activation Targeting**

Filter for `interestedCount > X` + `isFestival: true` → list of high-traffic festival promoters who'd consider sponsorship deals.

#### 6. **Editorial / Press Picks Aggregation**

The `editorialPickBlurb` field surfaces events RA's editorial team has highlighted — useful for press-coverage tracking, taste-making research, and curation-as-a-service products.

#### 7. **Audience-Size Validation for Underwriting**

Promoter `followerCount` + `upcomingEventsCount` are signals an underwriter can use to assess whether a festival/promoter is a legitimate operator (vs. someone running their first event). Direct input for credit-underwriting products like Ticket Fairy Capital.

> **On the roadmap**: per-event genre filtering, a venue-specific input mode, and event-ID lookup. [Drop me a line](mailto:business@aitorsm.com) if any of these would unblock a use case — it helps me prioritize.

### Cost

This Actor uses **pay-per-event** pricing:

- **$0.03 per event scraped**
- **$0.02 per unique promoter enriched** — only charged when `enrichPromoters` is on (the default), and only once per promoter per run (deduplicated across all events). Turn `enrichPromoters` off to pay for events alone.

Apify's platform costs are included, so the total is predictable. A typical city sweep of 250 events with enrichment on costs roughly $7.50 (events) + ~$4 (promoters) ≈ **$11.70 for ~200 enriched promoter leads** with names, websites, social links, and follower counts.

### Input

- **`city`** — name of any major RA-covered city (e.g. `"Los Angeles"`, `"London"`, `"Berlin"`, `"Barcelona"`, `"Tokyo"`, `"Berlin"`, `"Mexico City"`). The actor resolves the name against RA's areaId table — ~40 major cities are hardcoded for instant lookup, others fall back to a runtime catalog query.
- **`areaId`** *(advanced)* — RA's internal numeric area ID. Pass this directly if you have it (skips the city-resolution lookup). E.g. `23` for LA, `13` for London, `34` for Berlin.
- **`listingDateGte`** — earliest event date to include (YYYY-MM-DD). Defaults to today.
- **`listingDateLte`** — latest event date to include (YYYY-MM-DD). Leave empty for no upper bound.
- **`maxItems`** — global cap on events returned (deduped across all paginated pages). 0 = uncapped.
- **`enrichPromoters`** *(boolean, default `true`)* — when true, each event's promoters\[] array is enriched with full detail (name, website, social links — Instagram, Facebook, Twitter, SoundCloud — follower count, upcoming events count, blurb, area, country, isFestival). Enriched once per unique promoter and cached for the run. **Recommended for lead-generation use cases** — without it you only get promoter IDs.

#### Sample inputs

**Quick city preview**:

```json
{ "city": "Los Angeles", "maxItems": 20 }
```

**Wide lead-gen sweep** (2 months of LA events, enriched promoters):

```json
{
  "city": "Los Angeles",
  "listingDateGte": "2026-06-01",
  "listingDateLte": "2026-07-31",
  "maxItems": 500,
  "enrichPromoters": true
}
```

**Direct area access** (London by ID, skips lookup):

```json
{ "areaId": 13, "maxItems": 100 }
```

### Output

The data is returned in **JSON format**, ideal for direct ingestion into analytics platforms, CRMs, dashboards, or downstream pipelines.

#### Example entry

Input: `{ "city": "Los Angeles", "maxItems": 1, "enrichPromoters": true }`

```json
{
  "eventId": "2384905",
  "listingDate": "2026-05-23",
  "areaId": 23,
  "name": "Into The Woods presents Ben UFO (Extended Set)",
  "date": "2026-05-23T00:00:00.000",
  "startTime": "2026-05-23T22:00:00.000",
  "endTime": "2026-05-24T04:00:00.000",
  "url": "https://ra.co/events/2384905",
  "contentUrl": "/events/2384905",
  "flyerFront": "https://static.ra.co/images/events/flyer/...",
  "isTicketed": true,
  "interestedCount": 423,
  "venueId": "139125",
  "venueName": "Sound Nightclub",
  "venueUrl": "https://ra.co/clubs/139125",
  "venueLive": true,
  "promoterIds": ["65088"],
  "promoterNames": ["Into The Woods LA"],
  "promoters": [
    {
      "id": "65088",
      "name": "Into The Woods LA",
      "url": "https://ra.co/promoters/65088",
      "blurb": "Into The Woods is a music series, label, and collective that bridges the sonic gap between Los Angeles, Detroit and beyond to amplify diverse voices in electronic dance music.",
      "logoUrl": "https://static.ra.co/images/promoter/us-intothewoods.jpg",
      "coverUrl": null,
      "website": "https://www.facebook.com/intothewoodsrecordings/",
      "followerCount": 1076,
      "upcomingEventsCount": 0,
      "isFestival": false,
      "areaName": "Los Angeles",
      "countryName": "United States of America",
      "socialMediaLinks": [
        { "platform": "instagram", "link": "https://instagram.com/intothewoodsla" },
        { "platform": "facebook", "link": "https://facebook.com/intothewoodsrecordings" },
        { "platform": "twitter", "link": "https://twitter.com/intothewoodsla" }
      ],
      "instagram": "https://instagram.com/intothewoodsla",
      "facebook": "https://facebook.com/intothewoodsrecordings",
      "twitter": "https://twitter.com/intothewoodsla",
      "soundcloud": null
    }
  ],
  "artists": [
    { "id": "5294", "name": "Ben UFO" }
  ],
  "ticketsAvailable": 2,
  "editorialPickBlurb": null,
  "imageUrl": "us/2026/5/us-0523-into-the-woods-flyer.jpg",
  "scrapedAt": "2026-05-23T02:18:40.184Z"
}
```

#### Fields

| Field | Purpose |
|---|---|
| `eventId`, `contentUrl`, `url` | RA event identifiers + canonical URL |
| `title`, `date`, `startTime`, `endTime` | Event basics |
| `flyerFront`, `imageUrl` | Event flyer URLs |
| `isTicketed`, `interestedCount`, `ticketsAvailable` | Availability + popularity signals |
| `venueId`, `venueName`, `venueUrl`, `venueLive` | Venue record |
| **`promoters[]`** | When `enrichPromoters=true`: full promoter records with name, website, social links (`socialMediaLinks[]` + flat `instagram`/`facebook`/`twitter`/`soundcloud`), follower count, upcoming events count, blurb, area, country, isFestival. When false: just IDs. |
| `promoterIds[]`, `promoterNames[]` | Convenience flat arrays for filtering / joining |
| `artists[]` | Lineup acts `[{id, name}]` |
| `editorialPickBlurb` | RA editorial-pick blurb when featured |
| `listingDate`, `scrapedAt` | Audit metadata |

#### Simplified Overview

A simplified view of this data is shown directly in the **Apify console**:

```json
{
  "name": "Into The Woods presents Ben UFO (Extended Set)",
  "flyerFront": "https://static.ra.co/images/events/flyer/...",
  "date": "2026-05-23T00:00:00.000",
  "venueName": "Sound Nightclub",
  "promoterNames": ["Into The Woods LA"],
  "artists": [{"id":"5294","name":"Ben UFO"}],
  "interestedCount": 423,
  "isTicketed": true,
  "url": "https://ra.co/events/2384905"
}
```

***

### How to Use

1. **Pick a city** — type any major RA-covered city (LA, London, Berlin, Barcelona, Tokyo, ~40+ in fast lookup).
2. **Set a date range** — defaults to "today onwards"; tighten for narrower scrape windows.
3. **Keep `enrichPromoters: true`** — that's the lead-gen feature.
4. **Set `maxItems`** — 100 for a quick test, thousands for a city's full forward calendar.
5. **Run the Actor** — check the Overview tab to see events as they arrive.
6. **Export the dataset** — JSON, CSV, Excel, or HTML.

***

Start scraping Resident Advisor events today by running this Actor on Apify.

### FAQ

**What data can I get on electronic music events?**
For every event you get the title, date, start/end time, venue, flyer image, ticketing status, and an "interested" popularity count, plus the full artist lineup. With promoter enrichment on (the default), each event also carries the promoter's name, website, social links (Instagram, Facebook, Twitter, SoundCloud), follower count, upcoming-events count, and area/country — so each row is a self-contained electronic-music-events lead.

**Which cities and countries are covered?**
Any city Resident Advisor lists — London, Berlin, Barcelona, Tokyo, Los Angeles, New York, Mexico City, and dozens more. About 40 major cities resolve instantly by name; others resolve from a runtime catalog lookup. You can also target a city directly by its numeric area ID.

**Can I limit results to a specific date range?**
Yes. Set `listingDateGte` and `listingDateLte` (YYYY-MM-DD) to bound the window. Leaving the upper bound empty returns everything from the start date onward.

**How do I get promoter contact details and leads, not just events?**
Keep `enrichPromoters` on (the default). Each unique promoter is enriched once per run and deduplicated, giving you website + social handles + audience size — the fields you need for outreach. Turn it off to pay for events alone.

**Can I run it on a schedule?**
Yes. Schedule the Actor (e.g. weekly per city) and diff the output over time to track new promoters, new events, and shifts in audience size. It also works through Apify's integrations for downstream pipelines.

**Is there a Resident Advisor API — why use this instead?**
Resident Advisor has no open public data API for events and promoters, so there's no official, supported way to pull its listings programmatically. This Actor returns the full structured record per event — lineup, venue, ticketing status, popularity count, and enriched promoter contacts — with no API key and no quota: point it at a city or date range and export to JSON, CSV, or Excel.

### Related Actors

Building an event-data set across platforms? These pair naturally with this Actor:

- [Eventbrite Scraper](https://apify.com/aitorsm/eventbrite) — broad ticketed-event coverage + organizer contact data for event lead generation.
- [Luma Events Scraper](https://apify.com/aitorsm/luma-events) — tech, community, and founder events with organizer socials included.
- [Posh Events Scraper](https://apify.com/aitorsm/posh-events) — US nightlife events and the promoters / throwers behind them.
- [DICE Events Scraper](https://apify.com/aitorsm/dice-events) — live music + nightlife events, venues, lineups, and pricing.
- [Email & Contact Extractor](https://apify.com/aitorsm/email-extractor) — turn any list of promoter or venue websites into emails and phone numbers.

**Related reading:** [The contact-enrichment cascade — what order to fire your tools in](https://www.linkedin.com/pulse/contact-enrichment-cascade-what-order-fire-your-tools-aitor-165ae/) — how to turn the promoter / venue websites this Actor surfaces into emails and phones, cheapest-first (with real hit rates per step).

### Contact

- **Email**: <business@aitorsm.com> — for custom features, advanced filtering, tailored data products, or anything off-spec.
- **Apify Discord**: find me as `aitor.sm`.

If this actor has been useful to you, please consider adding it to your bookmarks 📑 on Apify.

# Actor input Schema

## `city` (type: `string`):

Pick a city from the list, or type any city name (resolved to RA’s internal areaId; RA’s full area list is queried live, so cities beyond the suggestions and newly-added ones also work). Leave empty if providing areaId in the advanced section.

## `areaId` (type: `integer`):

RA's internal numeric areaId. Overrides `city`. Useful for cities the resolver doesn't recognise.

## `listingDateGte` (type: `string`):

Earliest listing date to include. Defaults to today.

## `listingDateLte` (type: `string`):

Latest listing date (inclusive). Leave empty for no upper bound.

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

Maximum number of events to return. 0 = uncapped.

## `enrichPromoters` (type: `boolean`):

If true, each event's promoters\[] array is enriched with full data — name, website, social URLs (Instagram, Facebook, Twitter, SoundCloud), follower count, upcoming events count, area, country. Costs ~1 extra request per unique promoter (cached for the run). Recommended for lead-generation use cases.

## Actor input object example

```json
{
  "city": "Los Angeles",
  "maxItems": 100,
  "enrichPromoters": true
}
```

# 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 = {
    "city": "Los Angeles",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("aitorsm/ra-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 = {
    "city": "Los Angeles",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("aitorsm/ra-events").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 '{
  "city": "Los Angeles",
  "maxItems": 100
}' |
apify call aitorsm/ra-events --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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