cd /news/ai-agents/us-and-uk-local-events-api Β· home β€Ί topics β€Ί ai-agents β€Ί article
[ARTICLE Β· art-157345] src=findlocal.community β†— pub= topic=ai-agents verified=true sentiment=Β· neutral

US and UK local events API

FindLocal launched an events API covering 86,498 upcoming events from 14,921 venues in 84 metros across the US and UK, served as a JSON REST API and an MCP server under a single API key. The service requires a Bearer token for its /api/events, /api/events/{id} and /api/venues endpoints, meters calls against a monthly credit quota, and requires Free-plan users to display an "Event data by FindLocal" attribution link. A free account at findlocal.community/signup issues up to 5 named keys per account, and a browser playground runs real queries at 5 rows per call.

read17 min views2 publishedOct 25, 2026
US and UK local events API
Image: source

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.

  1. Ask me what I am building and which metro(s) I need, if I have not said.
  2. 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.
  3. Write a small typed client for the endpoints I need, matching my project's language and HTTP library.
  4. Handle 401 (bad key), 429 (wait Retry-After seconds, then retry) and 503 (back off). Cache responses for a few minutes β€” each call spends one credit from a monthly quota.
  5. 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>
  6. 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 #

  1. Create a free account at https://findlocal.community/signup (no card) and mint a key at https://findlocal.community/dashboard/keys.
  2. Send it as a Bearer token:
curl "https://findlocal.community/api/events?city=boston&when=weekend&free=1" \
-H "Authorization: Bearer $FINDLOCAL_KEY"
  1. Read data (events) and meta (total, page, page_size). Page with page=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. Default boston.
  • 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. Default name.
  • limit β€” Rows per page (max 500; 100 from Nov 15, 2026). Default 500.
  • page β€” 1-based page; keep going while meta.has_more. Default 1.

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 | parks
  • event_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 in category. 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 with performer (or q).
  • 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 of price_amount (single-event responses carry no meta.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 sharing series_id). A run whose event_date is past is still upcoming until end_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 with series_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 in updated_since syncs they report is_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 when image_url is empty.
  • books (array) β€” The books behind book_ids (title, isbn13, cover_url, publisher, pub_year…). Absent when there are none.
  • authors (array) β€” The authors behind author_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 from capacity when 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 for image (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, default boston. 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 when when is 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 when when is 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's meta.synced_at.
  • cat β€” Comma list of category slugs. literary also 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's series_id).
  • authors β€” Only events with a known author on the bill. One of: 1.
  • near β€” Proximity search: <lat>,<lng>. Orders by distance and overrides sort. The radius spans metros (a point between Washington and Baltimore returns both; each event's city says which); city then only sets the time zone for "today", and defaults to the metro nearest the point.
  • radius_km β€” Radius for near (default 25, max 200). Default 25.
  • sort β€” date is chronological; featured is the site's editorial ranking. One of: featured, date. Default date.
  • page β€” 1-based page of limit rows (100 when no limit). Ignored by the playground server. Default 1.
  • 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 for cat: 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). Honour Retry-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_more on venues). Every successful response carries X-RateLimit-Remaining (calls left this MONTH on the account), X-RateLimit-Limit (requests per MINUTE) and X-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_params and the X-FindLocal-Warning header list them (e.g. category β†’ use cat). On 429, wait Retry-After seconds. 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 with updated_since=<meta.synced_at>: only changed rows come back, delisted ones as is_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 the books / authors behind 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_docs and get_setup_guide are 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.

── more in #ai-agents 4 stories Β· sorted by recency
── more on @findlocal 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/us-and-uk-local-even…] indexed:0 read:17min 2026-10-25 Β· β€”