How to Use the FindLocal Events API

Reference: the up-to-date endpoint, parameter and field tables now live at /docs. This post is the walkthrough.

Update: the JSON API now requires an API key — send it as an Authorization: Bearer <key> header. There’s a free tier; get a key at /pricing. The embeddable widgets and the map endpoint stay free and keyless.

Every listing page on Find Local has a JSON twin. The same filters you click on the site — city, date, category, price, time of day, neighborhood, performer, search — work as query parameters against https://findlocal.community/api/events, and the response is the same data the page renders. It requires an API key (there’s a free tier, no card — plans and quotas at /pricing), sent as an Authorization: Bearer <key> header, and CORS is open, so you can call it from a browser, a script, a spreadsheet, or a cron job.

If you’d rather have an AI assistant do the querying, see the companion guide on connecting FindLocal to Claude, Cursor, and other assistants over MCP.

Endpoints

Endpoint Returns
GET /api/events Upcoming events in a city, filtered and paginated
GET /api/events/<uuid> One event, including past and delisted ones
GET /api/venues Active venues in a city with upcoming-event counts

Base URL: https://findlocal.community. Only GET (and OPTIONS) are supported.

Quick start

# Live music in Boston this week
curl 'https://findlocal.community/api/events?city=boston&cat=music&when=week&limit=5'

# Free things to do in Brooklyn this weekend, evenings only
curl 'https://findlocal.community/api/events?city=new-york&region=Brooklyn&when=weekend&free=1&tod=evening'

# Every active venue in Chicago
curl 'https://findlocal.community/api/venues?city=chicago'

Filtering /api/events

The parameters mirror the site’s URLs exactly: /city/boston?cat=music&when=weekend on the site is /api/events?city=boston&cat=music&when=weekend on the API.

Parameter Values Notes
city Name or slug: Boston, new-york, los-angeles Defaults to Boston. See the city list.
when anytime · today · tomorrow · weekend · week · YYYY-MM-DD Resolved in the city’s time zone. weekend is the upcoming Fri–Sun, week the next 7 days. Default anytime (everything upcoming).
cat Comma list of slugs, or repeated (cat=music&cat=comedy) music, comedy, theater, dance, art, food_drink, family, market, workshop, fitness, nightlife, community, festival, parks, literary, film, talks
free 1 Only free events ($0 or labelled free)
paid 1 Only ticketed events. free=1&paid=1 returns both.
max Number (city’s local currency) Max ticket price. Events without a parsed price are excluded.
tod Comma list of morning, afternoon, evening Time of day of the start time
region Borough / neighborhood label, e.g. Brooklyn, Cambridge Use /api/venues to see the labels a city uses
q Free text, up to 100 chars Matches event title, venue name and performer names
performer Free text, up to 100 chars Matches performer / author / instructor names only — e.g. every upcoming date for one band
authors 1 Only events with a known author on the bill (readings, signings, talks)
sort date · featured date (default) is chronological; featured is the site’s editorial ranking
near <lat>,<lng> Proximity search around a point, across metro boundaries; orders by distance and overrides sort
radius_km 1–200 Radius for near (default 25)
page 1-based 100 events per page by default
limit 1–500 Overrides the page size
venue Venue UUID Upcoming events at one venue
series_id An event’s series_id Every upcoming occurrence of one series: each night of a residency, each week of a quiz
ids Comma list of up to 200 event UUIDs Bypasses all other filters and returns any date, including delisted events. Handy for re-checking a list of events you stored.

Unknown values are ignored rather than rejected, so cat=jazz quietly matches nothing extra — check the response meta.total if a filter seems to have no effect.

Response shape

{
  "data": [ /* EventRow[] */ ],
  "meta": { "city": "Boston", "currency": "USD", "count": 5, "total": 82, "page": 1, "page_size": 5, "sort": "date" }
}

total is the full match count for the filters; count is how many rows are in this page; currency is the ISO code every price_amount in the page is in (GBP for London). /api/events?ids=… returns meta: { count } only, and /api/events/<uuid> returns { "data": {…} } or a 404 with { "error": "not found" }.

An event row looks like this (trimmed from a real response):

{
  "id": "8f9b9068-4e11-466b-a1cc-d36230d28fdd",
  "title": "Hooley Hour",
  "description": "donate to artists 5-7pm all ages",
  "event_date": "2026-09-04",
  "start_time": "17:00:00",
  "end_time": null,
  "city": "Boston",
  "region": "Cambridge",
  "category": "music",
  "event_type": ["Theater", "Music"],
  "performers": [{ "name": "The Hooley Band", "role": "headliner" }],
  "price": null,
  "price_amount": null,
  "detail_page_url": "https://www.lilypadinman.com/home/2026/hooley-hour-bs5y2-pl4db9",
  "ticket_page_url": null,
  "image_url": "https://images.squarespace-cdn.com/…/1000016764.jpg",
  "is_deleted": 0,
  "venue_id": "b7716a13-e708-4573-8445-ea786a47233e",
  "venue_name": "The Lilypad",
  "venue_address": "1353 Cambridge St, Cambridge, MA 02139",
  "venue_lat": 42.3738079,
  "venue_lng": -71.100088,
  "venue_url": "https://www.lilypadinman.com/",
  "venue_type": "Music Venue",
  "venue_region": "Cambridge",
  "series_count": 4,
  "series_image": "https://images.squarespace-cdn.com/…/1000016764.jpg",
  "source": "scraper_local",
  "first_seen_at": "2026-07-03T06:20:36.366Z",
  "last_seen_at": "2026-08-07T07:23:34.117Z",
  "updated_at": "2026-09-04T23:17:55.599Z"
}

Things worth knowing about the fields:

A venue row from /api/venues:

{
  "id": "d21997e7-3a40-4863-8ef7-ad0227d80093",
  "name": "Agganis Arena",
  "city": "Boston",
  "region": "Boston",
  "address": "925 Commonwealth Ave, Boston, MA 02215",
  "url": "https://www.agganisarena.com/",
  "description": "Agganis Arena is a versatile venue hosting sports, concerts, and events.",
  "image": "https://img.findlocal.community/venues/d21997e7-3a40-4863-8ef7-ad0227d80093.jpg",
  "image_attribution": "\"Agganis Arena Exterior\" by …, CC BY-SA 4.0 (https://commons.wikimedia.org/…)",
  "image_source": "openverse",
  "type": "Arena & Stadium",
  "venue_size": "Large",
  "capacity": 7200,
  "categories": ["music"],
  "latitude": 42.3514544,
  "longitude": -71.1176226,
  "is_active": 1,
  "upcoming": 7
}

/api/venues accepts city and optional region, type, q (name search) and sort (name or upcoming). About the venue fields:

The public venue page is https://findlocal.community/venue/<id>.

Examples

JavaScript (browser or Node)

const params = new URLSearchParams({ city: 'seattle', when: 'weekend', cat: 'comedy,music', limit: '50' });
const res = await fetch(`https://findlocal.community/api/events?${params}`);
const { data, meta } = await res.json();

console.log(`${meta.total} events this weekend`);
for (const e of data) {
  console.log(`${e.event_date} ${e.start_time ?? ''} · ${e.title} @ ${e.venue_name}`);
}

Python

import requests

r = requests.get(
    "https://findlocal.community/api/events",
    params={"city": "denver", "when": "today", "free": "1"},
    timeout=15,
)
r.raise_for_status()
body = r.json()
for e in body["data"]:
    print(e["event_date"], e["start_time"], e["title"], "—", e["venue_name"])
print(body["meta"])

Paging through everything

# Page size is 100 by default; walk `page` until data comes back empty
curl 'https://findlocal.community/api/events?city=austin&page=1'
curl 'https://findlocal.community/api/events?city=austin&page=2'

Caching, freshness, and fair use

What’s next

← All posts