Songkick Scraper - Concert & Event Calendar
Pricing
from $1.20 / 1,000 event records
Songkick Scraper - Concert & Event Calendar
Scrape Songkick concert and event calendars: upcoming and past dates, venues, cities, artists, ticket availability and tour info across 100+ countries. Search by artist, venue or location, or paste event links. Incremental monitoring with NEW, UPDATED, REAPPEARED, EXPIRED, resume and MCP export.
Pricing
from $1.20 / 1,000 event records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
2
Bookmarked
11
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Songkick Scraper: Concerts, Tour Dates & Ticket Availability
Songkick Scraper turns Songkick into structured concert data. Get date and time, venue with full address and coordinates, artist and support acts, ticket availability and vendors, tour name and venue capacity for concerts and festivals across 100+ countries. Search by artist, venue or city, or paste any Songkick link, then export to JSON, CSV or Excel, or pull results straight into your app through the API.
Why This Scraper?
- Any surface, one schema: search results, artist tour dates, venue calendars, metro-area calendars and festival listings all come back in the same event record shape.
- Rich location data: venue name, street address, city, region, postal code, country and coordinates arrive with every calendar event, not just on detail pages.
- Ticket and tour detail on demand: switch on a per-event detail read to add ticket availability, ticket vendors and link, tour name, doors time and venue capacity.
- Artist, venue and city search: resolve a keyword to the top artist, venue or metro area and read its upcoming calendar, or search upcoming and past events directly.
- Incremental monitoring: recurring runs against the same search or links return only what changed, tagged NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED, so you never re-pay for events you already have.
- Resume support: point a run at a previous run or dataset and it skips every event already collected there.
- Multi-value URL mode: paste any mix of artist, venue, metro-area, festival, calendar, search or single-event links in one run.
Use Cases
- Concert listing sites and apps: pull tour dates, venues and ticket links to power your own event calendar or app.
- Ticket availability monitoring: run Incremental mode on a search or artist page to catch new on-sale dates and sold-out changes.
- Artist and label tour tracking: watch an artist's gigography for new tour announcements and cancellations.
- Music industry research: build datasets of venue capacities, ticket prices and touring patterns across cities and countries.
- Local event aggregation: collect every upcoming concert in a metro area for a local guide or newsletter.
Data You Get
Sample shape, values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
eventId (also recordId) | "00000000" |
url | https://www.songkick.com/concerts/00000000-sample-artist-at-sample-arena |
title | Sample Artist at Sample Arena |
startDate / endDate | 2027-01-15T19:30:00 / 2027-01-15 |
eventStatus | scheduled (also cancelled, postponed, rescheduled) |
eventType | concert or festival |
headliner / artistName | Sample Artist |
performers | [{"name": "Sample Artist", "url": "https://www.songkick.com/artists/00000000-sample-artist", "genres": ["indie", "rock"]}, {"name": "Support Act", "url": null, "genres": []}] |
artistGenres | ["indie", "rock"] |
venueName | Sample Arena |
venueStreet / venueCity | 1 Sample Road / Sample City |
venueRegion / venuePostalCode / venueCountry | ST / 00000 / US |
venueLatitude / venueLongitude | 40.7000 / -73.9000 |
venueCapacity | 20000 |
metroAreaName | Sample City, ST, US |
locationText | Sample Arena, Sample City, ST, US |
ticketAvailability | in_stock (also out_of_stock, sold_out) |
ticketVendors | [{"vendor": "Sample Ticket Vendor", "saleStatus": "On sale now"}] |
ticketUrl | https://www.songkick.com/tickets/00000000 |
tourName / doorsTime | Sample Tour / 18:30 |
eventAttendanceMode | offline, online or mixed |
ticketPriceMin / ticketPriceCurrency | 35.0 / USD (only when a vendor has attached a price) |
ticketPriceMax | 35.0 (only when a vendor has attached a price) |
changeType | NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED (Incremental mode only) |
raw | the underlying source data for the record: the full structured event block on calendar and detail pages, a shorter summary on a thin search result |
Every record also carries a constant kind of event, plus artistUrl, venueUrl and metroAreaUrl links, a short description and an imageUrl, and, in Incremental mode, changedFields, firstSeenAt and lastSeenAt. An Events or Past events search result starts thin (title, date, a supportActs text line and locationText) until Fetch event details reads the event's own page and fills in venue, geo, performers and ticket fields; an Artists, Venues or Locations search instead resolves straight to a calendar page and already returns full data. metroAreaName and venueUrl come from artist, venue, metro-area, gigography and venue-calendar pages; a single pasted event link leaves locationText, metroAreaName and venueUrl empty even with details fetched.
How to Use
- Pick a Mode:
search(keyword) orurl(paste Songkick links). - In Search mode, enter a Search query and pick a Search type to control what the keyword resolves to. In URL mode, paste one or more Songkick links.
- Turn Fetch event details on or off, and set Max items to cap run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Search for upcoming events by keyword:
{"mode": "search","query": "the killers","searchType": "events","maxItems": 50}
Resolve a keyword to an artist and read its tour dates:
{"mode": "search","query": "beyonce","searchType": "artists","maxItems": 50}
Paste Songkick links, mixed types supported (links shown are illustrative placeholders):
{"mode": "url","urls": ["https://www.songkick.com/metro-areas/00000-sample-region","https://www.songkick.com/artists/00000000-sample-artist/gigography","https://www.songkick.com/concerts/00000000-sample-artist-at-sample-arena"],"maxItems": 200}
Supported link shapes (URL mode). Each row below is read live; the default list holds one example of every row.
| Link shape | Example | Result |
|---|---|---|
Metro-area calendar (also ?page=N, id-only /metro-areas/4120, /en/ prefix) | https://www.songkick.com/metro-areas/4120-us-atlanta | upcoming events, walked forward |
| Metro-area gigography | https://www.songkick.com/metro-areas/4120-us-atlanta/gigography | past events |
Artist page, id-only, /calendar | https://www.songkick.com/artists/10158736-bella-poarch | the artist's upcoming events |
| Artist gigography | https://www.songkick.com/artists/10158736-bella-poarch/gigography | past events (the site has no page 2, so the walk stops after the first page) |
Venue page, ?page=N, /calendar | https://www.songkick.com/venues/10960-georgia-theatre | upcoming events |
| Venue gigography | https://www.songkick.com/venues/10960-georgia-theatre/gigography | past events |
| Concert (slug or id-only) | https://www.songkick.com/concerts/43055252-breaking-benjamin-at-ameris-bank-amphitheatre | one event record |
| Festival series | https://www.songkick.com/festivals/3760879-gaelic-storm | the festival's events |
| Festival instance (slug or id-only) | https://www.songkick.com/festivals/3760879-gaelic-storm/id/43437118-gaelic-storm-2026 | one event record |
| Search: events / past events | https://www.songkick.com/search?query=the+killers&type=events | matching events, paged |
| Search: artists / venues / cities | https://www.songkick.com/search?query=beyonce&type=artists | resolves to the top match and walks its upcoming events |
Behaviour change: in URL mode, leaving the links field untouched (or omitting urls) now scrapes one example of each shape above instead of nothing; Max items (default 20) still caps the run. Pass "urls": [] to read nothing. Events already read from an earlier link in the same run are not repeated.
Monitor a search for new, changed and expired events:
{"mode": "search","query": "the killers","searchType": "events","incrementalMode": true,"emitExpired": true,"maxItems": 0,"maxPages": 0}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/songkick-concert-calendar-scraper").call(run_input={"mode": "search", "query": "the killers", "searchType": "events"})for event in client.dataset(run["defaultDatasetId"]).iterate_items():print(event["title"], event["startDate"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/songkick-concert-calendar-scraper').call({ mode: 'search', query: 'the killers', searchType: 'events' });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
How Max items and Max pages shape a run
Max items is the run-wide stop; Max pages bounds how far each individual artist, venue, location or search is walked before that scope gives up, and defaults wide open so Max items is normally the only cap you feel. In URL mode, Max items is split evenly across every pasted link, so five links share a 200-item budget 40 each; a link that finds fewer events than its share does not hand the unused part to the next link.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips every event already collected there, so you don't pay twice. - Incremental mode (
incrementalMode) is for running the same search or link set again and again (daily, for example) and getting back only what changed. The first run marks every eventNEW. Later runs compare against the stored baseline: a changed event isUPDATED(withchangedFields), an unchanged one is suppressed and not billed unlessemitUnchangedis on.EXPIREDis not a default behavior: an event is only tombstoned asEXPIREDonce a run has scanned its whole scope to a natural end (not resumed, not stopped early by Max items or Max pages, and it read at least one event) withemitExpiredon. Only an event tombstoned that way can later come back asREAPPEARED.stateKeynames or shares the stored state; leave it empty and the actor derives one from the search or link settings. An event isUPDATEDwhen any returned field changes; list order (for example performers) never counts.ignoreFieldsForChangesexcludes extra fields from change detection andchangedFields: use a plain field name or a dotted path such asperformers.urlto ignore one key inside every list item. Ignored fields are still returned in the output. Nothing is excluded by default. With Incremental mode off, output is exactly as before.
Send results into your apps (MCP connectors)
You can optionally pipe results into apps you already use via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search finds concerts and events by keyword. url reads specific Songkick pages you paste. |
query | string | the killers | Search mode: a keyword such as an artist, venue or city name. |
searchType | string | events | Search mode: events, past_events, artists, venues or cities. Events and Past events return matching concerts and festivals directly; the others resolve the keyword to the top entity and return its calendar. |
urls | array of strings | one live example of each supported link shape (22 links; the prefill adds one more accepted variant, the locale-prefixed /en/metro-areas/... metro link, which resolves to the same page as the plain metro link and so is not in the default list) | URL mode: Songkick pages to read, one per line. Artist, venue, metro-area, festival, gigography, venue calendar and search links are walked forward; a single concert or festival date link is read as one record. |
fetchDetails | boolean | true | Read each event's own page to add ticket availability, ticket vendors and link, tour name, doors time and venue capacity. Adds a per-event surcharge. |
maxItems | integer | 20 | Stop after this many events. 0 means no limit. |
maxPages | integer | 0 | Upper bound on pages read per artist, venue, location or search. 0 defaults it wide open, so Max items is normally the only cap that stops a run early. |
resumeFromRunId | string | (none) | A previous run or dataset ID to continue without returning events already collected there. |
ignoreFieldsForChanges | array | [] | Incremental mode only. Field names (or dotted paths such as performers.url) to exclude from UPDATED change detection and changedFields. Ignored fields stay in the output. |
incrementalMode | boolean | false | Recurring monitoring: the first run marks every event NEW; later runs emit only NEW, UPDATED and, once eligible, REAPPEARED events, plus EXPIRED when enabled. |
stateKey | string | (none) | Optional name for a monitoring campaign so its state stays stable, or to deliberately share state across runs. |
emitUnchanged | boolean | false | Also return events that have not changed since the last run, marked UNCHANGED. Returns and bills extra rows. |
emitExpired | boolean | false | Also return events tracked before but no longer found, marked EXPIRED. Only produced after a run fully scans the tracked search or links to a natural end. |
mcpConnectors | array of strings | (none) | Optional MCP connectors to receive the results (see the section above). |
notionParentPageUrl | string | (none) | Parent Notion page for the Notion connector export. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
proxyConfiguration | object | no default (prefill: {"useApifyProxy": true}) | Apify Proxy settings. Requires a plan with proxy access. |
Output Example
Sample shape, values are illustrative placeholders, not from a live listing.
{"kind": "event","recordId": "00000000","eventId": "00000000","url": "https://www.songkick.com/concerts/00000000-sample-artist-at-sample-arena","title": "Sample Artist at Sample Arena","startDate": "2027-01-15T19:30:00","endDate": "2027-01-15","eventStatus": "scheduled","eventType": "concert","headliner": "Sample Artist","performers": [{"name": "Sample Artist","url": "https://www.songkick.com/artists/00000000-sample-artist","genres": ["indie", "rock"]},{"name": "Support Act","url": null,"genres": []}],"artistName": "Sample Artist","artistUrl": "https://www.songkick.com/artists/00000000-sample-artist","artistGenres": ["indie", "rock"],"venueName": "Sample Arena","venueStreet": "1 Sample Road","venueCity": "Sample City","venueRegion": "ST","venuePostalCode": "00000","venueCountry": "US","venueLatitude": 40.7,"venueLongitude": -73.9,"venueCapacity": 20000,"venueUrl": "https://www.songkick.com/venues/00000000-sample-arena","metroAreaName": "Sample City, ST, US","metroAreaUrl": "https://www.songkick.com/metro-areas/00000-sample-region","locationText": "Sample Arena, Sample City, ST, US","description": "Sample Artist at Sample Arena at 2027-01-15T19:30:00","imageUrl": "https://images.sk-static.com/images/media/profile_images/artists/00000000/huge_avatar","ticketAvailability": "in_stock","ticketVendors": [{"vendor": "Sample Ticket Vendor","saleStatus": "On sale now"}],"ticketUrl": "https://www.songkick.com/tickets/00000000","tourName": "Sample Tour","doorsTime": "18:30","organizerName": "Sample Artist","organizerUrl": "https://www.songkick.com/concerts/00000000-sample-artist-at-sample-arena","eventAttendanceMode": "offline","ticketPriceMin": 35.0,"ticketPriceMax": 35.0,"ticketPriceCurrency": "USD","raw": {}}
Output views
The dataset has three views in the Apify Console: Events (all event fields), Event details (ticket availability, vendors, price, tour name, doors time, venue capacity and organizer) and Changes (incremental) (changeType, changedFields, firstSeenAt, lastSeenAt). Every field in the sample above is declared in the dataset schema, so exports to CSV or Excel have stable columns.
Plan Requirement
A residential proxy is not required: the default Apify Proxy setting (datacenter) returned real Songkick pages for every link shape listed above, so the prefilled proxy configuration is what you should use. The actor rotates to a fresh connection automatically when one fails, and on a paid plan it can step up to a stronger connection on its own if a page is refused. Proxy access itself is needed: Apify free plans do not include proxies at all or residential access. If your plan has no proxy access, the run says so and continues on a backup connection where it can. If no page could be loaded the run fails with one of these messages instead of returning an empty dataset:
The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required: https://apify.com/pricing. If you entered your own proxy URLs, check that their credentials are valid.No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Songkick pages. Upgrade at https://apify.com/pricing or supply your own proxy URLs, then try again.Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later.
When a free-plan run falls back, the log shows: "The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable."
FAQ
How much does it cost?
You pay per event returned, plus a smaller detail surcharge when Fetch event details adds ticket, tour and venue capacity data. Live rates: $0.002 per event returned (dataset item) and $0.0008 per event for the detail-enrichment surcharge when Fetch event details is on, plus a one-time $0.08 actor start charge on the Free plan (the Pricing tab is authoritative and rates vary by plan tier). Use Max items to cap the cost of any run.
Is it legal to scrape Songkick?
This actor collects only publicly available concert and event information. You are responsible for how you use it: follow Songkick's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Event facts such as dates, venues and lineups are generally not protected the way original written content is, but check before republishing descriptions, images or ticket vendor data at scale.
Can I get only new or changed events on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only NEW and UPDATED events (plus EXPIRED when Emit expired is on, and REAPPEARED for an event that an earlier Emit expired run had marked EXPIRED), and unchanged events are not billed unless you turn on Emit unchanged.
Why is venue address or ticket info missing from some events?
Events and Past events search results start thin: title, date, location text and a support-acts line. With Fetch event details on (the default), each event's own page is read once more to add venue address, geo, performers, ticket availability and tour info. Turn it off to skip that extra read and its surcharge, and you'll get only the fields the list or calendar page already carried. Artists, Venues and Locations searches resolve straight to a calendar page and already return full data either way.
Why did my run fail instead of returning an empty dataset?
The run fails with a clear message when nothing could be read at all (zero events and at least one page refused or unreadable), when an Artists, Venues or Locations search finds no matching entity, or when there is no query and no valid link. A genuinely empty search still succeeds with zero events, and one unreadable page among otherwise successful ones does not fail the run. Run it again in a few minutes if the site refused every request.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
๐ More scrapers you might like
Pair this actor with these related scrapers from the same team:
| ๐งฉ Bandsintown Scraper Scrape Bandsintown concert and festival dates: artist tour calendars, venue profiles... | โ๏ธ Pollstar Scraper Scrape Pollstar upcoming concerts and tour dates: play date, venue with full address and... |
| โ๏ธ Concert Archives Scraper Scrape Concert Archives concert and tour history: past and upcoming dates, venues... | โฝ Eventim Scraper Scrape CTS Eventim Germany and EU event catalogue: concerts, festivals, comedy, sports... |
| ๐งฉ Viagogo Scraper Scrape Viagogo events by artist, production, venue, city, category, or URL. Extract event... | ๐งฉ Ticketmaster Scraper Discover and scrape Ticketmaster events across the US, UK, Australia and Canada. Search... |
๐ Browse all abotapi scrapers
๐ฌ Support
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com.
- โญ Enjoying it? A quick review on the actor page helps other users find it.