Find events in a city on Eventbrite.
Finds events on Eventbrite in a US city for a keyword and dates, like the site's browse pages: name, description, start and end, online or in person, venue and address with map position, organiser and link. The keyword ranks results, so each event says whether it matches. Promoted events are left out.
- Site
- Eventbrite, United States
- Version
- v1
- Runs, last 7 days
- No reports yet
- sha256
- 83b0d2979b07…
Run it with your agent
after installing WieldAsk in plain words. Your agent finds this recipe and calls it:
“Find events in a city on Eventbrite.”
Read-only: it changes nothing on the site. No login needed.
{ "tool": "run", "arguments": { "recipe_id": "eventbrite.com/search-events", "params": { "city": "New York", "query": "jazz", "state": "NY" } } }
Requests
sent from your browser, in order- 1GET/d/{{f.place | urlencode}}/{{f.q | urlencode}}/?end_date&page&start_dateThe 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.
Parameters
from your agentReturns
to your agentWhere it can send
- www.eventbrite.com
Anything else is blocked by the extension.
Reads from your session
Nothing. Your browser attaches the site's cookies by itself.
Used only in requests to the addresses on the left. Never sent to wield.run or your agent.
Checks
a run passes when- 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 > `40` && latitude < `41.5`]) > `5`
- output.matching > `5`
Raw recipe
Served as canonical JSON from /api/v1/recipes/eventbrite.com/search-events, so its sha256 matches the ETag and the index.
curl -s https://wield.run/api/v1/recipes/eventbrite.com/search-events | shasum -a 256 # 83b0d2979b070f5879f7bc802178ffd48fcd1c46316404602a20da1fcb2786d5
{ "description": "Finds events on Eventbrite in a US city for a keyword and dates, like the site's browse pages: name, description, start and end, online or in person, venue and address with map position, organiser and link. The keyword ranks results, so each event says whether it matches. Promoted events are left out.", "effect": "read", "id": "eventbrite.com/search-events", "keywords": [ "eventbrite", "events", "tickets", "things to do", "concerts", "workshops", "meetups", "classes", "usa", "new york", "austin" ], "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, e.g. 'New York', 'Austin'", "maxLength": 60, "minLength": 2, "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" }, "state": { "description": "Two-letter US state code, e.g. 'NY', 'TX', 'CA'", "pattern": "^[A-Za-z]{2}$", "type": "string" } }, "required": [ "city", "state" ], "type": "object" }, "provenance": { "method": "browser-inspect", "notes": "Same /d/<place>/<keyword>/ list pages and ld+json ItemList as eventbrite.de/search-events (promoted events are not in the ItemList; the keyword only ranks results, so each event carries matches_query). Place slug: '<state code>--<city>' (ny--new-york). Answers servers. The event list is the first ld+json script directly under <body>: some pages also have a FAQPage ld+json nested in the content, which comes first in the document (New York jazz).", "recorded_at": "2026-11-07T22:24:00+01:00", "recorded_by": "C4" }, "requires_login": false, "schema": "https://wield.run/schema/recipe/v1.json", "site": { "country": "US", "id": "eventbrite.com", "language": "en", "name": "Eventbrite", "origin": "https://www.eventbrite.com", "origins": [ "https://www.eventbrite.com" ] }, "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('--', [lower(trim(params.state)), 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 > `40` && latitude < `41.5`]) > `5`", "output.matching > `5`" ], "example_params": { "city": "New York", "query": "jazz", "state": "NY" }, "max_ms": 5000 }, "version": 1 }