# Bandsintown Scraper (`solidcode/bandsintown-scraper`) Actor

\[💰 $1 / 1K] Scrape Bandsintown concerts, tour dates & artist profiles. Look up many artists by name or ID, get upcoming, past, or all events with venue locations, dates & ticket links. Optional add-on enriches events with exact coordinates and full lineups. No account or API key needed.

- **URL**: https://apify.com/solidcode/bandsintown-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 26 total users, 9 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Bandsintown Scraper

Pull concerts, tour dates, and artist profiles from Bandsintown at scale — venue locations with latitude/longitude, full event lineups, structured ticket offers, on-sale times, and follower counts for any artist by name or ID. Two record types in one run: live `event` rows and rich `artist` profiles, across upcoming shows, past dates, or a custom date window — one six-artist run returned 220 past concert dates. Built for event marketers, ticketing analysts, and music-data teams who need live tour data at scale without an API key or a sign-up.

### Why This Scraper?

- **Two record types in one run** — `event` rows (tour dates, venues, lineups, tickets) and `artist` profiles (followers, upcoming-show count, profile image), selectable per run with a single "What to fetch" switch.
- **Batch unlimited artists per run** — paste many artists, one per line, mixing plain names and numeric Bandsintown IDs freely; names auto-resolve to the right artist, numeric IDs skip the lookup entirely.
- **Past dates in bulk, not just upcoming** — go far beyond the handful of shows a public profile lists: a single six-artist run returned **220 past concert dates**. Bandsintown limits how far back it will serve, so any artist whose history stops early is named by name in the run summary instead of quietly cut short. Choose `upcoming`, `past`, `all`, or a precise `custom` date range.
- **Custom date-range filtering** — pull every show between an exact start and end date (YYYY-MM-DD) for clean tour-period analysis.
- **Venue coordinates on enriched events** — latitude, longitude, city and full country name, plus state and province codes covering all **51 US states and 13 Canadian provinces and territories**, ready to drop onto a map or into a spatial database.
- **Structured ticket offers on 100% of rows** — every event carries ticket and offer URLs with availability status, and enriched events add the on-sale time wherever Bandsintown publishes one, so you can track presales and resale links programmatically.
- **Full event lineup** — with full details on, every supporting act and co-headliner on the bill, not just the artist you searched, captured as a clean array.
- **Predictable result cap** — set a `maxResults` ceiling and event rows stop exactly there, so a world-touring act with hundreds of dates can never blow past your budget.
- **No account, login, or API key** — go from an artist name to a structured dataset in a single run.

### Use Cases

**Live-Event Discovery**

- Build a city-by-city calendar of upcoming shows for a roster of artists
- Surface newly announced tour dates the moment they post
- Track which artists are touring a given country or region

**Tour & Concert Analytics**

- Reconstruct an artist's recent touring history from the past-event archive
- Compare set sizes and routing across multiple tours by date range
- Measure how many shows an act plays per year over time

**Ticketing & Resale Intelligence**

- Monitor on-sale datetimes to catch presales and general-sale drops early
- Collect ticket and offer URLs with availability status across a tour
- Map demand hotspots by cross-referencing venue geo with event density

**Artist & Fan-base Research**

- Pull follower counts and upcoming-show totals to rank artist momentum
- Track verified artist profiles and profile imagery for media databases
- Discover supporting acts and co-headliners from full event lineups

**Venue & Promoter Lead Generation**

- Build venue lists with names, cities, countries, and coordinates
- Identify which promoters and venues a touring act keeps returning to
- Target outreach by mapping venues an artist plays in a specific region

**Music Market Research**

- Quantify live-music activity by market using geo-tagged event data
- Benchmark touring frequency across a genre or label roster
- Feed concert data into dashboards, recommendation engines, and reports

### Getting Started

#### Single Artist, Upcoming Shows

The simplest run — one artist, their upcoming tour dates:

```json
{
    "artists": ["Radiohead"],
    "queryType": "events",
    "dateFilter": "upcoming"
}
```

#### Several Artists by Name and ID

Mix plain names with numeric Bandsintown IDs in one batch:

```json
{
    "artists": ["Metallica", "Tame Impala", "25874"],
    "queryType": "both",
    "dateFilter": "upcoming",
    "maxResults": 300
}
```

#### Past and Upcoming Dates with Rich Detail

Pull past and upcoming dates together, enriched with geo, lineup, and ticket offers:

```json
{
    "artists": ["Foo Fighters"],
    "queryType": "events",
    "dateFilter": "all",
    "includeEventDetails": true,
    "maxResults": 500
}
```

#### Custom Date Range

Pull only the shows inside an exact window:

```json
{
    "artists": ["Coldplay", "1234567"],
    "queryType": "events",
    "dateFilter": "custom",
    "dateFrom": "2024-01-01",
    "dateTo": "2024-12-31",
    "includeEventDetails": true,
    "maxResults": 1000
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `artists` | string\[] | `["Radiohead"]` | Artists to look up, one per line. Enter an artist name (e.g. Radiohead, Metallica) or a numeric Bandsintown artist ID (e.g. 25874). Numeric entries are treated as IDs and skip the name lookup; everything else is searched by name. |
| `queryType` | select | `Events only` | What to return per artist: just the artist profile, just their events, or both. |

#### Date Filter

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `dateFilter` | select | `Upcoming events` | Which events to include: upcoming, past, both, or a custom range. Past coverage reaches as far back as Bandsintown serves for each artist. |
| `dateFrom` | string | `null` | Start of the custom range (YYYY-MM-DD). Used only when `dateFilter` is "Custom date range". Leave empty for no lower bound. |
| `dateTo` | string | `null` | End of the custom range (YYYY-MM-DD). Used only when `dateFilter` is "Custom date range". Leave empty for no upper bound. |

#### Options & Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeEventDetails` | boolean | `false` | Enrich events with venue coordinates, full lineup, structured ticket offers, and on-sale times. Best-effort: any event whose details can't be loaded still arrives with its basic venue and ticket fields. Adds depth at the cost of run time — leave off for a fast list of events with basic venue and ticket info. |
| `maxResults` | integer | `100` | Maximum number of event rows to collect across all artists. Set to `0` for no cap (an internal safety ceiling still applies). Artist profile rows do not count against this limit. |

### Output

This actor returns two record types, distinguished by the `recordType` field. Each is documented separately below.

#### Event Record (`recordType: "event"`)

```json
{
    "recordType": "event",
    "id": "1035274821",
    "title": null,
    "url": "https://www.bandsintown.com/e/1035274821",
    "datetime": "2026-07-14T20:00:00",
    "onSaleDatetime": "2026-05-01T10",
    "description": "An evening with Radiohead",
    "artistId": "25874",
    "artistName": "Radiohead",
    "venueName": "Madison Square Garden",
    "venueCity": "New York",
    "venueRegion": "NY",
    "venueCountry": "United States",
    "venueLatitude": 40.7505,
    "venueLongitude": -73.9934,
    "lineup": ["Radiohead", "The Smile"],
    "offers": [
        { "type": "tickets", "url": "https://www.bandsintown.com/t/1035274821", "status": "https://schema.org/InStock" }
    ],
    "socialUrl": "https://www.instagram.com/radiohead"
}
```

##### Core Event Fields

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"event"` |
| `id` | string | Bandsintown event ID |
| `title` | string | Festival or billing name, on the minority of shows that have one — about 4% of events overall and up to 29% on a festival-heavy roster. `null` for regular club and arena dates. |
| `url` | string | Event page URL |
| `datetime` | string | Event start time, ISO 8601 |
| `onSaleDatetime` | string | Ticket on-sale time. Nullable — filled on enriched events wherever Bandsintown lists one. |
| `description` | string | Event description. Nullable — filled on enriched events wherever Bandsintown lists one. |
| `artistId` | string | Bandsintown ID of the queried artist |
| `artistName` | string | Name of the queried artist |

##### Venue & Location

| Field | Type | Description |
|-------|------|-------------|
| `venueName` | string | Venue name |
| `venueCity` | string | City |
| `venueRegion` | string | State or province code for US and Canadian venues (`NY`, `ON`) — all 51 US states and 13 Canadian provinces and territories. Bandsintown publishes no region outside the US and Canada, so this is `null` for venues elsewhere (roughly half the rows on a world-touring roster). |
| `venueCountry` | string | Full country name, such as "United States", "Canada" or "Germany" — never a state code. Filled on 99% of rows; blank only where Bandsintown itself serves a location it does not split into city and country. |
| `venueLatitude` | number | Latitude — filled on enriched events (best-effort, so a small share of a large run can arrive with basic fields only). |
| `venueLongitude` | number | Longitude — filled on enriched events (best-effort, so a small share of a large run can arrive with basic fields only). |

##### Tickets & Lineup

| Field | Type | Description |
|-------|------|-------------|
| `lineup` | string\[] | Every act on the bill — filled on enriched events. |
| `offers` | object\[] | Ticket offers: `type`, `url`, `status` |
| `socialUrl` | string | The artist's social profile: Facebook, Instagram, X, TikTok or YouTube. Filled on enriched events wherever the artist's page lists one — expect roughly two-thirds of events. |

#### Artist Record (`recordType: "artist"`)

Returned when `queryType` is "Artist profile only" or "Both".

```json
{
    "recordType": "artist",
    "id": "25874",
    "name": "Radiohead",
    "url": "https://www.bandsintown.com/a/25874",
    "imageUrl": "https://photos.bandsintown.com/large/25874.jpg",
    "thumbUrl": "https://photos.bandsintown.com/thumb/25874.jpg",
    "followerCount": 2841093,
    "followerCountText": "2.84M Followers",
    "upcomingEventCount": 12,
    "verified": true
}
```

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"artist"` |
| `id` | string | Bandsintown artist ID |
| `name` | string | Artist name |
| `url` | string | Artist profile URL |
| `imageUrl` | string | Full-size artist image |
| `thumbUrl` | string | Thumbnail image |
| `followerCount` | number | Bandsintown followers tracking this artist |
| `followerCountText` | string | Follower total exactly as Bandsintown displays it |
| `upcomingEventCount` | number | Number of upcoming shows |
| `verified` | boolean | Whether the profile is verified |

### Tips for Best Results

- **Use numeric IDs to skip name ambiguity** — a plain name is matched against every act Bandsintown suggests and the closest one wins, but tribute bands and fan pages can share a headliner's name. Drop the numeric Bandsintown ID instead to lock onto the exact artist every time. Anything that can't be matched with confidence is named in the run summary rather than filled with a different act.
- **Enable full event details only when you need geo or lineup** — coordinates, US and Canadian state codes, the full lineup and on-sale times arrive only with full details on, and they add run time. Leave it off for a fast tour-date list; turn it on when you're building maps or ticketing pipelines.
- **Pair `all` with a custom range for historical tour analysis** — `all` pulls upcoming dates plus as much past history as Bandsintown serves for that artist, then a `custom` window narrows to the exact tour period you're studying, so you only keep the dates that matter. Any artist whose past history stops early is named in the run summary, so you always know which rosters came back short.
- **Set a `maxResults` cap on globally-touring acts** — a single world-touring artist on `all` can return hundreds of dates. Cap it to control volume: event rows stop exactly at the number you set.
- **Artist rows are free of the result cap** — run `queryType: both` to collect every artist's profile alongside their events without the profile rows eating into your `maxResults` budget.
- **Batch your whole roster in one run** — paste every artist you track, one per line, instead of running them one at a time.
- **Start small to validate** — run a single artist with a low `maxResults` first to confirm the fields match your pipeline, then scale up.

### Pricing

**From $1 per 1,000 results** — pay only for the rows you get, with progressively lower prices for Bronze, Silver, and Gold loyalty subscribers. The table below shows the total cost for each volume at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.12 | $0.11 | $0.105 | $0.10 |
| 1,000 | $1.20 | $1.10 | $1.05 | $1.00 |
| 10,000 | $12.00 | $11.00 | $10.50 | $10.00 |
| 100,000 | $120.00 | $110.00 | $105.00 | $100.00 |

A "result" is any row in the output dataset — one per event and one per artist profile.

#### Optional event-details add-on

Turning on **event details** adds **from $3 per 1,000 enriched events** — $3.55 with no discount, $3.40 Bronze, $3.20 Silver, $3.00 Gold — for precise location (latitude/longitude and full country name, plus state or province codes on US and Canadian venues), the full event lineup, and structured ticket offers. The add-on is entirely optional: it applies only when the toggle is on, and only to events that actually get enriched (any event that comes through with just its basic fields is never charged the add-on).

Example: 1,000 events with details on = **$1.00 for the results + $3.00 for enrichment = $4.00 total** (at Gold pricing).

**No compute or time-based charges** — you pay per result, plus a small optional per-enriched-event fee when you turn on event details, and a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate live-music research, event discovery, market analysis, and lead generation. You are responsible for complying with applicable laws and Bandsintown's Terms of Service. Do not use extracted data for spam, harassment, or any illegal purpose, and be mindful of how you store and process any personal data.

# Actor input Schema

## `artists` (type: `array`):

Artists to look up, one per line. Enter an artist name (e.g. Radiohead, Metallica) or a Bandsintown numeric artist ID (e.g. 25874). Numeric entries are treated as IDs and skip the name lookup; everything else is searched by name.

## `queryType` (type: `string`):

Choose what to return for each artist: just the artist profile, just their events, or both.

## `includeEventDetails` (type: `boolean`):

Add precise location (latitude/longitude and full country name, plus the state or province code on US and Canadian venues), the full event lineup, and structured ticket offers for each event. This is best-effort on very large runs — any event whose details can't be loaded still comes through with its basic venue and ticket info. Turning this on adds a small extra per-enriched-event fee (see Pricing); leave it off for a fast list of events with basic venue and ticket info at the standard per-result price.

## `dateFilter` (type: `string`):

Filter events by date. Past coverage reaches as far back as Bandsintown serves for each artist, and any artist whose history stops early is named in the run summary. Use 'Custom range' together with the start and end dates below to pull a specific window.

## `dateFrom` (type: `string`):

Start of the custom date range (YYYY-MM-DD). Only used when 'Which events' is set to 'Custom date range'. Leave empty for no lower bound. Dates are compared against each show's local start date (the venue's own time zone), so events are kept or excluded by their date where the concert happens.

## `dateTo` (type: `string`):

End of the custom date range (YYYY-MM-DD), inclusive. Only used when 'Which events' is set to 'Custom date range'. Leave empty for no upper bound. Dates are compared against each show's local start date (the venue's own time zone), so events are kept or excluded by their date where the concert happens.

## `maxResults` (type: `integer`):

Maximum number of event rows to collect across all artists. Default 100 — increase for bigger tours, or set to 0 for no cap (an internal safety ceiling still applies). Collection stops once this number of event rows is reached. Artist profile rows do not count against this limit.

## Actor input object example

```json
{
  "artists": [
    "Radiohead"
  ],
  "queryType": "events",
  "includeEventDetails": false,
  "dateFilter": "upcoming",
  "maxResults": 100
}
```

# Actor output Schema

## `events` (type: `string`):

Table of events with date, artist, venue, city, country, and event link.

## `artists` (type: `string`):

Table of artist profiles with followers, links, and event counts.

# 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 = {
    "artists": [
        "Radiohead"
    ],
    "queryType": "events",
    "dateFilter": "upcoming",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/bandsintown-scraper").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 = {
    "artists": ["Radiohead"],
    "queryType": "events",
    "dateFilter": "upcoming",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/bandsintown-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "artists": [
    "Radiohead"
  ],
  "queryType": "events",
  "dateFilter": "upcoming",
  "maxResults": 100
}' |
apify call solidcode/bandsintown-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,solidcode/bandsintown-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bNQDCTKVg40ciRRpf/builds/jaYqON7grCgzKqhvT/openapi.json
