Bandsintown Scraper - Concerts, Artists & Venues avatar

Bandsintown Scraper - Concerts, Artists & Venues

Pricing

from $1.00 / 1,000 event records

Go to Apify Store
Bandsintown Scraper - Concerts, Artists & Venues

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

Abot API

Maintained by Community

Actor 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

FieldExample
Event ID0
Event URLhttps://www.bandsintown.com/e/0000000
TitleJane Doe at Example Arena
Date/time2027-01-15T19:30:00
TimezoneAmerica/New_York
Lineup["Jane Doe"]
Sold out / Freefalse / false
RSVP count0
GenrePop
Ticket offers[{"type": "Tickets", "url": "https://www.bandsintown.com/t/0000000", "status": "available"}]
Artist nameJane Doe
Artist follower count0
Artist genrePop
Artist bioJane Doe is an example artist used for illustration only.
Artist hometownExample City, Country
Artist links[{"type": "spotify", "url": "https://open.spotify.com/artist/0"}]
Venue nameExample Arena
Venue cityExample City
Venue region / countryEX / Example Country
Venue coordinates0.0000, 0.0000
Venue phone number+1-000-000-0000
Venue follower count0
Venue verified / premiumfalse / 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
}
{
"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

ParameterTypeDescription
modeselectsearch looks up an artist's calendar by name; url reads pasted links.
artistNamesarraySearch mode: one artist name per line, exactly as it appears on Bandsintown.
dateRangeselectSearch mode: upcoming (default) or all (upcoming and past).
urlsarrayURL mode: Bandsintown artist (/a/), venue (/v/) or event (/e/) links, one per line.
fetchDetailsbooleanAdds 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.
maxItemsintegerStop after this many events. 0 = no limit. Default 20.
maxPagesintegerUpper bound on how many pages each artist or venue calendar is walked through. 0 = no limit; Max items is then the only cap.
resumeFromRunIdstringResume: paste a previous run ID (or dataset ID) to continue one interrupted run without returning, or charging for, events it already collected.
incrementalModebooleanRecurring 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.
stateKeystringOptional name for an incremental monitoring campaign, so its state stays stable or is deliberately shared across differently configured runs.
emitUnchangedbooleanIncremental mode: also return events that have not changed, marked UNCHANGED (bills extra rows). Default false.
emitExpiredbooleanIncremental mode: also return events no longer found after a complete scan, marked EXPIRED (bills extra synthetic rows). Default false.
mcpConnectorsarrayOptional Model Context Protocol connector IDs to pipe results into (Notion, etc).
notionParentPageUrlstringNotion parent page URL or ID (Notion connector only).
maxNotifyListingsintegerCap on items written to each connector per run. Default 50.
proxyConfigurationobjectApify 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, ...); changedFields names 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.