Resident Advisor Events Scraper — Lineups, Venues & Guests avatar

Resident Advisor Events Scraper — Lineups, Venues & Guests

Pricing

from $18.43 / 1,000 events

Go to Apify Store
Resident Advisor Events Scraper — Lineups, Venues & Guests

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

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

5

Monthly active users

36 minutes ago

Last modified

Categories

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.

FieldTypeDescriptionEmpty or missing value
eventIdstringRA event IDnull if RA does not provide it
listingDateISO 8601 stringDate on which the listing appearsnull if RA does not provide it; no timezone suffix
titlestringEvent titleEmpty string if RA does not provide it
dateISO 8601 stringEvent datenull if RA does not provide it; no timezone suffix
startTimeISO 8601 stringEvent start timestampnull if RA does not provide it; no timezone suffix
endTimeISO 8601 stringEvent end timestampnull if RA does not provide it; no timezone suffix
venuestringVenue namenull if RA does not provide it
venueUrlstringRA venue page URLnull if RA does not provide it
venueIdstringRA venue IDnull if RA does not provide it
venueLivebooleanRA live flag for the venuenull if RA does not provide it
artistsstringLineup as a comma-separated stringEmpty string if RA returns no artist names
artistListarray of stringsLineup as a list of artist namesEmpty list if RA returns no artist names
artistIdsarray of stringsRA artist IDs, built separately from artistList, so the two lists can differ in lengthEmpty list if RA returns no artist IDs
guestsAttendingnumberRA attending count at scrape timenull if RA does not provide it
isTicketedbooleanWhether the event is ticketed on RAnull if RA does not provide it
flyerstringFront flyer or first image filename returned by RAnull if RA provides no flyer or image; can be a bare filename
raPickBlurbstringRA editorial pick blurbnull if RA does not provide it
urlstringEvent page URLnull if RA does not provide it
scrapedAtISO 8601 stringUTC time when the run started fetching; the same value on every row of a runAlways set
errorstringRow-level error fieldAlways 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.

TierPrice per event1,000 billed events10,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

  1. The Actor sends the GET_EVENT_LISTINGS operation to https://ra.co/graphql.
  2. It filters by the supplied numeric RA area ID and inclusive listing-date range.
  3. It fetches pages one after another, with 20 listings per page and a 0.6-second pause between pages.
  4. It normalizes each listing into a flat output record.
  5. Requests use Apify RESIDENTIAL proxy by default.

The endpoint is the GraphQL endpoint that the ra.co website itself uses. It is not a documented public API.

Input parameters

InputTypeRequiredDetails
areaintegerYesNumeric RA area ID. London is 13; see the area guidance below.
startDatestringNoInclusive start date in YYYY-MM-DD format. Defaults to today in UTC.
endDatestringNoInclusive end date in YYYY-MM-DD format. Defaults to startDate plus 7 days, producing an 8-calendar-day window.
maxItemsintegerNoMaximum number of records. Default 100; minimum 0; 0 means no limit.
proxyConfigurationobjectNoProxy configuration. Apify RESIDENTIAL is used by default; no external proxy key is required.
disableUsageStatsbooleanNoSet 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

  1. Open the Actor in Apify and create a run.
  2. Set the required numeric area. Use London 13, or test another ID with maxItems: 1 and inspect the returned venue values.
  3. Add a date range and result cap from one of the JSON recipes.
  4. Run the Actor and read listing records from the Apify dataset.
  5. If the dataset is empty, check the OUTPUT record 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 OUTPUT record 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, and OUTPUT gets partial: true plus 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 a data object, or GraphQL errors, ends the fetch immediately as api_error. A persistent HTTP 429 ends it as rate_limited. A timeout or network error that still fails after the four retries ends the fetch as api_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 maxItems and a short date range for large areas.
  • A missing area writes {"error": "no_area"} to OUTPUT. 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 startDate defaults to today in UTC. An empty or invalid endDate defaults to startDate plus 7 days. If endDate is earlier than startDate, it is changed to startDate plus 7 days, producing an 8-calendar-day window.
  • maxItems defaults to 100. Set it to 0 to 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 eventId and different listingDate values, and each listing entry is billed. The Actor does not de-duplicate these entries.
  • The dataset error field is always null; fetch errors are stored in OUTPUT, not in dataset rows.
  • flyer can be a full URL or a bare file name returned by RA.
  • RA may refuse datacenter IPs. Apify RESIDENTIAL proxy 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.
  • guestsAttending is 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, endDate and scrapedAt. The dates are the effective values used after applying defaults.
  • On a later-page failure: the complete-fetch fields plus partial: true, error and detail.
  • When RA answers but returns no listings: the complete-fetch fields with totalItems: 0 and no error; nothing is charged.
  • When the fetch fails before any listing was fetched: {"error": "blocked" | "rate_limited" | "api_error", "detail": "..."}. The detail value contains up to 200 characters of error information.
  • For missing or invalid area, OUTPUT contains {"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.

ActorWhat it does
Eventbrite Events ScraperCollects event listings from Eventbrite.
Time Out Events & Things-To-Do ScraperCollects 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.