# Bandsintown Scraper (`maximedupre/bandsintown`) Actor

Collect public Bandsintown concerts and artist profiles for music research and event lists. Get dates, venues, ticket links, and artist details when available. Choose artist names, IDs, cities, search terms, or Bandsintown URLs.

- **URL**: https://apify.com/maximedupre/bandsintown.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 concert events

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### 🎵 Turn Bandsintown concerts into event lists

Bandsintown Scraper helps music researchers, event planners, and developers collect public concert listings and artist profiles. Get dates, venues, ticket links, and artist details in structured rows so you can build event lists and compare artists.

- Review tour history with **[Bandsintown Past Concerts](https://apify.com/maximedupre/bandsintown/examples/bandsintown-past-concerts)**.
- Compare follower counts and public links with **[Bandsintown Artist Profiles](https://apify.com/maximedupre/bandsintown/examples/bandsintown-artist-profiles)**.
- Review venues and ticket links with **[Bandsintown Events](https://apify.com/maximedupre/bandsintown/examples/bandsintown-events)**.
- Export public music data with **[Bandsintown Scraper](https://apify.com/maximedupre/bandsintown/examples/bandsintown-scraper)**.
- Build a date list with **[Bandsintown Concerts](https://apify.com/maximedupre/bandsintown/examples/bandsintown-concerts)**.

#### 📦 Concert and artist data you can return

Choose concert events, artist profiles, or both. Concert rows include an event ID, source link, artist, start time, and venue. Ticket offers, lineups, location details, and other published fields appear when available. Artist rows include identity and public profile details, such as follower counts, links, genres, and biographies when shown.

The Actor saves the first eligible occurrence of each source event or artist. If another submitted value finds the same source item, later matches are ignored. Optional details are limited to what Bandsintown provides. Past events do not form a guaranteed complete archive.

#### ▶️ Choose how to find concerts and artists

1. Choose Events, Artist profiles, or Events and artist profiles.
2. Choose one discovery method and fill in its list: artist names, artist IDs, cities, search terms, or Bandsintown URLs.
3. Set event dates and a result limit if needed.
4. Start the run, then open the dataset to read or export the rows.

Other discovery lists are ignored. Artist names may match more than one artist; use an artist ID for an exact artist. Bandsintown URLs can point to event, artist, venue, festival, or city pages. Venue and festival pages find their listed events.

#### ⚙️ Input

**Input fields**

`resultType` and `discoveryMethod` are required. Use the list for your selected discovery method.

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Chooses `events`, `artists`, or `both`. Artist profiles describe artists found by the selected method. |
| `discoveryMethod` | string | Chooses `artistNames`, `artistIds`, `cities`, `search`, or `urls`. |
| `artistNames` | array of strings | Artist names to look up. A name may match more than one artist. |
| `artistIds` | array of strings | Numeric Bandsintown artist IDs, entered as text. |
| `cities` | array of strings | City names. Add a region or country to help select the right city. |
| `searchTerms` | array of strings | Terms used to find Bandsintown events. |
| `startUrls` | array of objects | Bandsintown event, artist, venue, festival, or city page URLs. Each object has a `url`. |
| `startUrls[].url` | string | One Bandsintown page URL. |
| `eventPeriod` | string | For artist names, IDs, and artist URLs, chooses `upcoming`, `past`, or `all` events. The default is `past`. Applies to event results; history depends on what Bandsintown makes available. |
| `startDate` | string | Keeps events on or after this local event date, in `YYYY-MM-DD` form. Applies to events for all discovery methods. Leave blank for no start date filter. |
| `endDate` | string | Keeps events on or before this local event date, in `YYYY-MM-DD` form. Applies to events for all discovery methods. Leave blank for no end date filter. |
| `maxItems` | integer | Stops after this many total events and artist profiles. Must be at least 1. Leave it empty to return all available results until the source is exhausted. |

**Default input**

This public input is copied from a successful hosted default-input run:

```json
{
  "resultType": "events",
  "discoveryMethod": "artistNames",
  "artistNames": [
    "Coldplay"
  ],
  "eventPeriod": "past",
  "maxItems": 10
}
```

#### 🧾 Output

The `results` output link opens the run's dataset. Events and artist profiles use different row shapes. Fields below are optional unless listed as required. Nested fields use dotted paths in the tables and nested objects in JSON.

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `results` | string | Link to the saved events and artist profiles in the dataset. |

**Concert events**

Required fields are `recordType`, `id`, `url`, `artist`, `datetime`, and `venue`. The artist must have `id`, `name`, and `url`; the venue must have `name`.

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | `event` for a concert event. |
| `id` | string | Bandsintown event ID. |
| `url` | string | Bandsintown event page. |
| `artist` | object | The performing artist listed for this event. |
| `artist.id` | string | Bandsintown artist ID. |
| `artist.name` | string | Published artist name. |
| `artist.url` | string | Artist profile page. |
| `title` | string | Published event or festival billing title. |
| `description` | string | Published event description. |
| `datetime` | string | Published start date and time. A time without an offset uses the venue's local time. |
| `endDatetime` | string | Published end date and time. |
| `venue` | object | Venue and published location details. |
| `venue.name` | string | Venue name. |
| `venue.address` | string | Street address. |
| `venue.city` | string | City. |
| `venue.region` | string | State or region. |
| `venue.country` | string | Country. |
| `venue.latitude` | number | Latitude. |
| `venue.longitude` | number | Longitude. |
| `venue.timezone` | string | Published timezone. |
| `lineup` | array of strings | Complete published lineup when available. |
| `offers` | array of objects | Ticket offers. May be empty when no offers are available. |
| `offers[].type` | string | Published offer type. |
| `offers[].url` | string | Ticket offer link, required within each offer. |
| `offers[].status` | string | Ticket availability reported by the source. |
| `onSaleDatetime` | string | Published ticket on-sale date and time. |
| `soldOut` | boolean | Whether the source marks the event as sold out. |
| `free` | boolean | Whether the source marks the event as free. |
| `streaming` | boolean | Whether the source lists a streaming event. |
| `streamUrl` | string | Published viewing link. |
| `promoted` | boolean | Whether Bandsintown marks the listing as promoted. |
| `rsvpCount` | integer | Source-reported RSVP count. |
| `imageUrl` | string | Published event image link. |

This complete concert row is from a successful current-beta run:

```json
{
  "recordType": "event",
  "id": "1038067255",
  "url": "https://www.bandsintown.com/e/1038067255-fear-factory-at-come-and-take-it-live",
  "artist": {
    "id": "610",
    "name": "Mushroomhead",
    "url": "https://www.bandsintown.com/a/610-mushroomhead?came_from=250&utm_medium=web&utm_source=artist_event_page&utm_campaign=artist"
  },
  "datetime": "2026-11-06T18:00:00",
  "venue": {
    "name": "Come and Take It Live",
    "city": "Austin",
    "country": "United States",
    "address": "2015 E Riverside Dr Bldg 4",
    "timezone": "America/Chicago",
    "latitude": 30.2408546,
    "longitude": -97.7288765,
    "region": "TX"
  },
  "lineup": [
    "Fear Factory",
    "Mushroomhead",
    "Nine Treasures"
  ],
  "offers": [
    {
      "url": "https://www.bandsintown.com/t/1038067255?came_from=209",
      "status": "https://schema.org/InStock"
    }
  ],
  "soldOut": false,
  "free": false,
  "streaming": false,
  "rsvpCount": 117,
  "imageUrl": "https://photos.bandsintown.com/thumb/24301502.jpeg",
  "onSaleDatetime": "2026-10-03T01",
  "promoted": true
}
```

**Artist profiles**

Required fields are `recordType` and `artist`. The artist must have `id`, `name`, and `url`.

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | `artist` for an artist profile. |
| `artist` | object | Published artist profile details. |
| `artist.id` | string | Bandsintown artist ID. |
| `artist.name` | string | Published artist name. |
| `artist.url` | string | Artist profile page. |
| `artist.imageUrl` | string | Artist image link. |
| `artist.followerCount` | integer | Source-reported follower count. |
| `artist.upcomingEventCount` | integer | Source-reported total upcoming events, which may include events outside your filters. |
| `artist.verified` | boolean | Whether Bandsintown marks the artist as verified. |
| `artist.links` | array of objects | Published website, social, and music links. |
| `artist.links[].type` | string | Site or service named by the source. |
| `artist.links[].url` | string | Artist link, required within each link object. |
| `artist.biography` | string | Published artist biography. |
| `artist.genres` | array of strings | Published music genres. |
| `artist.hometown` | string | Published hometown. |
| `artist.members` | array of strings | Published band members. |

This complete artist row is from a successful current-beta run. Its biography is the source's own text:

```json
{
  "recordType": "artist",
  "artist": {
    "id": "4027048",
    "name": "Billy Strings",
    "url": "https://www.bandsintown.com/a/4027048-billy-strings",
    "imageUrl": "https://photos.bandsintown.com/thumb/25555963.jpeg",
    "followerCount": 360742,
    "upcomingEventCount": 25,
    "verified": true,
    "links": [
      {
        "type": "Spotify",
        "url": "https://open.spotify.com/artist/1ZN1c1qWEGZNX1pGeKCPpf"
      },
      {
        "type": "iTunes",
        "url": "https://itunes.apple.com/us/artist/billy-strings/727659624"
      },
      {
        "type": "YouTube",
        "url": "https://www.youtube.com/user/Billystrings"
      },
      {
        "type": "Amazon",
        "url": "https://music.amazon.com/artists/B01FTCS8E8"
      },
      {
        "type": "Shazam",
        "url": "https://www.shazam.com/artist/-/727659624"
      },
      {
        "type": "Soundcloud",
        "url": "https://soundcloud.com/billystrings"
      },
      {
        "type": "Instagram",
        "url": "https://www.instagram.com/billystrings/"
      },
      {
        "type": "Tiktok",
        "url": "http://tiktok.com/@billystringsofficial"
      },
      {
        "type": "Facebook",
        "url": "https://www.facebook.com/billystrings1/"
      },
      {
        "type": "Twitter",
        "url": "https://x.com/BillyStrings"
      },
      {
        "type": "Official",
        "url": "http://www.billystrings.com/"
      },
      {
        "type": "Store/Merch",
        "url": "https://billystringsstore.com/"
      },
      {
        "type": "Hypebot",
        "url": "https://concerts.hypebot.com/artist/b/4027048-billy-strings"
      }
    ],
    "biography": "So Much For Goodbyes, the highly anticipated new album from Billy Strings, is set for release on August 28 via Reprise Records. Pre-order your copy today. Recorded in Nashville, the album features Strings and his longtime band—Billy Failing (banjo, vocals), Royal Masat (bass, vocals), Jarrod Walker (mandolin, vocals) and Alex Hargraves (fiddle)—as well as additional contributions from Mickey Raphael (bass harmonica), Paul Franklin (pedal steel), Alison Krauss (backing vocals), Bryan Sutton (guitar), Alwyn Robinson (drums), Del McCoury (backing vocals), Tim O’Brien (backing vocals), Chris Henry (backing vocals), Lindsay Lou (backing vocals) and Dan Taminski (backing vocals). Produced by Billy Strings & T Bone Burnett.",
    "genres": [
      "Country",
      "Americana",
      "Guitar Virtuoso",
      "Jam Bands",
      "Bluegrass",
      "Folk",
      "Psychedelic Rock"
    ],
    "hometown": "Nashville, Tennessee",
    "members": [
      "Billy Failing",
      "Jarrod Walker",
      "William Apostol (Billy Strings)",
      "Alex Hargreaves",
      "Royal Masat"
    ]
  }
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. One concert event saved to the dataset is one charged concert event. One saved artist profile is one charged artist profile. When you choose both, each saved row counts under its own event type. See the Store pricing panel for the current rates.

#### 🔌 Integrations

Read the saved dataset through the Apify API or export it with Apify's dataset tools. Use event and artist IDs to join your saved data in your own workflow.

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I get every past concert for an artist?

Choose `past` or `all` for artist names, artist IDs, or artist URLs. The Actor returns the history Bandsintown makes available. It cannot promise a complete tour archive.

##### Why does an artist name match more than one artist?

Different artists can share a name. Use a numeric Bandsintown artist ID when you need an exact artist.

##### Do date filters use my timezone?

No. Start and end dates use the event's local date. They apply to event results for every discovery method.

##### Can I mix discovery methods in one run?

Choose one discovery method per run. You can submit several values of that kind. Other discovery lists are ignored.

##### What happens when the same concert or artist is found twice?

The Actor saves the first eligible occurrence and ignores later matches from other submitted values. A saved row does not gather evidence from later matches.

##### What happens when I leave the result limit empty?

It returns all available results until the source is exhausted. Set `maxItems` to limit the combined number of events and artist profiles.

##### Can I buy tickets or get alerts?

The Actor returns published ticket links and details when available. It does not buy tickets, reserve seats, track changes, or send alerts.

##### Do I need a Bandsintown login or API key?

No. The Actor collects supported public data without a buyer login or API key.

##### What is Bandsintown data in this Actor?

It is public concert and artist profile data from Bandsintown. The Actor does not return data from other music platforms. Optional fields appear only when available from the source.

### 📝 Changelog

**v0.0** (04-10-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~bandsintown/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Fever Events Scraper](https://apify.com/maximedupre/fever-events) collects Candlelight concerts and other local experiences with published dates, venues, and prices.
- [YouTube Music Scraper](https://apify.com/maximedupre/youtube-music-scraper) collects song, album, and artist metadata to add music context to artist research.
- [Bandsintown Scraper](https://apify.com/lexis-solutions/bandsintown-scraper) collects event and artist data for another approach to concert lists.
- [Bandsintown Scraper](https://apify.com/solidcode/bandsintown-scraper) collects artist tour dates with venue locations and ticket links for tour research.
- [Bandsintown Scraper](https://apify.com/hoholabs/bandsintown-scraper) looks up artist information and upcoming events by artist name or ID.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `resultType` (type: `string`):

Return concert events, artist profiles, or both. Profiles describe artists found through your chosen discovery method.

## `discoveryMethod` (type: `string`):

Choose one way to find Bandsintown data. Use Bandsintown URLs for event, artist, venue, festival, or city pages.

## `artistNames` (type: `array`):

Enter one or more artist names. Names can match more than one artist; use Artist IDs to select an exact artist.

## `artistIds` (type: `array`):

Enter one or more Bandsintown numeric artist IDs as text.

## `cities` (type: `array`):

Enter one or more city names. Add a region or country to help find the right city, such as Austin, Texas, USA.

## `searchTerms` (type: `array`):

Enter one or more terms to find Bandsintown events.

## `startUrls` (type: `array`):

Enter one or more Bandsintown event, artist, venue, festival, or city page URLs. Venue and festival pages find their listed events.

## `eventPeriod` (type: `string`):

For artist names, artist IDs, and artist URLs, choose upcoming events, past events, or both. Past events depend on the history Bandsintown makes available. Applies to Events and Events and artist profiles.

## `startDate` (type: `string`):

Keep events on or after this date, using the event’s local date. Applies to Events and Events and artist profiles for every discovery method. Leave blank for no start date filter.

## `endDate` (type: `string`):

Keep events on or before this date, using the event’s local date. Applies to Events and Events and artist profiles for every discovery method. Leave blank for no end date filter.

## `maxItems` (type: `integer`):

Stop after this many total records, counting events and artist profiles. Leave blank to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "resultType": "events",
  "discoveryMethod": "artistNames",
  "artistNames": [
    "Coldplay"
  ],
  "eventPeriod": "past",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (type: `string`):

Open the result rows in the dataset.

# 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 = {
    "resultType": "events",
    "discoveryMethod": "artistNames",
    "artistNames": [
        "Coldplay"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/bandsintown").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 = {
    "resultType": "events",
    "discoveryMethod": "artistNames",
    "artistNames": ["Coldplay"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/bandsintown").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 '{
  "resultType": "events",
  "discoveryMethod": "artistNames",
  "artistNames": [
    "Coldplay"
  ],
  "maxItems": 10
}' |
apify call maximedupre/bandsintown --silent --output-dataset

```

## MCP server setup

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

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/shHQcdhqGZLPydLfl/builds/lEXYZsDyF4ixIPhcr/openapi.json
