Bandsintown Scraper - Concerts, Artists & Venues
Pricing
from $1.00 / 1,000 event records
Bandsintown Scraper - Concerts, Artists & Venues
Scrape Bandsintown concert and festival dates: artist tour calendars, venue profiles, ticket links, lineups, RSVP counts and genres. Search by artist name or paste artist, venue or event links. MCP export included.
Pricing
from $1.00 / 1,000 event records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Get concert and festival dates from Bandsintown (bandsintown.com): full artist tour calendars, venue profiles, ticket links, lineups, RSVP counts and genres. Search by artist name or paste artist, venue or event links.
Why This Scraper?
- Full event record. Date, start/end time, timezone, on-sale date, lineup, ticket offers, sold-out and free flags, RSVP count and genre.
- Full artist profile. Bio, hometown, genre, follower count, official links (Spotify, Instagram, website, ...) and both the upcoming and past show list.
- Full venue profile. Address, coordinates, phone number, follower count, verified/premium flags and the venue's own upcoming calendar.
- Two input modes. Search by one or more artist names, or paste Bandsintown artist, venue or event links directly.
- Upcoming or full history. Choose upcoming dates only, or the artist's full date history.
- Send results into your apps. Optional MCP export to Notion or any other connector you've authorized.
- One finite cap. A single "Max items" setting controls run size and spend; no surprise long runs.
Data You Get
| Field | Example |
|---|---|
| Event ID | 0 |
| Event URL | https://www.bandsintown.com/e/0000000 |
| Title | Jane Doe at Example Arena |
| Date/time | 2027-01-15T19:30:00 |
| Timezone | America/New_York |
| Lineup | ["Jane Doe"] |
| Sold out / Free | false / false |
| RSVP count | 0 |
| Genre | Pop |
| Ticket offers | [{"type": "Tickets", "url": "https://www.bandsintown.com/t/0000000", "status": "available"}] |
| Artist name | Jane Doe |
| Artist follower count | 0 |
| Artist genre | Pop |
| Artist bio | Jane Doe is an example artist used for illustration only. |
| Artist hometown | Example City, Country |
| Artist links | [{"type": "spotify", "url": "https://open.spotify.com/artist/0"}] |
| Venue name | Example Arena |
| Venue city | Example City |
| Venue region / country | EX / Example Country |
| Venue coordinates | 0.0000, 0.0000 |
| Venue phone number | +1-000-000-0000 |
| Venue follower count | 0 |
| Venue verified / premium | false / false |
Sample shape: values are illustrative placeholders, not from a live listing.
How to Use
Search by artist name
{"mode": "search","artistNames": ["Jane Doe", "Example Band"],"dateRange": "upcoming","fetchDetails": true,"maxItems": 20}
Search across an artist's full date history
{"mode": "search","artistNames": ["Jane Doe"],"dateRange": "all","fetchDetails": false,"maxItems": 50}
Read a specific artist, venue or event link
{"mode": "url","urls": ["https://www.bandsintown.com/a/0-jane-doe","https://www.bandsintown.com/v/0-example-arena","https://www.bandsintown.com/e/0000000"],"fetchDetails": true,"maxItems": 20}
Base-fields-only run (details off)
{"mode": "search","artistNames": ["Jane Doe"],"fetchDetails": false,"maxItems": 20}
Input Parameters
| Parameter | Type | Description |
|---|---|---|
mode | select | search looks up an artist's calendar by name; url reads pasted links. |
artistNames | array | Search mode: one artist name per line, exactly as it appears on Bandsintown. |
dateRange | select | Search mode: upcoming (default) or all (upcoming and past). |
urls | array | URL mode: Bandsintown artist (/a/), venue (/v/) or event (/e/) links, one per line. |
fetchDetails | boolean | Adds artist/venue follower counts, venue phone and verified/premium status, and full upcoming/past show history. Search mode also picks up timezone, genre, RSVP count and artist bio this way (URL mode already includes those four for free). Adds a per-event surcharge. Slow: ~10-15s per event (real browser page loads), a 20-event run typically takes 4-5 minutes. Off by default for a fast, near-instant run off the free public API alone; turn on for the fuller field set at that speed/cost tradeoff. Default false. |
maxItems | integer | Stop after this many events. 0 = no limit. Default 20. |
maxPages | integer | Upper bound on how many pages each artist or venue calendar is walked through. 0 = no limit; Max items is then the only cap. |
resumeFromRunId | string | Resume: paste a previous run ID (or dataset ID) to continue one interrupted run without returning, or charging for, events it already collected. |
incrementalMode | boolean | Recurring monitoring: the actor remembers the previous run of the same scope itself and later runs return only NEW, UPDATED and REAPPEARED events. Default false. See "Resume & recurring updates" below. |
stateKey | string | Optional name for an incremental monitoring campaign, so its state stays stable or is deliberately shared across differently configured runs. |
emitUnchanged | boolean | Incremental mode: also return events that have not changed, marked UNCHANGED (bills extra rows). Default false. |
emitExpired | boolean | Incremental mode: also return events no longer found after a complete scan, marked EXPIRED (bills extra synthetic rows). Default false. |
mcpConnectors | array | Optional Model Context Protocol connector IDs to pipe results into (Notion, etc). |
notionParentPageUrl | string | Notion parent page URL or ID (Notion connector only). |
maxNotifyListings | integer | Cap on items written to each connector per run. Default 50. |
proxyConfiguration | object | Apify Proxy settings. The prefilled default works on every Apify plan. |
Resume & recurring updates
Two different tools live under one input section. Pick by what you want:
Resume from a previous run (resumeFromRunId) continues ONE specific
interrupted run. Paste the run ID (or its dataset ID) and the actor skips every
event that run already collected, so a big pull can be finished without paying
for the same rows twice.
Incremental mode (incrementalMode) is for running the same scope again
and again — for example a daily schedule over the same artists or venue links —
and getting only what changed. The first run returns every matching event as
NEW. Later runs compare each event against the saved baseline and return only:
NEW— an event that was not in the previous run,UPDATED— an event whose details changed (rescheduled date, new ticket status, new lineup, ...);changedFieldsnames exactly which fields moved,REAPPEARED— an event that came back after previously being marked expired.
Every row also carries firstSeenAt and lastSeenAt. Nothing changed this
run? The run succeeds with an explanatory status and no rows, so you are never
billed for a snapshot you already have.
Two opt-in extras (both bill extra rows, both off by default):
emitUnchanged also returns unchanged events, and emitExpired returns events
that are no longer found after a run that fully scanned the tracked scope —
never after a capped run or a resume, because a partial scan cannot tell
"cancelled" from "not reached yet".
State is stored per scope (mode, artist list, link set, date range, detail
setting) in a dedicated key-value store, or under stateKey if you name a
campaign. Detail-enrichment surcharges are never charged for a suppressed
unchanged event.
Known limitation, by design: with fetchDetails on, the embedded artist/venue
show-history lists (artistUpcomingEvents, artistPastEvents,
venueUpcomingEvents) are excluded from change detection and from the stored
baseline — they duplicate the tracked events themselves (a new show arrives as
its own NEW row; a cancelled one as EXPIRED), so diffing the embedded copy
would only add cost and false positives.
Output Example
{"kind": "event","eventId": "0","url": "https://www.bandsintown.com/e/0000000","title": "Jane Doe at Example Arena","datetime": "2027-01-15T19:30:00","startsAt": "2027-01-15T19:30:00","endsAt": null,"timezone": "America/New_York","datetimeDisplayRule": "datetime","onSaleDatetime": "2026-11-01T10:00:00","festivalStartDate": null,"festivalEndDate": null,"lineup": ["Jane Doe"],"offers": [{"type": "Tickets", "url": "https://www.bandsintown.com/t/0000000", "status": "available"}],"soldOut": false,"free": false,"presale": null,"bandsintownPlus": false,"showMultiTicket": false,"imageUrl": "https://example.com/image.jpg","thumbUrl": "https://example.com/thumb.jpg","description": "Jane Doe at Example Arena 2027-01-15T19:30:00","rsvpCount": 0,"genre": "Pop","artistId": "0","artistName": "Jane Doe","artistUrl": "https://www.bandsintown.com/a/0-jane-doe","artistMbid": "00000000-0000-0000-0000-000000000000","artistImageUrl": "https://example.com/artist.jpg","artistThumbUrl": "https://example.com/artist-thumb.jpg","artistFacebookPageUrl": "https://www.facebook.com/0","artistTrackerCount": 0,"artistUpcomingEventCount": 0,"artistGenre": "Pop","artistBio": "Jane Doe is an example artist used for illustration only.","artistLocation": "Example City, Country","artistLinks": [{"type": "spotify", "url": "https://open.spotify.com/artist/0"}],"artistUpcomingEvents": [{"id": "0", "url": "https://www.bandsintown.com/e/0000001", "startsAt": "2027-02-01T19:00:00", "venueName": "Other Venue", "location": "Other City"}],"artistPastEvents": [{"id": "0", "url": "https://www.bandsintown.com/e/0000002", "startsAt": "2025-01-01T19:00:00", "venueName": "Old Venue", "location": "Old City"}],"venueId": "0","venueName": "Example Arena","venueUrl": "https://www.bandsintown.com/v/0-example-arena","venueStreetAddress": "1 Example Way","venueCity": "Example City","venueRegion": "EX","venueCountry": "Example Country","venuePostalCode": "00000","venueLocation": "Example City, EX","venueLatitude": 0.0,"venueLongitude": 0.0,"venuePhoneNumber": "+1-000-000-0000","venueImageUrl": "https://example.com/venue.jpg","venueFollowerCount": 0,"venueIsVerified": false,"venueIsPremium": false,"venueUpcomingEvents": [{"id": "0", "url": "https://www.bandsintown.com/e/0000003", "startsAt": "2027-03-01T19:00:00", "title": "Other Artist"}]}
Sample shape: values are illustrative placeholders, not from a live listing.
Send results into your apps (MCP connectors)
Set mcpConnectors to one or more connector IDs authorized under Settings → API & Integrations on your Apify account, and every collected event is also written into the apps behind those connectors as the run finishes. The Notion connector creates one page per event (set notionParentPageUrl to the page it should file under); other connectors get a best-effort record write or a summary digest. This never changes what lands in the dataset - it is a side channel on top of the normal output.
Plan Requirement
An Apify account with proxy access is required to run this actor. The default proxy configuration ({"useApifyProxy": true}) runs on the datacenter connection tier, which works on every plan including the Free tier - this is the recommended default and the cheapest option for this site.
Residential is optional: set the proxy group to RESIDENTIAL if you need it, but it costs more and requires a paid plan with residential access. If a free-plan account is used with RESIDENTIAL selected, the run logs a warning and automatically continues on a backup connection so it doesn't fail outright; coverage may be more limited in that case. When residential is used, the run keeps an internal traffic budget and automatically switches back to the cheaper datacenter tier once that budget is spent, so cost never grows unbounded. None of this needs any configuration from you - the only connection setting exposed is the standard proxyConfiguration field above.