86,498 upcoming events from 14,921 venues in 84 metros across the US and UK β the concerts and the bookshop readings, free events included. One key for the JSON API and the MCP server.
You are helping me integrate the FindLocal Events API into my project. Follow these steps, then use the reference below β do not invent endpoints or parameters that are not in it.
- Ask me what I am building and which metro(s) I need, if I have not said.
- Read my API key from the environment variable FINDLOCAL_KEY. Never hard-code or log it. If I do not have one, tell me to create a free account at https://findlocal.community/signup and mint a key at https://findlocal.community/dashboard/keys.
- Write a small typed client for the endpoints I need, matching my project's language and HTTP library.
- Handle 401 (bad key), 429 (wait
Retry-Afterseconds, then retry) and 503 (back off). Cache responses for a few minutes β each call spends one credit from a monthly quota. - If the key is on the Free plan, render this link wherever events are displayed (the terms require it; paid plans do not): <a href="https://findlocal.community" rel="noopener">Event data by FindLocal</a>
- Show me one working request and its trimmed response before building further. Hyper-local events for 84 metros across the US and UK β concerts, readings, film screenings, talks, classes, trivia, open mics, storytimes β with venues and coordinates. REST + an MCP server, one key for both. Human docs and playground: https://findlocal.community/docs Β· OpenAPI: https://findlocal.community/openapi.json
Quickstart #
- Create a free account at https://findlocal.community/signup (no card) and mint a key at https://findlocal.community/dashboard/keys.
- Send it as a Bearer token:
curl "https://findlocal.community/api/events?city=boston&when=weekend&free=1" \
-H "Authorization: Bearer $FINDLOCAL_KEY"
- Read
data(events) andmeta(total,page,page_size). Page withpage=2. No key yet? The playground at https://findlocal.community/docs runs real queries in the browser, 5 rows a call.
Authentication #
Every /api/events, /api/events/{id} and /api/venues call needs a key: Authorization: Bearer <key> (or X-API-Key: <key>).
Keep keys server-side where you can; a key in browser code is visible to anyone. One account can hold 5 named keys β use one per app so you can revoke them separately.
The same key authorises the MCP server (https://mcp.findlocal.community/mcp).
Endpoints #
Base URL https://findlocal.community/api. JSON over HTTPS, GET only, CORS open. Responses are { "data": β¦, "meta": β¦ }.
GET https://findlocal.community/api/events
Search upcoming events. Upcoming events in one metro, filtered. Every parameter is optional; with none you get Boston, chronological. See Filters β every parameter is optional.
GET https://findlocal.community/api/events/{id}
One event. A single event by id β past and delisted events included (is_deleted).
id(required) β string
GET https://findlocal.community/api/venues
Venues in a metro. Active venues with their upcoming-event counts.
cityβ Metro slug (or name). One of:ann-arbor,atlanta,austin,baltimore,bangor,bloomington,boise,boston,brattleboro,buffalo,burlington,cape-cod,charleston,charlotte,chicago,cincinnati,cleveland,columbia-mo,columbus,dallas,denver,des-moines,detroit,duluth,fort-collins,grand-rapids,green-bay,hanover,harrisburg,hartford,hilton-head,houston,hudson-valley,indianapolis,iowa-city,jersey-shore,kansas-city,lansing,las-vegas,lincoln,london,los-angeles,madison,manchester,miami,milwaukee,minneapolis,nashville,new-haven,new-orleans,new-york,northampton,oklahoma-city,orlando,philadelphia,phoenix,pittsburgh,pittsfield,portland,portland-me,portsmouth,providence,raleigh,rochester,rockland,rutland,sacramento,salt-lake-city,san-antonio,san-diego,san-francisco,santa-barbara,seattle,sonoma,spokane,st-louis,stamford,tampa,traverse-city,tucson,washington,wenatchee,wilmington-nc,worcester. Defaultboston.regionβ Neighborhood / sub-area.qβ Substring match on the venue name.typeβ Venue type, case-insensitive: Music Venue, Performing Arts Center, Theater, Comedy Club, Bar, Nightclub, Brewery & Winery, Restaurant, Cafe, Bookstore, Library, Museum, Art Gallery, University & College, Arena & Stadium, Park & Outdoors, Community Center, Place of Worship, Market, Festival Grounds, Other.sortβ Order. One of:name,upcoming. Defaultname.limitβ Rows per page (max 500; 100 from Nov 15, 2026). Default500.pageβ 1-based page; keep going whilemeta.has_more. Default1.
Event object
id(string)title(string)description(string | null)event_date(string) β Calendar day in the venue's own time zone.start_time(string | null) β HH:MM, 24-hour, venue-local.end_time(string | null)category(string | null) β music | comedy | theater | dance | literary | film | talks | art | food_drink | family | market | workshop | fitness | sports | nightlife | community | festival | parksevent_type(array) β Type tokens as the source published them (free text).event_types(array) β Event Intelligence: what kind of event this is, from a fixed vocabulary of 44 slugs (e.g.concert,author-talk,trivia,stand-up). Empty until classified.category_confidence(number | null) β Event Intelligence: 0-1 confidence incategory. Null when the category came from keywords or a person, not the classifier.is_real_event(integer | null) β Event Intelligence: 1 = checked and is an attendable event; null = not checked yet. Rows judged not to be events (closures, deadlines, placeholders) are never served.performers(array) β Who the event is by: the bill, authors, instructors, speakers. Empty when unknown. Search it withperformer(orq).price(string | null) β Price label as published, e.g. "$18 adv / $22 door".price_amount(number | null) β Parsed lowest price in the city's local currency (USD for US metros, GBP for London); 0 = free.status(string | null) β What the source states: scheduled | cancelled | postponed | rescheduled | sold_out. Null when the source does not say.detail_page_url(string | null)ticket_page_url(string | null)image_url(string | null)city(string) β Metro name. Its currency is the currency ofprice_amount(single-event responses carry nometa.currency).region(string | null)venue_id(string)venue_name(string)venue_address(string | null)venue_lat(number | null)venue_lng(number | null)venue_url(string | null)venue_image(string | null)venue_region(string | null)venue_type(string | null) β The venue's type: Music Venue | Performing Arts Center | Theater | Comedy Club | Bar | Nightclub | Brewery & Winery | Restaurant | Cafe | Bookstore | Library | Museum | Art Gallery | University & College | Arena & Stadium | Park & Outdoors | Community Center | Place of Worship | Market | Festival Grounds | Other.venue_capacity(integer | null) β Venue capacity, when known.venue_size(string | null) β Small | Medium | Large | Unknown.author_ids(array)book_ids(array)end_date(string | null) β Last day (YYYY-MM-DD) of a multi-day run stored as one event: an exhibition, festival or trade show. Null for single-day events and for runs listed night by night (those are separate events sharingseries_id). A run whoseevent_dateis past is still upcoming untilend_date.series_id(string | null) β Groups the occurrences of one thing: every night of a residency, every week of a quiz. Stable across scrapes; filter withseries_id=.organizer(string | null) β Who puts the event on, when that is not the venue: a talk series, promoter, festival or council programme. The venue fields always describe where it happens.duplicate_of(string | null) β Set when the same show is also listed under another venue: the id of the event we keep. Such events are never in lists; by id and inupdated_sincesyncs they reportis_deleted: 1.series_count(integer) β Upcoming dates of the same recurring event at this venue.series_image(string | null) β First image in the recurring series β a fallback whenimage_urlis empty.books(array) β The books behindbook_ids(title, isbn13, cover_url, publisher, pub_yearβ¦). Absent when there are none.authors(array) β The authors behindauthor_ids(canonical_name, photo_url, bio, wikipedia_urlβ¦). Absent when there are none.is_deleted(integer) β 1 when the source stopped listing it, or it is a cross-venue duplicate (duplicate_of).updated_at(string)
Venue object
id(string)name(string)city(string)region(string | null)address(string | null)latitude(number | null)longitude(number | null)type(string | null) β One of: Music Venue | Performing Arts Center | Theater | Comedy Club | Bar | Nightclub | Brewery & Winery | Restaurant | Cafe | Bookstore | Library | Museum | Art Gallery | University & College | Arena & Stadium | Park & Outdoors | Community Center | Place of Worship | Market | Festival Grounds | Other.venue_size(string | null) β Small | Medium | Large | Unknown. Small is under 100 people, Medium 100-499, Large 500+; derived fromcapacitywhen that is known, otherwise an estimate.capacity(integer | null) β Maximum capacity (people), when a source states one: Wikidata, the venue's own website, or a venue directory. null = unknown.categories(array)url(string | null)image(string | null)image_attribution(string | null) β Credit line forimage(Wikimedia Commons / Openverse CC licenses). When present you must display it next to the image.description(string | null)upcoming(integer) β Upcoming (non-deleted) events at this venue.wikidata_id(string | null) β Matched Wikidata entity, e.g. Q123456.wikipedia_url(string | null)image_source(string | null)description_source(string | null)
Filters (GET /api/events) #
cityβ metro slug, defaultboston. 84 metros (US and UK):ann-arbor,atlanta,austin,baltimore,bangor,bloomington,boise,boston,brattleboro,buffalo,burlington,cape-cod,charleston,charlotte,chicago,cincinnati,cleveland,columbia-mo,columbus,dallas,denver,des-moines,detroit,duluth,fort-collins,grand-rapids,green-bay,hanover,harrisburg,hartford,hilton-head,houston,hudson-valley,indianapolis,iowa-city,jersey-shore,kansas-city,lansing,las-vegas,lincoln,london,los-angeles,madison,manchester,miami,milwaukee,minneapolis,nashville,new-haven,new-orleans,new-york,northampton,oklahoma-city,orlando,philadelphia,phoenix,pittsburgh,pittsfield,portland,portland-me,portsmouth,providence,raleigh,rochester,rockland,rutland,sacramento,salt-lake-city,san-antonio,san-diego,san-francisco,santa-barbara,seattle,sonoma,spokane,st-louis,stamford,tampa,traverse-city,tucson,washington,wenatchee,wilmington-nc,worcester.whenβ Date window, resolved in the metro's own time zone β or one day as YYYY-MM-DD.date_fromβ Inclusive start day (YYYY-MM-DD) of an explicit window; used whenwhenis absent. Defaults to today. A multi-day run (end_date) that started earlier but is still on is included.date_toβ Inclusive end day (YYYY-MM-DD) of an explicit window; used whenwhenis absent. Open-ended when omitted.updated_sinceβ Incremental sync: only events changed at or after this ISO-8601 instant, delisted ones included (is_deleted: 1). Pass the previous response'smeta.synced_at.catβ Comma list of category slugs.literaryalso matches everything at bookstores and libraries.freeβ Free events only. One of:1.paidβ Paid events only. One of:1.maxβ Maximum price in the city's local currency (USD for US metros, GBP for London; events with a parsed price).todβ Comma list of times of day.regionβ Neighborhood / sub-area inside the metro, e.g. Cambridge.qβ Free text, matched word by word (up to 4 words; every word must match): event title, venue name, neighbourhood/town, description, performer and author names, and linked book titles. Common words like "the" and "in" are ignored.performerβ Substring match on performer names only.series_idβ Every upcoming occurrence of one series (an event'sseries_id).authorsβ Only events with a known author on the bill. One of:1.nearβ Proximity search:<lat>,<lng>. Orders by distance and overridessort. The radius spans metros (a point between Washington and Baltimore returns both; each event'scitysays which);citythen only sets the time zone for "today", and defaults to the metro nearest the point.radius_kmβ Radius fornear(default 25, max 200). Default25.sortβdateis chronological;featuredis the site's editorial ranking. One of:featured,date. Defaultdate.pageβ 1-based page oflimitrows (100 when nolimit). Ignored by the playground server. Default1.limitβ Rows per call (max 500; 100 from Nov 15, 2026). The playground server caps this at 5 (100 signed in).venueβ A venue uuid: upcoming events at that venue (the metro comes from the venue). Category slugs forcat:music,comedy,theater,dance,literary,film,talks,art,food_drink,family,market,workshop,fitness,sports,nightlife,community,festival,parks.
Errors #
Errors are JSON: { "error": "message" }.
400β a malformed parameter.401β missing, invalid, expired or revoked key.404β unknown event id.429β per-minute rate limit exceeded, or the Free monthly quota is spent (paid plans run on into billed overage). HonourRetry-After(seconds).503β key verification is briefly unavailable; retry with backoff. The API fails closed rather than serving unmetered.
Rate limits and quotas #
Two limits apply. Both are per ACCOUNT: all of an accountβs keys share one monthly quota (REST and MCP calls alike; more keys never add calls), refilled on the 1st (UTC), and one per-minute limit.
- Free: 100 calls/month (hard stop), 30 requests/minute
- Indie: 10,000 calls/month, then $0.002 per extra call, 60 requests/minute
- Business: 75,000 calls/month, then $0.002 per extra call, 120 requests/minute
From Nov 15, 2026 every keyed call returns at most 100 rows (500 until then); page with
page=(meta.has_moreon venues). Every successful response carriesX-RateLimit-Remaining(calls left this MONTH on the account),X-RateLimit-Limit(requests per MINUTE) andX-RateLimit-Reset(Unix seconds when the minute window reopens). Each call costs one credit, cached or not. Unknown query parameters are ignored, never an error βmeta.ignored_paramsand theX-FindLocal-Warningheader list them (e.g.categoryβ usecat). On429, waitRetry-Afterseconds. For bulk work, stay under the per-minute limit and cache results β events change at most a few times a day. To keep a copy in sync, fetch the window once, then poll withupdated_since=<meta.synced_at>: only changed rows come back, delisted ones asis_deleted: 1.
Plans #
- Free: free, no card; 100 calls/month, hard stop; 30 requests/minute. For evaluating the API and personal projects.
- Indie: $9/month (launch price, locked in for life; $19/mo from Nov 15, 2026); 10,000 calls/month, then $0.002 per extra call; 60 requests/minute. For side projects and small apps.
- Business: $49/month (launch price, locked in for life; $99/mo from Nov 15, 2026); 75,000 calls/month, then $0.002 per extra call; 120 requests/minute. For production apps and agents.
- Enterprise β more than Business (custom quota, higher burst limit, invoicing): email elliot@findlocal.community.
Paid plans never stop at the quota: calls past it are billed at $0.002 each on the next invoice. Free is for evaluation and personal projects. If we see signs of production use (sustained traffic, a public deployment or commercial use), we may ask you to move to a paid plan.
Event Intelligence (
event_types,category_confidence,is_real_event, performers'entity_id/musicbrainz_id/wikidata_id, and thebooks/authorsbehind literary events) is included on every plan. Upgrade, downgrade or cancel at https://findlocal.community/dashboard/billing. Existing keys move to the new limits at once. Attribution. On the Free plan, show a visible link back wherever the data is displayed β<a href="https://findlocal.community" rel="noopener">Event data by FindLocal</a>or equivalent wording. Paid plans need no attribution. Full API terms (caching, redistribution): https://findlocal.community/terms#api.
MCP server #
Endpoint: https://mcp.findlocal.community/mcp (Streamable HTTP; OAuth 2.1 + PKCE). On first connect you paste an API key.
- Claude Code:
claude mcp add --transport http findlocal https://mcp.findlocal.community/mcp
- Cursor (
~/.cursor/mcp.json):
{
"mcpServers": {
"findlocal": {
"url": "https://mcp.findlocal.community/mcp"
}
}
}
- Claude.ai / Claude Desktop: Settings β Connectors β Add custom connector β paste the endpoint.
Event tools cost one credit per call;
get_usage,get_api_docsandget_setup_guideare free.
Widgets (no code) #
An embeddable list, calendar or map β one script tag, free, no key. The widget is inserted after the tag:
<script src="https://findlocal.community/widget.js" data-city="boston" data-view="list"></script>
Attributes: data-widget (a catalogue preset, e.g. literary-new-england), data-city (one metro or a comma list of up to 25), data-region, data-cat, data-when, data-from + data-to (YYYY-MM-DD), data-view (list | calendar | map | compact | strip β compact is a 5-event sidebar list, strip a row of 8 thumbnails; neither has filters), data-more (your full events page: compact/strip link there and open a clicked event there), data-seo="off" (no schema.org Event JSON-LD on your page; default on for list/calendar/map, off for compact/strip), data-theme (light | dark | auto), data-limit (1-300), data-height (initial px), data-max-height (px or none; default 85% of the window, 420-900 px β past it the widget scrolls inside itself), data-partner, data-authors="1" (only events with a known author), data-free="1", data-near="<lat>,<lng>" + data-radius (km, default 25; replaces the metro scope), data-filters="off" (hide the visitor filter toolbar).
Dates and prices render in the metro's own locale and currency (e.g. 24-hour times and Β£ for London).
Visitors stay on the host site: clicking an event opens a details panel inside the widget, whose only outbound link is the venue's own ticket/event page.
Live builder: https://findlocal.community/widgets.
100 calls a month free. No card.
86,498Upcoming events
51,774In the next 30 days
14,921Venues tracked
84Metros (US + UK)
Counted from the live database on Oct 25, 2026.
One GET. Real events.
Request
curl "https://findlocal.community/api/events?city=boston&when=weekend&free=1" \
-H "Authorization: Bearer $FINDLOCAL_KEY"
Response β live, trimmed
{
"data": [
{
"id": "799b5db3-bfe0-419c-9d1c-61562822047c",
"title": "Poetry Days Presents: An Evening with Victoria Chang",
"event_date": "2026-10-28",
"start_time": "19:00",
"category": "literary",
"price": "Free",
"venue_name": "Boston College",
"region": "Boston"
}
],
"meta": {
"city": "Boston",
"total": "β¦",
"page": 1
}
}
Filter by metro, date, category, price, time of day, neighborhood, text, performer β or near=lat,lng.
Hyper-local: 4,301 trivia nights, 1,803 open mics, 1,484 karaoke nights and 1,952 storytimes among 86,498 upcoming events at 14,921 venues in 84 metros across the US and UK β counted live
Ticketed events sold through Ticketmaster and its partners β no free trivia night, no bookshop readingsource
Events created on Eventbrite β and not searchable by location since February 2020source
β200M+ events listed globallyβ across 40k+ cities; no US figure publishedsource
Whatever Google shows for the query β a live search per call, up to 500 results, not a cataloguesource
Scraped Eventbrite listings plus organizer submissions
Google search results and the Places API (not affiliated with Google)source
Competitor details are as of September 2026 and may have changed; follow the source links. FindLocal's numbers are counted from the live database. Product names belong to their owners; this page is not affiliated with or endorsed by them. Something wrong? Email a correction and we'll fix it.
Pricing
Start free, no card. One key for the JSON API and the MCP server. Widgets are free.
Need more than Business β a bigger quota, a higher burst limit, invoicing, or a data licence? Email elliot@findlocal.community for an enterprise plan.
FAQ
What makes it hyper-local?
We read venues' own websites, so the catalogue has what never reaches a ticketing platform: 4,301 trivia nights, 1,803 open mics and 1,952 storytimes are upcoming right now, next to the concerts and theater.
Where does the data come from?
Straight from the source: each venue's own calendar page, re-read daily, with ticketing feeds for arena shows. Every event carries its venue, coordinates, neighborhood, category, price and a link back.
Do I need a credit card to start?
No. The free tier is 100 calls a month with no card. Sign up, create a key, make a request.
Can I try it before signing up?
Yes. The playground in the API docs runs real queries with no key, capped at a few rows per call.
Does one key cover the API and the MCP server?
Yes. The JSON API and the MCP server share one key and one monthly quota. Widgets are free and need no key at all.
What happens when I hit my limit?
On Free, requests past the monthly quota return 429 until the 1st. Paid plans never stop: calls past the quota cost $0.002 each on your next invoice. Indie is $9/month for 10,000 calls, Business $49/month for 75,000 (launch prices, locked in for life if you subscribe before Nov 15, 2026). Need more? Email elliot@findlocal.community.
What is Event Intelligence?
Every event is classified before it is published: a category, event types from a fixed vocabulary of 44, a confidence score, the performers on the bill, and a check that it is a real, attendable event (closures, deadlines and placeholder rows are filtered out). It is included on every plan.
Which cities are covered?
84 metros across the US and UK today β see the coverage map above, or run a query on any of them in Explore.
Do I have to credit FindLocal?
On the Free plan, yes: a small "Event data by FindLocal" link wherever the data appears. Paid plans need no attribution.