Shotgun APIshotgun.live ↗
Access upcoming music events, ticket prices, venue details, and artist data from Shotgun.live via 3 endpoints covering cities worldwide.
What is the Shotgun API?
The Shotgun.live API provides 3 endpoints for querying music events across cities worldwide, including listing upcoming events with get_events, running full-text searches with search_events, and retrieving per-event details — venue address with coordinates, ticket offers, performer lineup, and schedule — with get_event_detail. It covers dance, electronic, and other music genres on the Shotgun platform.
curl -X GET 'https://api.parse.bot/scraper/da664d42-1552-4c38-a1d9-1ca0909c41f6/get_events?city=new-york&date=2026-07-13&page=0&genre=afro' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace shotgun-live-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Shotgun Events SDK — discover music events by city, search, and drill into details."""
from parse_apis.shotgun_live_api import Shotgun, Genre, EventNotFound
client = Shotgun()
# Browse upcoming dance events in New York
for event in client.city("new-york").events(genre=Genre.DANCE, limit=5):
print(event.name, event.venue, event.price)
# Search for techno events globally
result = client.cities.search(query="techno", limit=3).first()
if result:
print(result.name, result.city, result.min_ticket_price, result.currency)
# Drill into a specific event for full details
event = client.city("new-york").events(genre=Genre.HOUSE, limit=1).first()
if event:
detail = event.details()
print(detail.name, detail.venue, detail.address)
for performer in detail.performers:
print(f" Performer: {performer.name}")
for offer in detail.offers:
print(f" Ticket: {offer.name} - {offer.price} {offer.currency}")
# Handle event not found
try:
missing = client.city("new-york").events(limit=1).first()
if missing:
missing_detail = missing.details()
print(missing_detail.start_date, missing_detail.end_date)
except EventNotFound as exc:
print(f"Event not found: {exc}")
print("exercised: city.events / cities.search / event.details")
List upcoming music events for a city, optionally filtered by genre and start date. Results are paginated; page 0 is the default first page. Events include name, venue, date, price, and genre tags.
| Param | Type | Description |
|---|---|---|
| cityrequired | string | City slug (e.g. 'new-york', 'paris', 'london'). Use slugs from the areas-by-country reference. |
| date | string | Start date filter in ISO format YYYY-MM-DD. Omit to show all upcoming events from today. |
| page | integer | Page number for pagination, starting at 0. |
| genre | string | Genre slug to filter events. Omit to show all genres. |
{
"type": "object",
"fields": {
"city": "string, city slug used",
"date": "string or null, date filter used",
"page": "integer, current page number",
"genre": "string or null, genre filter used",
"events": "array of event objects with slug, name, venue, start_date, local_time, price, tags, type, url",
"has_more": "boolean indicating if more pages are available",
"total_count": "integer or null, total upcoming events for this city/genre"
},
"sample": {
"data": {
"city": "new-york",
"date": "2026-07-12",
"page": 0,
"genre": "dance",
"events": [
{
"url": "https://shotgun.live/en/events/tobehonest-the-summer-club",
"name": "Tobehonest @ The Summer Club",
"slug": "tobehonest-the-summer-club",
"tags": [
"Tech House",
"Edm",
"Latin"
],
"type": "event",
"price": "$14.99",
"venue": "The Summer Club",
"local_time": "2:00 PM",
"start_date": "2026-07-12T18:00:00.000Z"
}
],
"has_more": true,
"total_count": 127
},
"status": "success"
}
}About the Shotgun API
Event Listings by City and Genre
The get_events endpoint accepts a city slug (e.g. new-york, paris, london), an optional ISO date string to set a start date filter, an optional genre slug, and a page integer for pagination starting at 0. Each event object in the response includes slug, name, venue, start_date, local_time, price, tags, type, and a direct url. The response also returns has_more to indicate additional pages and total_count for the total number of upcoming events matching your city and genre filters.
Full-Text Search
search_events accepts a free-text query and returns three parallel result sets: matching events (with fields like id, name, slug, start_time, end_time, timezone, venue, city, country_code, and min_ticket_p), matching artists (with id, name, slug, avatar, and total_following), and matching organizers (with id, name, slug, logo, and total_following). This makes it useful for finding events by artist name, venue, or keyword across all cities at once.
Event Detail
get_event_detail takes an event_slug — available from the slug field returned by either listing or search endpoints — and returns the full event record. This includes a structured offers array with ticket offer name, price, currency, and availability; the venue's address, latitude, and longitude coordinates; end_date in ISO datetime format; country code; and the canonical url. This endpoint is the right choice when you need pricing details or geocoordinates for a specific event.
The Shotgun API is a managed, monitored endpoint for shotgun.live — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when shotgun.live changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official shotgun.live API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a city-specific event calendar filtered by genre using
get_eventswithcityandgenreslugs. - Display ticket price ranges and availability for a given event using the
offersarray fromget_event_detail. - Geocode event venues by extracting
latitudeandlongitudefromget_event_detailfor map-based UIs. - Search for all upcoming events featuring a specific artist using
search_eventsand the returnedartistsarray. - Track event organizer follower counts by parsing the
total_followingfield fromsearch_eventsorganizer results. - Paginate through all dance events in a city to build an aggregated dataset using the
pageparameter andhas_moreflag. - Compare minimum ticket prices across cities by querying
min_ticket_pfromsearch_eventsevent results.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Shotgun.live have an official developer API?+
How does pagination work in `get_events`, and how do I know when I've reached the last page?+
page parameter starts at 0. Each response includes a has_more boolean — when it is false, you have reached the last page. The total_count field, when present, tells you how many total events match your city and genre filters.Does `search_events` support filtering by city, genre, or date?+
search_events accepts only a free-text query string; it does not support filtering by city, genre, or date range within the search call. For filtered listings, use get_events with its city, genre, and date parameters instead.Does the API return performer or artist lineup details for individual events?+
get_event_detail endpoint description references performers in its description, but the documented response fields cover offers, address, coordinates, dates, and venue. Artist lineup fields are not explicitly listed in the current response schema. You can fork this API on Parse and revise it to add performer extraction from the event detail response.Does the API cover past events or only upcoming ones?+
get_events is documented to list upcoming events, and the optional date parameter sets a start date filter going forward. Historical event data is not covered by the current endpoints. You can fork this API on Parse and revise it to add a historical events endpoint if that data is accessible on the source.