{
  "openapi": "3.0.1",
  "info": {
    "title": "Eventbrite Events Scraper",
    "description": "Scrapes events from Eventbrite by location, with optional keyword, date-range and language filters. Returns name, description, tags, venue with coordinates, times with timezone and ticket URL per event, plus an optional detail pass adding ticket prices, organizer and performers.",
    "version": "0.1",
    "x-build-id": "a1CCgQQlJwkJ2t5Vo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapyx~eventbrite-events-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapyx-eventbrite-events-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/scrapyx~eventbrite-events-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapyx-eventbrite-events-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/scrapyx~eventbrite-events-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapyx-eventbrite-events-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "locations"
        ],
        "properties": {
          "locations": {
            "title": "Eventbrite location slugs",
            "type": "array",
            "description": "One or more Eventbrite location slugs, exactly as they appear in an Eventbrite search URL after /d/ -- e.g. 'united-states--new-york', 'il--chicago', 'united-kingdom--london', 'australia--sydney', 'germany--berlin', or 'online' for online-only events. Both slug forms work (country--region and region--city). An unrecognised slug returns a clean 404 and is reported as an ERROR row, never silently widened to another place. Note Eventbrite sometimes resolves a slug to a narrower place than requested (e.g. 'indonesia--jakarta' becomes 'indonesia--jakarta-pusat'); when that happens the SEARCH_SUMMARY row reports locationExactMatch=false with the resolved slug.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (optional)",
            "type": "array",
            "description": "Optional free-text keyword search, e.g. 'jazz', 'startup', 'yoga'. The run is the cross product of locations x keywords, each pair producing its own SEARCH_SUMMARY row. Leave empty to fetch all events for each location. Note: this is a relevance search, so a keyword with no strong matches still returns loosely-related events rather than nothing, and the reported total is a fixed pool size rather than a match count when a keyword is used.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startDate": {
            "title": "Start date (YYYY-MM-DD)",
            "type": "string",
            "description": "Optional lower bound on event start date. MUST be set together with End date -- Eventbrite silently ignores one bound without the other (verified: the result count does not move), so this actor refuses the half-set case instead of returning unfiltered events under a date-filtered label.",
            "default": ""
          },
          "endDate": {
            "title": "End date (YYYY-MM-DD)",
            "type": "string",
            "description": "Optional upper bound on event start date. Must be set together with Start date. Applied as a real filter (verified: a 3-day window narrowed a 5,524-event city to 919).",
            "default": ""
          },
          "language": {
            "title": "Event language filter",
            "type": "string",
            "description": "Optional ISO language code (e.g. 'en', 'es', 'de') restricting results to events published in that language. Verified to genuinely filter; the SEARCH_SUMMARY row reports languageApplied from Eventbrite's own filter echo.",
            "default": ""
          },
          "includeEventDetails": {
            "title": "Fetch event detail pages",
            "type": "boolean",
            "description": "Also fetch each event's page for its JSON-LD, adding ticket offers (price, currency, availability), the named organizer and performers -- the three things genuinely absent from search rows. Search rows already carry name, full description, summary, tags, venue with coordinates, start/end times with timezone and the ticket URL. Off by default: one extra request per event.",
            "default": false
          },
          "maxItems": {
            "title": "Max events per query",
            "minimum": 0,
            "type": "integer",
            "description": "Stop paginating a (location, keyword) query after this many events. Set to 0 for unlimited, which is still bounded by Eventbrite's own ceiling of roughly 1,000 events per query.",
            "default": 100
          },
          "maxPages": {
            "title": "Max pages per query",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Hard cap on pagination depth (20 events/page). Eventbrite stops serving rows after page 50 regardless of how large the reported total is, so values above 50 are clamped to 50. When that ceiling is what stopped a query, the SEARCH_SUMMARY row says so via reachableCeilingHit=true.",
            "default": 25
          },
          "maxConcurrency": {
            "title": "Max concurrent requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Upper bound on requests in flight at once, across queries and detail fetches. Kept low by default: Eventbrite enforces a per-IP request-velocity limit (HTTP 429) that stays active for several minutes, so throughput here is governed by pacing rather than parallelism.",
            "default": 3
          },
          "minRequestInterval": {
            "title": "Minimum seconds between request starts",
            "minimum": 0,
            "type": "integer",
            "description": "Paces request starts without holding a concurrency slot. This is the honest speed control for this target: Eventbrite answers sustained bursts with HTTP 429 and a multi-minute cooldown, so lowering this buys nothing once the limit binds. Raise it if you see 429 warnings in the log.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "No WAF or bot challenge was found for Eventbrite (8 TLS profiles across both surfaces, all clean). Residential proxy is still the default because this target rate-limits per IP: each retry draws a fresh exit IP, which is what actually clears a 429. Deliberately not pinned to a country, since the site is global and a pin would shrink the rotation pool.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}