{"description":"Searches Ticketmaster Germany for an artist, event or venue, like its search page: upcoming events by date with the venue, city, country and address, start time, artists, status (cancelled, postponed, rescheduled, sold out, few tickets left, date to be announced) and the link to buy tickets. Optionally only events in Germany or in one city. Ticketmaster's German search also lists events abroad; each is marked. Prices are not part of the search results.","effect":"read","id":"ticketmaster.de/search-events","keywords":["ticketmaster","tickets","konzert","konzerte","veranstaltung","event","concert","show","festival","tour","karten","comedy","theater","sport","live","germany","berlin","hamburg","münchen","köln"],"output":{"schema":{"properties":{"events":{"items":{"properties":{"address":{"type":["string","null"]},"artists":{"items":{"type":"string"},"type":"array"},"city":{"type":["string","null"]},"country":{"description":"ISO code, e.g. DE","type":["string","null"]},"id":{"type":"string"},"in_germany":{"type":"boolean"},"latitude":{"type":["number","null"]},"limited_availability":{"type":"boolean"},"longitude":{"type":["number","null"]},"postcode":{"type":["string","null"]},"sold_by_partner":{"description":"Tickets are sold by a partner site that Ticketmaster links to","type":"boolean"},"sold_out":{"type":"boolean"},"start":{"description":"Start time in UTC (ISO 8601, Z); null when the date is to be announced","type":["string","null"]},"status":{"description":"scheduled, cancelled, postponed, rescheduled or tba","type":"string"},"timezone":{"description":"The venue's time zone, e.g. Europe/Berlin","type":["string","null"]},"title":{"type":"string"},"url":{"description":"The event page: usually ticketmaster.de, sometimes another Ticketmaster country site or a partner platform such as Universe (sold_by_partner)","type":"string"},"venue":{"type":["string","null"]}},"type":"object"},"type":"array"},"page":{"type":"integer"},"query":{"type":"string"},"total":{"description":"All matching events worldwide, before the city and Germany filters","type":["integer","null"]}},"required":["query","events"],"type":"object"},"value":"let $city = params.city && lower(params.city) || `null`, $de = params.germany_only == `true` in {query: params.query, total: steps.search[0].total || `0`, page: params.page || `1`, events: map(&(let $e = @ in {id: $e.id, title: $e.title, start: $e.dates.startDate || `null`, timezone: $e.timeZone || `null`, venue: $e.venue.name || `null`, city: $e.venue.city || `null`, country: $e.venue.countryCode || `null`, address: $e.venue.addressLineOne || `null`, postcode: $e.venue.code || `null`, latitude: $e.venue.latitude || `null`, longitude: $e.venue.longitude || `null`, artists: $e.artists[*].name || `[]`, status: ($e.cancelled && 'cancelled') || ($e.postponed && 'postponed') || ($e.rescheduled && 'rescheduled') || ($e.tba && 'tba') || 'scheduled', sold_out: $e.soldOut == `true`, limited_availability: $e.limitedAvailability == `true`, in_germany: $e.venue.countryCode == 'DE', sold_by_partner: $e.isPartner == `true` || $e.partnerEvent == `true`, url: $e.url}), steps.search[0].events || `[]`)[?(!$de || in_germany) && ($city == `null` || (city && contains(lower(city), $city)))]}"},"params":{"additionalProperties":false,"properties":{"city":{"description":"Only events in this city, e.g. 'Berlin' (matched against the venue's city on the returned page)","maxLength":60,"minLength":2,"type":"string"},"germany_only":{"default":false,"description":"Only events in Germany","type":"boolean"},"page":{"default":1,"description":"20 events per page","maximum":20,"minimum":1,"type":"integer"},"query":{"description":"Artist, event or venue, e.g. 'Coldplay', 'Rammstein', 'Lanxess Arena'","maxLength":100,"minLength":2,"type":"string"}},"required":["query"],"type":"object"},"provenance":{"method":"browser-inspect","notes":"ticketmaster.de/search?q=…&page=<0-based> is server-rendered (Next.js); __NEXT_DATA__ props.pageProps.initialReduxState.api.queries holds RTK Query entries keyed by their arguments, so the recipe picks the one whose endpointName is 'searchEvents' (originalArgs {keyword, sort: date, page}). data.total counts all matches worldwide; data.events has 20 per page with dates.startDate (UTC), timeZone, venue (name, city, countryCode, addressLineOne, code, latitude, longitude), artists, cancelled/postponed/rescheduled/tba, soldOut, limitedAvailability, isPartner. The page's own /api/search/events answers 400 without the app's headers, so it is not used. Search results carry no prices. Answers servers. v2 (2026-11-07 22:38): tos.notes only; requests and output unchanged.","recorded_at":"2026-11-07T21:43:00+01:00","recorded_by":"C4"},"requires_login":false,"schema":"https://wield.run/schema/recipe/v1.json","site":{"country":"DE","id":"ticketmaster.de","language":"de","name":"Ticketmaster Deutschland","origin":"https://www.ticketmaster.de","origins":["https://www.ticketmaster.de"]},"steps":[{"description":"The server-rendered search page; its Redux state (__NEXT_DATA__ props.pageProps.initialReduxState.api.queries, entry with endpointName 'searchEvents') holds the events. The page's own /api/search/events answers 400 to plain requests, so the page is read instead. The one-item foreach turns the page number into the 0-based index the URL uses.","expect":{"content_type":"html","status":[200]},"extract":{"embedded_json":{"selector":"script#__NEXT_DATA__","vars":{"events":"values(props.pageProps.initialReduxState.api.queries)[?endpointName == 'searchEvents'] | [0].data.events","total":"values(props.pageProps.initialReduxState.api.queries)[?endpointName == 'searchEvents'] | [0].data.total"}}},"foreach":{"as":"f","in":"[{page: to_string((params.page || `1`) - `1`)}]","max":1},"id":"search","parse":"html","request":{"headers":{"Accept":"text/html"},"method":"GET","query":{"page":"{{f.page}}","q":"{{params.query}}"},"url":"/search"}}],"task":"Find concerts and events on Ticketmaster","tos":{"notes":"Ticketmaster.de's terms prohibit robots and automated tools that retrieve or data-mine the site, and automated ticket buying. Wield runs this recipe only when the user asks, in the user's own browser, one search results page per call. It never touches anything purchase-related (no ticket selection, no basket, no checkout) and never polls availability.","reviewed":true},"verify":{"checks":["length(output.events) > `5`","output.total > `20`","length(output.events[?in_germany]) == length(output.events)","length(output.events[?starts_with(url, 'https://') && title != `null` && venue != `null`]) == length(output.events)","length(output.events[?starts_with(url, 'https://www.ticketmaster.de/')]) > `5`","length(output.events[?start != `null` && ends_with(start, 'Z')]) > `0`"],"example_params":{"germany_only":true,"query":"rock"},"max_ms":5000},"version":2}