{"description":"Searches Eventbrite's events in a city in Germany, Austria or Switzerland for a keyword or category (jazz, comedy, workshop, …), optionally between two dates: name, short description, start and end date, venue with address and coordinates, online or in person, picture and link. Eventbrite fills the page with other events when few match, so each event says whether it matches the query. Promoted events are left out. Start times and prices are on the event page.","effect":"read","id":"eventbrite.de/search-events","keywords":["eventbrite","events","veranstaltungen","was ist los","konzert","comedy","workshop","networking","party","meetup","kurs","tickets","this weekend","things to do","berlin","münchen","hamburg","wien","zürich"],"output":{"schema":{"properties":{"city":{"type":"string"},"events":{"items":{"properties":{"country":{"type":["string","null"]},"description":{"type":["string","null"]},"end_date":{"type":["string","null"]},"image":{"type":["string","null"]},"latitude":{"type":["number","null"]},"locality":{"type":["string","null"]},"longitude":{"type":["number","null"]},"matches_query":{"description":"Every query word appears in the name or description. Eventbrite ranks by relevance and fills the page with other events in the city when few match","type":"boolean"},"name":{"type":"string"},"online":{"type":"boolean"},"postcode":{"type":["string","null"]},"start_date":{"description":"YYYY-MM-DD","type":["string","null"]},"street":{"type":["string","null"]},"url":{"type":"string"},"venue":{"type":["string","null"]}},"type":"object"},"type":"array"},"matching":{"description":"How many events on this page mention every word of the query in their name or description","type":"integer"},"page":{"type":"integer"},"query":{"type":"string"}},"required":["city","query","events"],"type":"object"},"value":"let $q = lower(trim(params.query || 'events')) in let $words = split($q, ' ')[?@ != ''], $all = $q == 'events' in let $ev = map(&(let $e = @ in let $text = lower(join(' ', [$e.name || '', $e.description || ''])) in {name: $e.name, description: $e.description || `null`, start_date: $e.startDate || `null`, end_date: $e.endDate || `null`, online: contains($e.eventAttendanceMode || '', 'Online'), venue: $e.location.name || `null`, street: $e.location.address.streetAddress || `null`, postcode: $e.location.address.postalCode || `null`, locality: $e.location.address.addressLocality || `null`, country: $e.location.address.addressCountry || `null`, latitude: $e.location.geo.latitude && to_number($e.location.geo.latitude) || `null`, longitude: $e.location.geo.longitude && to_number($e.location.geo.longitude) || `null`, image: $e.image || `null`, url: $e.url, matches_query: $all || length($words[?!contains($text, @)]) == `0`}), steps.search[0].events || `[]`) in {city: params.city, query: params.query || 'events', page: params.page || `1`, matching: length($ev[?matches_query]), events: $ev}"},"params":{"additionalProperties":false,"properties":{"city":{"description":"City as named in German, e.g. 'Berlin', 'München', 'Köln', 'Wien', 'Zürich'","maxLength":60,"minLength":2,"type":"string"},"country":{"default":"germany","enum":["germany","austria","switzerland"],"type":"string"},"date_from":{"description":"Earliest event day, YYYY-MM-DD","pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},"date_to":{"description":"Latest event day, YYYY-MM-DD (use with date_from)","pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},"page":{"default":1,"description":"20 events per page","maximum":20,"minimum":1,"type":"integer"},"query":{"default":"events","description":"Keyword or category, e.g. 'jazz', 'comedy', 'yoga', 'startup'; 'events' for everything","maxLength":60,"minLength":2,"type":"string"}},"required":["city"],"type":"object"},"provenance":{"method":"browser-inspect","notes":"eventbrite.de/d/<country>--<city>/<keyword>/ is server-rendered. The first script[type=application/ld+json] is a schema.org ItemList of the page's 20 events (Event: name, description, startDate, endDate as dates, location with address and geo, eventAttendanceMode, image, url), the same order as window.__SERVER_DATA__.search_data.events.results; promoted events are in a separate promoted_results list and not in the ItemList. start_date, end_date and page are honoured as query parameters. German place names in the slug (germany--münchen); the English name 301-redirects to it. __SERVER_DATA__ (with start times) is an unmarked inline script after other assignments, so the stable ld+json is used; /api/v3/destination/events answers 400 to plain requests. Answers servers. The keyword only ranks results: a nonsense keyword returns the same 3,218 Berlin events (pagination.object_count) as 'jazz', so the output marks matches_query and counts them. v2 (2026-11-07 22:26): the selector is now body > script[type=application/ld+json]. On eventbrite.com some list pages carry a FAQPage ld+json nested in the content before the ItemList, and v1 (first ld+json in the document) would then read no events; the same page layout serves eventbrite.de.","recorded_at":"2026-11-07T21:47:00+01:00","recorded_by":"C4"},"requires_login":false,"schema":"https://wield.run/schema/recipe/v1.json","site":{"country":"DE","id":"eventbrite.de","language":"de","name":"Eventbrite","origin":"https://www.eventbrite.de","origins":["https://www.eventbrite.de"]},"steps":[{"description":"The server-rendered search page /d/<country>--<city>/<keyword>/ (place names as eventbrite.de spells them, in German; English names redirect). Its first ld+json block is an ItemList of the page's events in order (promoted events are kept apart and not in it). The one-item foreach builds the URL slugs.","expect":{"content_type":"html","status":[200]},"extract":{"embedded_json":{"selector":"body > script[type=\"application/ld+json\"]","vars":{"events":"\"@type\" == 'ItemList' && itemListElement[].item || `[]`"}}},"foreach":{"as":"f","in":"[{place: join('--', [params.country || 'germany', replace(lower(trim(params.city)), ' ', '-')]), q: replace(lower(trim(params.query || 'events')), ' ', '-'), page: (params.page || `1`) > `1` && to_string(params.page) || `null`}]","max":1},"id":"search","parse":"html","request":{"headers":{"Accept":"text/html"},"method":"GET","query":{"end_date":"{{params.date_to}}","page":"{{f.page}}","start_date":"{{params.date_from}}"},"url":"/d/{{f.place | urlencode}}/{{f.q | urlencode}}/"}}],"task":"Find events in a city on Eventbrite","tos":{"notes":"Terms not reviewed yet for automated access. One person's search: 1 request for one results page, as the site serves it. robots.txt allows /d/ pages. Registration and tickets stay on eventbrite.","reviewed":false},"verify":{"checks":["length(output.events) > `10`","length(output.events[?starts_with(url, 'https://www.eventbrite.') && name != `null` && start_date != `null`]) == length(output.events)","length(output.events[?locality != `null`]) > `5`","length(output.events[?latitude > `52` && latitude < `53`]) > `5`","output.matching > `5`"],"example_params":{"city":"Berlin","query":"jazz"},"max_ms":5000},"version":2}