Resident Advisor Events Scraper — Lineups, Venues & Guests
Pricing
from $18.43 / 1,000 events
Resident Advisor Events Scraper — Lineups, Venues & Guests
Scrape Resident Advisor (ra.co) event listings for any city and date range via RA's official GraphQL API. Get title, date, start/end time, venue, full artist lineup, flyer image, ticketed status and guests-attending count. Pay per result. No login or proxy key needed.
Pricing
from $18.43 / 1,000 events
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
5
Monthly active users
36 minutes ago
Last modified
Share
Resident Advisor Events Scraper
Scrape Resident Advisor (ra.co) event listings by numeric area ID and date range. The Actor reads the GraphQL endpoint used by the ra.co website and returns one record per listing entry with event dates, venues, lineups, ticket status, flyer data, attending counts, and RA event, venue and artist IDs; no Resident Advisor login or external proxy key is required. Pricing is pay per event at $0.019 on the Free plan; the default maxItems is 100, while maxItems: 0 removes the result cap.
What you get
The Actor returns one flat record for each RA listing entry. For most fields, a missing source value is null; title and artists become empty strings, artistList and artistIds become empty lists, and scrapedAt is always set. IDs are strings. RA date fields have no timezone suffix; scrapedAt is a UTC timestamp.
| Field | Type | Description | Empty or missing value |
|---|---|---|---|
eventId | string | RA event ID | null if RA does not provide it |
listingDate | ISO 8601 string | Date on which the listing appears | null if RA does not provide it; no timezone suffix |
title | string | Event title | Empty string if RA does not provide it |
date | ISO 8601 string | Event date | null if RA does not provide it; no timezone suffix |
startTime | ISO 8601 string | Event start timestamp | null if RA does not provide it; no timezone suffix |
endTime | ISO 8601 string | Event end timestamp | null if RA does not provide it; no timezone suffix |
venue | string | Venue name | null if RA does not provide it |
venueUrl | string | RA venue page URL | null if RA does not provide it |
venueId | string | RA venue ID | null if RA does not provide it |
venueLive | boolean | RA live flag for the venue | null if RA does not provide it |
artists | string | Lineup as a comma-separated string | Empty string if RA returns no artist names |
artistList | array of strings | Lineup as a list of artist names | Empty list if RA returns no artist names |
artistIds | array of strings | RA artist IDs, built separately from artistList, so the two lists can differ in length | Empty list if RA returns no artist IDs |
guestsAttending | number | RA attending count at scrape time | null if RA does not provide it |
isTicketed | boolean | Whether the event is ticketed on RA | null if RA does not provide it |
flyer | string | Front flyer or first image filename returned by RA | null if RA provides no flyer or image; can be a bare filename |
raPickBlurb | string | RA editorial pick blurb | null if RA does not provide it |
url | string | Event page URL | null if RA does not provide it |
scrapedAt | ISO 8601 string | UTC time when the run started fetching; the same value on every row of a run | Always set |
error | string | Row-level error field | Always null |
Sample output
These records show listings returned for London, area 13.
[{"eventId": "2537526","listingDate": "2026-10-13T00:00:00.000","title": "Milkshake, Ministry Of Sound - London's Biggest Student Night","date": "2026-10-13T00:00:00.000","startTime": "2026-10-13T22:00:00.000","endTime": "2026-10-14T04:00:00.000","venue": "Ministry Of Sound","venueUrl": "https://ra.co/clubs/725","artists": "","url": "https://ra.co/events/2537526","artistList": [],"artistIds": [],"venueId": "725","venueLive": true,"guestsAttending": 73,"isTicketed": true,"flyer": "https://images.ra.co/33133ea4a5a1aca0e2991a5c53ee725a6f5d753b.png","raPickBlurb": null,"scrapedAt": "2026-10-13T00:58:39Z","error": null},{"eventId": "2546175","listingDate": "2026-10-13T00:00:00.000","title": "LIKE US","date": "2026-10-10T00:00:00.000","startTime": "2026-10-10T21:30:00.000","endTime": "2026-10-18T04:00:00.000","venue": "Upper East","venueUrl": "https://ra.co/clubs/244543","artists": "Summer Ghemati, Rudy.","url": "https://ra.co/events/2546175","artistList": ["Summer Ghemati","Rudy."],"artistIds": ["71583","151288"],"venueId": "244543","venueLive": true,"guestsAttending": 22,"isTicketed": true,"flyer": "https://images.ra.co/aa201e380957bdc99e510fb98b3bcab1fdbe2923.jpg","raPickBlurb": null,"scrapedAt": "2026-10-13T00:58:39Z","error": null}]
Pricing
This Actor uses the PAY_PER_EVENT model. The billable event-listing unit is one returned Resident Advisor listing entry with venue, lineup, date, and ticket information. A multi-day event can produce and charge one listing entry for each listed date. There is no separate start charge.
| Tier | Price per event | 1,000 billed events | 10,000 billed events |
|---|---|---|---|
| FREE | $0.01900 | $19.00 | $190.00 |
| BRONZE | $0.01881 | $18.81 | $188.10 |
| SILVER | $0.01862 | $18.62 | $186.20 |
| GOLD | $0.01843 | $18.43 | $184.30 |
| PLATINUM | $0.01824 | $18.24 | $182.40 |
| DIAMOND | $0.01805 | $18.05 | $180.50 |
You pay only for the events in the table above. This Actor does not use the Pay per event + usage option, so the platform usage of your runs (compute, proxy traffic and storage) is not billed to you separately.
The Apify Free plan includes $5 of platform credit each month. At the Free-plan event price, the credit covers 263 events:
floor(5 / 0.019) = 263 billed events
The default maxItems of 100 costs up to $1.90 at the Free-plan rate:
100 × $0.019 = $1.90
Set maxItems to 0 to remove the result cap and bill every listing returned for the selected date range.
How it works
- The Actor sends the
GET_EVENT_LISTINGSoperation tohttps://ra.co/graphql. - It filters by the supplied numeric RA area ID and inclusive listing-date range.
- It fetches pages one after another, with 20 listings per page and a 0.6-second pause between pages.
- It normalizes each listing into a flat output record.
- Requests use Apify
RESIDENTIALproxy by default.
The endpoint is the GraphQL endpoint that the ra.co website itself uses. It is not a documented public API.
Input parameters
| Input | Type | Required | Details |
|---|---|---|---|
area | integer | Yes | Numeric RA area ID. London is 13; see the area guidance below. |
startDate | string | No | Inclusive start date in YYYY-MM-DD format. Defaults to today in UTC. |
endDate | string | No | Inclusive end date in YYYY-MM-DD format. Defaults to startDate plus 7 days, producing an 8-calendar-day window. |
maxItems | integer | No | Maximum number of records. Default 100; minimum 0; 0 means no limit. |
proxyConfiguration | object | No | Proxy configuration. Apify RESIDENTIAL is used by default; no external proxy key is required. |
disableUsageStats | boolean | No | Set to true to turn off the run summary described in Usage statistics. Default false. |
Choosing an area ID
London is area 13, verified against real results. The input form lists New York 8, Berlin 34 and Amsterdam 23 as examples; those three IDs are unverified. The Actor does not validate area IDs. Check any other ID with a one-event test run using maxItems: 1 and inspect the returned venue values.
Example inputs
1. London, capped at the default maximum
{"area": 13,"startDate": "2026-11-06","endDate": "2026-11-13","maxItems": 100}
2. London, one-event area check
Use this to check the returned venue before running a larger scrape.
{"area": 13,"startDate": "2026-11-20","endDate": "2026-11-27","maxItems": 1}
3. New York, no result cap
The input form lists New York as area 8; check the returned venue values before relying on the results.
{"area": 8,"startDate": "2026-12-04","endDate": "2026-12-11","maxItems": 0}
Billed per listing returned: 1,000 listings cost $19.00 at the Free-plan rate.
4. Berlin with an explicit residential proxy
The input form lists Berlin as area 34; check the returned venue values before relying on the results.
{"area": 34,"startDate": "2026-12-11","endDate": "2026-12-18","maxItems": 50,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
How to use
- Open the Actor in Apify and create a run.
- Set the required numeric
area. Use London13, or test another ID withmaxItems: 1and inspect the returnedvenuevalues. - Add a date range and result cap from one of the JSON recipes.
- Run the Actor and read listing records from the Apify dataset.
- If the dataset is empty, check the
OUTPUTrecord in the run's default key-value store.
Limits and edge cases
- The Actor fetches pages one after another and writes rows after the fetch step ends. If a rate limit persists after retries, RA returns HTTP 403 or 503, or the API returns an error, the run still ends as Succeeded. If this happens before any listing was fetched, the dataset is empty and nothing is charged; the reason is saved in the
OUTPUTrecord in the run's default key-value store. If it happens on a later page, the rows fetched before the failure are saved and billed, andOUTPUTgetspartial: trueplus the error; the run status message says to re-run to fetch the rest. A re-run is a new run that starts from the first page: it fetches and bills every listing again, including those you already received. - Only HTTP 429 and network errors are retried, with up to four retries waiting 8, 16, 32 and 64 seconds. HTTP 403 and 503 end the fetch immediately as
blocked. Any other non-2xx status, including HTTP 500 and 502, a non-JSON response, a response without adataobject, or GraphQL errors, ends the fetch immediately asapi_error. A persistent HTTP 429 ends it asrate_limited. A timeout or network error that still fails after the four retries ends the fetch asapi_error. - Rows appear in the dataset only after fetching ends. If you abort the run or it times out during fetching, nothing is saved. Use a moderate
maxItemsand a short date range for large areas. - A missing
areawrites{"error": "no_area"}toOUTPUT. A value that cannot be converted to an integer writes{"error": "bad_area"}. Both cases produce no dataset items. - Dates are inclusive. An empty or invalid
startDatedefaults to today in UTC. An empty or invalidendDatedefaults tostartDateplus 7 days. IfendDateis earlier thanstartDate, it is changed tostartDateplus 7 days, producing an 8-calendar-day window. maxItemsdefaults to100. Set it to0to remove the cap: the Actor then requests pages until RA returns an empty page, and you are billed for every listing returned, however many that is.- Each API request returns up to 20 listings, has a 30-second timeout, and is followed by a 0.6-second pause before the next page.
- Each output row represents one RA listing entry. A multi-day event can appear once per listed date with the same
eventIdand differentlistingDatevalues, and each listing entry is billed. The Actor does not de-duplicate these entries. - The dataset
errorfield is alwaysnull; fetch errors are stored inOUTPUT, not in dataset rows. flyercan be a full URL or a bare file name returned by RA.- RA may refuse datacenter IPs. Apify
RESIDENTIALproxy is used by default. If proxy configuration fails, the Actor continues with a direct request, which can result in HTTP 403 or 503 and an empty dataset. guestsAttendingis RA's attending count at the time of scraping.
Integrations
Apify dataset
Listing records are written to the Actor's Apify dataset after the fetch step ends. They can be inspected or exported after the run.
Apify key-value store
The OUTPUT record contains the result of the run:
- On a complete fetch:
totalItems,area,startDate,endDateandscrapedAt. The dates are the effective values used after applying defaults. - On a later-page failure: the complete-fetch fields plus
partial: true,erroranddetail. - When RA answers but returns no listings: the complete-fetch fields with
totalItems: 0and noerror; nothing is charged. - When the fetch fails before any listing was fetched:
{"error": "blocked" | "rate_limited" | "api_error", "detail": "..."}. Thedetailvalue contains up to 200 characters of error information. - For missing or invalid
area,OUTPUTcontains{"error": "no_area"}or{"error": "bad_area"}.
The run status message in the Console also states how many events were delivered or why none were.
Related actors
| Actor | What it does |
|---|---|
| Eventbrite Events Scraper | Collects event listings from Eventbrite. |
| Time Out Events & Things-To-Do Scraper | Collects events and things-to-do listings from Time Out. |
FAQ
What website does this Actor use?
The Actor reads the GraphQL endpoint that the ra.co website itself uses at https://ra.co/graphql. It is not a documented public API.
Do I need a Resident Advisor login or proxy key?
No. The Actor requires no Resident Advisor login and no external proxy key. Apify RESIDENTIAL proxy is used by default.
How do I select a city?
Use RA's numeric area ID. London is 13. The input form lists New York 8, Berlin 34 and Amsterdam 23 as unverified examples. For any other ID, run once with maxItems: 1 and inspect the returned venue values.
What does maxItems: 0 do?
It removes the event-count cap: the Actor keeps requesting pages until RA returns an empty page. Every returned listing entry is billable.
What does one billed event mean?
One billed event-listing is one RA listing entry with venue, lineup, date and ticket information. A multi-day event can appear once per listed date, and each listing entry is billed.
Why can artists be empty?
The output reflects the lineup data returned by RA. When no artist names are returned, artists is an empty string and artistList is an empty list; artistIds is empty only when RA also returns no artist IDs.
What does guestsAttending represent?
It is RA's attending count at the time of scraping.
How can I diagnose an empty result?
Check the area ID and date range first, then inspect the OUTPUT record in the run's default key-value store. Missing or invalid input, a blocked request, a persistent rate limit, or an API error is recorded there. If fetching stopped on a later page, the rows fetched before the failure are saved and OUTPUT includes partial: true. If RA answers but returns no listings, OUTPUT has totalItems: 0 and no error, and nothing is charged.
How should I use the public RA data?
The Actor reads public data returned by the endpoint used by RA's website. Source terms and applicable law depend on your particular use case, so review the terms and requirements that apply to your planned use.
Usage statistics
At the end of each run this Actor creates a short summary of how the run went and sends it over HTTPS to a server run by the Actor's developer. It is used to monitor reliability and improve this Actor. A copy is saved as USAGE_STATS in your own Apify key-value store, so you can see the exact record created for your run.
Set disableUsageStats to true in the input to opt out. Nothing is sent then; your USAGE_STATS record only says that statistics were disabled.
The summary contains at most these items (an item this Actor does not track is left out):
- schema version, Actor name and build number;
- UTC start and finish hour (not a precise timestamp);
- run duration, number of results and time to the first result, each as a coarse range;
- whether the result was empty, the end status, and an error type from a fixed list;
- memory setting and counts of charged events;
- names of the input fields you set, and the selected option for fields that offer a fixed list of choices (for example a country or a sort order);
- the size range of list inputs, the requested result count as a range, how much of it was delivered, whether it was reached, and the average number of results per input entry as a range;
- coarse shares of filled fields, failed rows and duplicate rows, and the range of distinct field names in the output;
- how the run was started (for example API, Console or schedule), whether it was aborted, timed out or stopped at your charge limit, and how many times it was restarted;
- the range of input targets that succeeded or failed, and the most common failure reason from a fixed list;
- your Apify user ID, whether Apify marks your account as paying, and one category from a fixed Actor list;
- two 8-character fingerprints (short hashes): one of the input field names you set, and one of your input values without the proxy settings. The same input always gives the same fingerprint, which lets us count repeated runs of one input.
Apart from those fingerprints, the summary holds no input text, search terms, URLs, domains, email addresses, names, proxy credentials, tokens, scraped records, output items, raw error messages or stack traces. It is used only for aggregated reliability and repeat-use statistics. We do not sell or share this data, and we do not try to identify people from it.