Sign inTry it

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.

No reports yetRead-only, no login
Site
Eventbrite, United States
Version
v1
Runs, last 7 days
No reports yet
sha256
83b0d2979b07…

Run it with your agent

after installing Wield

Ask 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
  1. 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.repeats, max 1

Parameters

from your agent
citystringrequiredCity, e.g. 'New York', 'Austin'
date_fromstringEarliest event day, YYYY-MM-DD
date_tostringLatest event day, YYYY-MM-DD (use with date_from)
pageinteger20 events per page = 1
querystringKeyword or category, e.g. 'jazz', 'comedy', 'yoga', 'startup'; 'events' for everything = "events"
statestringrequiredTwo-letter US state code, e.g. 'NY', 'TX', 'CA'

Returns

to your agent
citystring
eventsobject[]country, description, end_date, image, latitude, locality, longitude, matches_query, name, online, postcode, start_date, street, url, venue
matchingintegerHow many events on this page mention every word of the query in their name or description
pageinteger
querystring

Where 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.

Check it yourself
curl -s https://wield.run/api/v1/recipes/eventbrite.com/search-events | shasum -a 256
# 83b0d2979b070f5879f7bc802178ffd48fcd1c46316404602a20da1fcb2786d5
eventbrite.com/search-events.json, v1
{
  "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
}