JSON API
Every listing page on FindLocal has a JSON twin. No key, no signup, CORS open, GET only. Base URL https://findlocal.community.
Endpoints
| Endpoint | Returns |
|---|---|
GET /api/events | Upcoming events in one city, filtered and paginated. { data: Event[], meta: { city, count, total, page, page_size } } |
GET /api/events/<uuid> | One event, including past and delisted ones. { data: Event } or 404 { error: "not found" } |
GET /api/venues | Active venues in one city with upcoming counts. { data: Venue[], meta: { city, count } } |
GET /event/<uuid>/calendar.ics | iCalendar file for one event (text/calendar) |
Quick start
# Live music in Boston this week
curl 'https://findlocal.community/api/events?city=boston&cat=music&when=week&limit=5'
# Free things in Brooklyn this weekend, evenings only
curl 'https://findlocal.community/api/events?city=new-york®ion=Brooklyn&when=weekend&free=1&tod=evening'
# Literary events in Providence
curl 'https://findlocal.community/api/events?city=providence&cat=literary'
# 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. Unknown values are ignored rather than rejected; check meta.total if a filter seems to do nothing.
| Parameter | Values | Notes |
|---|---|---|
city | Name or slug: Boston, new-york, portland-me | Defaults to Boston. All 47 metros. |
when | anytime · today · tomorrow · weekend · week · YYYY-MM-DD | Resolved in the city's time zone. weekend = upcoming Fri–Sun, week = next 7 days. Default anytime. |
cat | Comma list of slugs, or repeated (cat=music&cat=comedy) | Category slugs |
free | 1 | Only free events ($0 or labelled free) |
paid | 1 | Only ticketed events. free=1&paid=1 returns both. |
max | Number (USD) | Maximum parsed ticket price; events without a parsed price are excluded |
tod | Comma list of morning, afternoon, evening | Time of day of the start time |
region | Neighborhood label, e.g. Brooklyn, Cambridge | Exact match. Use /api/venues to see the labels a city uses. |
q | Free text, ≤ 100 chars | Matches event title and venue name |
page | 1-based | 100 events per page by default |
limit | 1–500 | Overrides the page size |
venue | Venue uuid | Upcoming events at one venue |
ids | Comma list of ≤ 200 event uuids | Bypasses every other filter; any date, delisted included |
Region vs. region group. region here is a neighborhood inside one city. Multi-metro areas such as New England are a widget concept; to cover one with the API, call it once per city.
Event fields
| Field | Type | Notes |
|---|---|---|
id | uuid | Stable event id; public page at /event/<id>, iCalendar at /event/<id>/calendar.ics |
title | string | |
description | string | null | Often an HTML fragment from the source |
event_date | YYYY-MM-DD | Plain calendar day in the venue's time zone. Do not new Date() it. |
start_time / end_time | HH:MM:SS | null | 24-hour local time |
city | string | Metro partition, e.g. "Boston", "Portland ME" |
region | string | null | Neighborhood / borough / town, e.g. "Brooklyn", "Cambridge" |
category | slug | null | One of the category slugs below |
event_type | string[] | The venue's own genre tags |
price | string | null | Raw label from the venue ("$15 adv / $20 door", "Free") |
price_amount | number | null | Parsed USD amount when we could parse one |
status | string | null | |
detail_page_url / ticket_page_url / root_url | url | null | Links on the venue's site |
image_url | url | null | |
is_deleted | 0 | 1 | 1 = the venue stopped listing it (only visible via ids= and /api/events/<id>) |
first_seen_at / last_seen_at / updated_at | ISO timestamp | When we first / last saw it on the source |
source | string | scraper_cloudflare, scraper_static, ticketmaster, seatgeek, recurring, … |
venue_id, venue_name, venue_address, venue_lat, venue_lng, venue_url, venue_type, venue_region, venue_image | Joined venue columns | |
series_count | number | > 1 when the same title has that many upcoming dates at this venue (recurring) |
series_image | url | null | First image in the series, when series_count > 1 |
Booleans are 0/1, straight from the database. /api/events never returns is_deleted: 1 rows; /api/events/<id> and ids= do, so you can render an honest "no longer listed" state.
Venue fields
| Field | Notes |
|---|---|
id | uuid; public page at /venue/<id> |
name, city, region, address | |
url | The venue's website |
description, image, type, venue_size | |
categories | string[] of category slugs |
latitude, longitude | number | null |
is_active | 0 | 1 |
upcoming | Count of upcoming non-deleted events |
/api/venues accepts city and an optional region.
Categories
| Slug | Label |
|---|---|
music | Music |
comedy | Comedy |
theater | Theater |
dance | Dance |
literary | Literary |
art | Arts & Culture |
food_drink | Food & Drink |
family | Family |
market | Markets |
workshop | Classes & Workshops |
fitness | Fitness & Wellness |
nightlife | Nightlife |
community | Community |
festival | Festivals |
parks | Parks & Outdoors |
Cities (47)
| Slug | Name | State | Time zone |
|---|---|---|---|
atlanta | Atlanta | GA | America/New_York |
austin | Austin | TX | America/Chicago |
baltimore | Baltimore | MD | America/New_York |
bangor | Bangor | ME | America/New_York |
boston | Boston | MA | America/New_York |
brattleboro | Brattleboro | VT | America/New_York |
burlington | Burlington | VT | America/New_York |
cape-cod | Cape Cod | MA | America/New_York |
charlotte | Charlotte | NC | America/New_York |
chicago | Chicago | IL | America/Chicago |
cincinnati | Cincinnati | OH | America/New_York |
dallas | Dallas | TX | America/Chicago |
denver | Denver | CO | America/Denver |
detroit | Detroit | MI | America/Detroit |
hanover | Hanover | NH | America/New_York |
hartford | Hartford | CT | America/New_York |
houston | Houston | TX | America/Chicago |
kansas-city | Kansas City | MO | America/Chicago |
las-vegas | Las Vegas | NV | America/Los_Angeles |
los-angeles | Los Angeles | CA | America/Los_Angeles |
manchester | Manchester | NH | America/New_York |
miami | Miami | FL | America/New_York |
minneapolis | Minneapolis | MN | America/Chicago |
new-haven | New Haven | CT | America/New_York |
new-york | New York | NY | America/New_York |
northampton | Northampton | MA | America/New_York |
orlando | Orlando | FL | America/New_York |
philadelphia | Philadelphia | PA | America/New_York |
phoenix | Phoenix | AZ | America/Phoenix |
pittsburgh | Pittsburgh | PA | America/New_York |
pittsfield | Pittsfield | MA | America/New_York |
portland | Portland | OR | America/Los_Angeles |
portland-me | Portland ME | ME | America/New_York |
portsmouth | Portsmouth | NH | America/New_York |
providence | Providence | RI | America/New_York |
rockland | Rockland | ME | America/New_York |
rutland | Rutland | VT | America/New_York |
sacramento | Sacramento | CA | America/Los_Angeles |
san-antonio | San Antonio | TX | America/Chicago |
san-diego | San Diego | CA | America/Los_Angeles |
san-francisco | San Francisco | CA | America/Los_Angeles |
seattle | Seattle | WA | America/Los_Angeles |
st-louis | St. Louis | MO | America/Chicago |
stamford | Stamford | CT | America/New_York |
tampa | Tampa | FL | America/New_York |
washington | Washington | DC | America/New_York |
worcester | Worcester | MA | America/New_York |
Examples
JavaScript
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()
for e in r.json()["data"]:
print(e["event_date"], e["start_time"], e["title"], "—", e["venue_name"])Paging
curl 'https://findlocal.community/api/events?city=austin&page=1'
curl 'https://findlocal.community/api/events?city=austin&page=2' # until data comes back emptyCaching, status codes, fair use
Cache-Control: public, max-age=60, s-maxage=300— cached 5 minutes at the edge, 1 minute in the browser.200with{ data };404 { error }for an unknown event id;OPTIONSanswers204for preflight.- Responses carry
X-Robots-Tag: noindex; the HTML pages are what should rank. - Free and unauthenticated. Cache on your side, keep rates reasonable, link back to the event's FindLocal page or the venue. Volume or guarantees: findlocalinternal@gmail.com.
- Every listing page advertises its JSON twin with
<link rel="alternate" type="application/json">.
Walkthrough with more examples: How to use the FindLocal Events API.