Why Ticketmaster's API shows 32 events in France

2026-10-16 · 12 min read · Place to Be

One query parameter decides whether Ticketmaster's API sees Europe.

Ask the Ticketmaster Discovery API for upcoming events in France and it returns 32. Add locale=* and it returns at least 57,764.

Place to Be is a live radar of upcoming events: concerts, matches, festivals, club nights. It merges ticketing, sports and open-data feeds, refreshes every two hours and ranks each event by the crowd it will draw. Ticketmaster is one of those feeds, and for three months it was quietly missing almost all of France, most of Scandinavia and half of Germany. Nothing errored. Every call returned HTTP 200 with a tidy page of results. The results were just the wrong, much smaller set.

This post covers what the parameter does, the gap measured across 25 countries on 16 October 2026, a second effect that strips city names from venues you already receive, and what the newly visible records look like before they are fit to show anyone. If you build on the Discovery API, the whole fix is one parameter, and the cleanup is where the work is.

The parameter nobody sets

The Event Search endpoint takes a locale parameter. Ticketmaster's own Discovery API v2 reference lists its default as en, describes it as "the locale in ISO code format", and adds two sentences that carry the whole story: "When using a '' it matches all locales" and "'' can only be used at the end (e.g. 'en-us,en,*')".

What the reference does not spell out is the consequence of the default. A listing in the Discovery API is stored as a record in a language. An American arena show has an en-us record. A show sold through Ticketmaster France often has only a fr-fr record. A Norwegian club gig may have only no-no. With the default locale=en, the API returns events that have an English record and drops the rest entirely. It does not fall back to the local record, it does not flag that anything was filtered, and page.totalElements reports the filtered count as if it were the whole market.

So a perfectly ordinary query:

GET https://app.ticketmaster.com/discovery/v2/events.json?countryCode=FR&apikey=...

answers with 32 events for the whole of France, and the same query with &locale=* answers with the API's ceiling of 10,000. That 32 looks like a market where Ticketmaster barely operates, which is exactly what we concluded. Twice.

How we got it wrong twice

On 26 July we probed France, got 3 listings back, and recorded it as a market the API does not really cover. In early October Paris still had no Ticketmaster events at all, not even Stevie Wonder at the Accor Arena, which was on sale on ticketmaster.fr. So we went around the gap: we started reading the Paris arenas' own published programmes, and wrote the gap down a second time as a fact about Ticketmaster. Both conclusions came from the default locale.

The lesson we took is narrow and cheap to apply: check the query before you write off the market. When a country or a city looks thin in a way you cannot explain, diff your request against every parameter the endpoint accepts. Ours had one we had never set.

The gap, country by country

We measured every country on the same day, 16 October 2026, with the same key, comparing the default query to locale=*. page.totalElements stops at 10,000, so for France and Spain we summed month-by-month windows over the next 14 months instead. France still hit the ceiling in one month, so 57,764 is a floor, not the true total.

CountryDefault queryWith locale=*Default shows
France3257,764+under 0.1%
Norway2863,6987.7%
Sweden3201,90716.8%
Finland2241,11620.1%
Denmark1,0313,35430.7%
Germany3,1196,05351.5%
Netherlands1,8682,70569.1%
Austria17221580.0%
Czechia40950980.4%
Switzerland33140681.5%
Italy1,0131,10491.8%
Spain9,39610,17192.4%
Belgium1,5491,57198.6%
Poland93795098.6%
Canada7,9347,93999.9%
Ireland, Mexico, Australia, New Zealand, Türkiye, UAE, Brazilsamesame100%

In the UK and the US both queries hit the 10,000 ceiling, and in every sample we pulled the records were English, so the default costs nothing there. That is precisely why the problem survives: if you build and test against English-speaking markets, the default is invisible.

The language of the records explains the shape. In the first 995 French events by date, every record was fr-fr. In Norway 949 of 995 were no-no; in Sweden 844 were sv-se; in Germany the split was 527 de-de to 462 en-us, which is why Germany loses about half. Spain is mostly en-us records already, which is why it barely moves.

The second effect: venues without cities

The locale does not only filter which events you get. It also changes what is inside the events you do get.

Brazil returns the same 149 events either way, so a total-count check says nothing is wrong. But with the default locale, 134 of those 149 events came back with a venue that had no city name at all. With locale=*, all 149 venues carried their city: São Paulo, Rio de Janeiro, Belo Horizonte. If you place events on a map or group them by town, the default silently turns most of a country into events with no place. Our São Paulo and Rio de Janeiro boards were short of listings for exactly this reason: they arrived, but with nowhere to put them.

In Germany and Switzerland the default also drops venue names: on 14 October, listings at Cologne's LANXESS arena and the KKL Luzern came back with a venue that had no name. And the filtering reaches keyword search too. Searching German events for "Rammstein" returned one tribute show by default, and two more, at the Sparkassen-Arena Aurich and the Stadthalle Osterholz-Scharmbeck, with locale=*. Those two had only de-de records.

Which wildcard to use

The documentation allows a preference list ending in *. We tested the variants against Norway, Germany, Belgium and Canada:

  • * and en,* behave the same. Both return every event once, in its English record when one exists and in its local record otherwise. Totals were identical to the event.
  • fr,* returns the same events with a different record where an event has several. Belgian events came back as fr-be instead of en-us, and in Québec the French Canadian records replaced the English ones. In our sample of 100 Québec events, the ids were identical and the titles happened to match.
  • No variant duplicated an event. Across five sampled countries, every id appeared exactly once per page set.

So the rule is simple: always end the locale with *, and put a language in front of it only if you want that language's record when an event has several.

// Discovery API event search. locale=* is not optional outside the
// English-speaking markets: without it, events with no English record are
// dropped, and venues can come back without a city.
const params = new URLSearchParams({
  apikey: process.env.TICKETMASTER_API_KEY!,
  countryCode: "FR",
  locale: "*",            // or "en,*" (same set), or "fr,*" to prefer French records
  size: "199",
  sort: "date,asc",
  startDateTime: "2026-11-01T00:00:00Z",
  endDateTime: "2026-12-01T00:00:00Z",
});
const res = await fetch(`https://app.ticketmaster.com/discovery/v2/events.json?${params}`);

Note the date window. Once you add locale=*, France alone is far larger than one query can page through: the reference states that deep paging stops at the 1,000th item (size * page < 1000), and the default quota is 5,000 calls a day at 5 per second. A country-wide sweep has to be split by date windows or by city and radius, or it will only ever see the first thousand events and report the rest as nonexistent, which is the same silent failure in a new place.

What the newly visible records look like

Turning the parameter on is one line. Showing the result is the real work, because the records the default had been hiding are not shaped like the English ones. From the same 995 French events:

  • 971 titles were all capitals: PANAME COMEDY CLUB, STEVIE WONDER. Shouting titles on a board read as spam, and a naive lowercase-then-capitalise pass mangles acronyms, Roman numerals and names like "McCartney". We re-case only titles that are entirely upper case, keep acronyms and Roman numerals, keep joining words lower case, and take the correct spelling of an act from the event's own attraction record where one exists.
  • 809 named no performer in the attractions list, so act-level signals (how many dates a tour has, how much attention an artist gets) have nothing to attach to for most of them.
  • None carried price ranges, so a price filter built on priceRanges would show France as free or empty.
  • City names lose hyphens and accents and keep postal suffixes: Marne La Vallee Cedex 4, St Etienne, Aix En Provence, Clermont Ferrand. If your cities come from a gazetteer, these will not match Saint-Étienne or Aix-en-Provence until you normalise them. We strip CEDEX and its number, expand St to Saint for French venues only, and restore the hyphens of French commune names. We deliberately do not expand St everywhere, because St. Louis and Saint-Louis are different places.
  • Some listings are products, not events: DISNEY BILLET DATE 4 JOURS, two-day festival passes, zoo day tickets, hospitality and guided-visit add-ons. These need the same product filter you already run on English VIP packages and parking passes, extended with the French vocabulary (billet date, pass 2 jours, prestation, hospitalité, visite guidée).

The other piece is merging. Many of the events the default hid were already on our boards from other sources: Paris has an excellent open-data agenda, and big venues publish their own programmes. When we replayed the change against the live Paris board on 14 October, the deep Paris query returned 2,592 Ticketmaster listings in 19 calls. After merging, 1,085 stayed as their own events and 1,507 merged into events we already had, or into the main event they were a ticket product of. Without a merge step, switching on locale=* would have doubled half of Paris. How we decide that two listings are the same event is its own story, told in the day our dedupe hid El Clásico.

What changed on the boards

After the change, the Paris board holds about 5,600 upcoming events, and some of the biggest nights of the autumn are on it for the first time: Muse at the Plenitude Arena (Paris La Défense Arena until its renaming on 1 July), Céline Dion's run at the same arena and Mentissa at L'Olympia. All three come from fr-fr records that the default query never returned. Measured on the day of the fix, Norway went from 278 to 3,673 events in the API, Sweden from 320 to 1,914, Denmark from 1,026 to 3,351 and Finland from 224 to 1,127, which fills boards like Oslo, Stockholm, Copenhagen and Helsinki. Germany roughly doubled, which shows on boards like Berlin and Hamburg.

Some markets stayed empty even with locale=* in our 14 October sweep: Hungary, South Korea, Argentina, Colombia, India, Hong Kong, Taiwan and Indonesia. If you need those, the Discovery API is not the source.

A checklist for the Discovery API

  1. Always send locale=* (or a language followed by ,*). The default en is a filter, not a display preference.
  2. Do not trust totalElements as market size. It reports the filtered count without saying anything was filtered, and it stops at 10,000.
  3. Split sweeps by date window or city. Deep paging ends at the 1,000th item, so one country-wide query sees a slice.
  4. Check for venues without a city after any query change. A stable total can hide a broken field.
  5. Normalise the local records before you show them: case, city names, product listings.
  6. Merge before you publish. The hidden events overlap with every other source you use.
  7. When a market looks thin, diff your query against the endpoint's full parameter list. Ours had been wrong for three months with every call returning 200.

The ranking that sits on top of all this is described in how the ranking works, and the same events are available to AI assistants through our MCP connector. Corrections and questions are welcome at hello@placetobe.cc.

Measured on 16 October 2026 with a standard Discovery API key; totals change daily. This article was drafted with AI assistance by the team behind Place to Be, from our own code, tests and API measurements.

Why Ticketmaster's API shows 32 events in France | Place to Be