# Tixel Event Scraper (`techforce.global/tixel-scraper`) Actor

Scrape Tixel event listings, ticket prices & availability across 72 cities in AU, UK, US, NZ, NL & JP. Export concerts, festivals, sports & more as structured JSON, CSV, or Excel.

- **URL**: https://apify.com/techforce.global/tixel-scraper.md
- **Developed by:** [Techforce Global](https://apify.com/techforce.global) (community)
- **Categories:** Agents, Automation, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

### Tixel Event Scraper & MCP Connector

Pull **every event listed on Tixel.com** — concerts, festivals, sports, theatre, comedy, and food & drink — across 72 cities in Australia, the UK, the US, New Zealand, the Netherlands, and Japan. **No login, no manual browsing city-by-city, no copy-pasting ticket counts by hand.**

Built for resellers, event marketers, researchers, and builders who need Tixel's live listings as clean, structured data — in minutes, not hours of clicking through discover pages.

> **Pick cities + categories → get every event's venue, date, price, and ticket count → deliver it straight into Notion, Slack, Airtable, or your CRM.**

---

### ⭐ Why This Actor?

- ✅ **Just pick cities and categories** — choose from 72 cities across 6 countries and 6 event categories from simple dropdowns. No API key, login, or session tokens required.
- ✅ **Whole market or a quick sample** — set `maxPages` from 1 to 10 per city + category combo (~15–20 events per page).
- ✅ **Fast by default** — built with async `httpx` for non-blocking requests, with retry-and-backoff on failed pages.
- ✅ **Ticket-availability aware** — optionally return only events that currently have tickets listed on Tixel.
- ✅ **Never returns messy nulls** — every missing field falls back to `"N/A"` instead of `null`, so the dataset stays clean and consistent.
- ✅ **Deduplicated results** — events are deduplicated by URL, so re-scraped pagination never produces duplicate rows.
- ✅ **Deliver anywhere via MCP connectors** — push scraped events straight into Notion, Slack, Airtable, Google Sheets, and more.
- ✅ **Export-ready** — JSON, CSV, Excel, JSONL, or XML, or direct API integration for your own pipeline.

---

### 📝 Use Cases & ROI

| Use Case | Time Saved | What You Get |
| --- | --- | --- |
| **Event lead generation** | 3–6 hrs/market | Every upcoming event in a city, ready for outreach, sponsorship, or hospitality pitches |
| **Market & demand research** | 2–5 hrs/report | Ticket demand and pricing trends across cities and categories |
| **Event aggregation** | 4–8 hrs/build | Structured data to power curated listings, calendars, or discovery sites |
| **Pricing intelligence** | 2–4 hrs/scan | Resale ticket prices tracked across markets and event types |
| **Marketing targeting** | 3–5 hrs/campaign | Audiences segmented by event interest, city, and category |

---

### 🚀 How to Use

1. Open the Actor on Apify.
2. Select one or more **Cities** from the dropdown (e.g. Melbourne, London, New York).
3. Select one or more **Categories** — All, Music, Festival, Sports, Theatre, Comedy, or Food & Drink.
4. Set **Max Pages** per city + category combo (1–10, ~15–20 events per page).
5. _(Optional)_ Toggle **Only With Tickets** to skip events with no tickets currently listed.
6. _(Optional)_ Pick an **MCP connector** to deliver scraped events into Notion, Slack, Airtable, etc.
7. Click **Run** — results stream into the dataset as each page is scraped.
8. Download as JSON, CSV, Excel, JSONL, or XML — or let the connector push them into your tools automatically.

> 💡 First time with a connector? Run once with a connector selected — the run log prints the connector's available tool names, so you know what to put in **Connector tool name**.

> 💰 **Free vs. paid plans**: on the free plan, results are capped at **2 events per city + category combo** with no charge. On a paid plan, results are unlimited and each scraped event is billed via `Actor.charge()`.

---

### 🧩 Input Configuration

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `cities` | Array | ✔️ Yes | One or more cities to scrape (see supported cities below). Default: `["Melbourne"]`. |
| `categories` | Array | ✔️ Yes | Event categories: `all`, `music`, `festival`, `sports`, `theatre`, `comedy`, `food`. Default: `["all"]`. |
| `maxPages` | Integer | Optional | Max pages to scrape per city + category combo (1–10). Each page has ~15–20 events. Default: `5`. |
| `onlyWithTickets` | Boolean | Optional | If `true`, only returns events with tickets currently available. Default: `false`. |
| `mcpConnector` | Connector | Optional | Deliver scraped events into a connector you've authorized (Notion, Slack, Airtable, Google Sheets, …). |
| `deliveryMode` | Enum | Optional | `summary` (one call with the full event list), `chunked` (split a large list across multiple calls), `perEvent` (one call per event), or `none`. Default: `summary`. |
| `mcpTool` | String | Optional | Tool to call on the connector (e.g. `create_page`, `send_message`, `append_row`). |
| `mcpArguments` | Object | Optional | Arguments for the tool; string values support `{placeholders}`. |
| `mcpMessageTemplate` | String | Optional | Template rendered per delivery, exposed as the `{message}` placeholder. |

> [!TIP]
> Use `"categories": ["all"]` to capture every event type in one run. Combine multiple cities with `"onlyWithTickets": true` for targeted lead generation across markets.

#### Example — Scrape multiple cities and categories

```json
{
  "cities": ["Melbourne", "Sydney", "London"],
  "categories": ["music", "comedy"],
  "maxPages": 5,
  "onlyWithTickets": true
}
````

#### Example — Scrape and post each event to Slack

```json
{
  "cities": ["Melbourne"],
  "categories": ["all"],
  "maxPages": 5,
  "mcpConnector": "<your-slack-connector>",
  "deliveryMode": "perEvent",
  "mcpTool": "send_message",
  "mcpArguments": { "channel": "#tixel-events", "text": "{message}" },
  "mcpMessageTemplate": "{name} at {venue}, {city} on {date} — from {currency} {priceFrom} ({ticketsAvailable} tickets) — {url}"
}
```

#### Example — Scrape and log a summary into Notion

```json
{
  "cities": ["Melbourne", "Sydney"],
  "categories": ["music", "festival"],
  "maxPages": 5,
  "mcpConnector": "<your-notion-connector>",
  "deliveryMode": "chunked",
  "mcpTool": "create_page",
  "mcpArguments": {
    "parent": { "page_id": "<your-page-id>" },
    "pages": [
      {
        "properties": { "title": "Tixel events — part {part}/{partCount}" },
        "content": "{eventList}"
      }
    ]
  }
}
```

#### Placeholders available in arguments / template

**Summary & chunked modes:** `{totalEvents}` · `{cities}` · `{categories}` · `{eventList}` · `{message}`
**Chunked mode adds:** `{part}` · `{partCount}`
**Per-event mode:** `{name}` · `{venue}` · `{date}` · `{city}` · `{category}` · `{url}` · `{imageUrl}` · `{ticketsAvailable}` · `{hasTickets}` · `{priceFrom}` · `{currency}` · `{scrapedAt}` · `{sourcePage}` · `{message}`

***

### 📦 Output Fields

| Field | Description |
| --- | --- |
| `name` | Event name |
| `venue` | Venue name |
| `date` | Event date as shown on site |
| `city` | City configured in input |
| `category` | Event category (music, comedy, sports, etc.) |
| `url` | Direct link to the event on Tixel |
| `imageUrl` | Event poster / thumbnail URL |
| `ticketsAvailable` | Number of tickets currently listed |
| `hasTickets` | `true` / `false` |
| `priceFrom` | Lowest listed ticket price |
| `currency` | AUD / NZD / GBP / USD / EUR / JPY |
| `scrapedAt` | UTC timestamp of when the event was scraped |
| `sourcePage` | Page number the event was found on |

#### Example Output

```json
{
  "name": "Sleaford Mods",
  "venue": "Forum Melbourne",
  "date": "Tuesday 14 April 2026",
  "city": "Melbourne",
  "category": "music",
  "url": "https://tixel.com/au/music-tickets/2026/04/14/sleaford-mods",
  "imageUrl": "https://event-images.tixel.com/cdn-cgi/image/w=700/media/images/abc123.jpg",
  "ticketsAvailable": 79,
  "hasTickets": true,
  "priceFrom": 23.0,
  "currency": "AUD",
  "scrapedAt": "2026-04-14T06:45:00Z",
  "sourcePage": 1
}
```

> You can download the dataset in various formats such as JSON, HTML, CSV, Excel, or XML.

***

### 🗺️ Supported Cities & Categories

| Country | Cities |
| --- | --- |
| 🇦🇺 Australia | Adelaide, Ballarat, Brisbane, Cairns, Canberra, Darwin, Geelong, Gold Coast, Hobart, Ipswich, Melbourne, Newcastle, Perth, Sydney, Toowoomba, Townsville, Wollongong |
| 🇬🇧 UK | Birmingham, Bournemouth, Brighton, Bristol, Cardiff, Coventry, Edinburgh, Glasgow, Leeds, Leicester, Liverpool, London, Manchester, Newcastle Upon Tyne, Nottingham, Sheffield, Wolverhampton |
| 🇺🇸 USA | Atlanta, Austin, Baltimore, Boston, Charlotte, Chicago, Columbus, Dallas, Denver, Detroit, El Paso, Fort Worth, Houston, Indianapolis, Jacksonville, Las Vegas, Los Angeles, Louisville, Memphis, Miami, Nashville, New York, Oklahoma City, Philadelphia, Phoenix, Portland, San Antonio, San Diego, San Francisco, San Jose, Seattle, Washington |
| 🇳🇿 New Zealand | Auckland, Christchurch, Wellington |
| 🇳🇱 Netherlands | Amsterdam, Rotterdam |
| 🇯🇵 Japan | Nagano |

| Category value | Description |
| --- | --- |
| `all` | All categories |
| `music` | Concerts & music |
| `festival` | Festivals |
| `sports` | Sports events |
| `theatre` | Theatre |
| `comedy` | Comedy shows |
| `food` | Food & drink |

***

### 🔌 Integrations & Delivery

Deliver scraped events into any MCP connector you've authorized in Apify — no glue code, no webhooks:

- **Notion** — log a running page of events (use `chunked` mode for large event lists so Notion never times out)
- **Slack / Discord** — post events or summaries to a channel as they're found
- **Airtable / Google Sheets** — append a structured row per event
- **Jira / Linear / GitHub** — open a follow-up task per event (e.g. sponsorship outreach)
- …or any other MCP-compatible connector

Credentials stay private — delivery runs through the **Apify MCP Proxy**, so the Actor never sees your connector tokens. You can also consume the dataset directly via the **Apify API**, or wire it into **n8n, Zapier, and Make**.

> ⚙️ **Delivery modes:** `summary` sends the full event list in one call, `chunked` splits a large list across a few calls/pages, and `perEvent` sends one call per scraped event. MCP delivery only runs on the Apify platform and never affects what's saved to the dataset.

#### 🔧 Connector Tool Arguments Reference

Ready-to-paste `mcpTool` + `mcpArguments` combos for common connectors. Since template placeholders are always substituted as text, prefer text/rich-text fields over number fields for `{priceFrom}` / `{ticketsAvailable}` unless your connector coerces types automatically.

**Slack** — `mcpTool: "send_message"`, mode `perEvent` or `summary`

```json
{ "channel": "#tixel-events", "text": "{message}" }
```

**Discord** — `mcpTool: "send_message"`, mode `perEvent` or `summary`

```json
{ "channel_id": "<your-channel-id>", "content": "{message}" }
```

**Notion** — `mcpTool: "create_page"`, mode `perEvent` (one page per event)

```json
{
  "parent": { "database_id": "<your-database-id>" },
  "properties": {
    "Name": { "title": [{ "text": { "content": "{name}" } }] },
    "Venue": { "rich_text": [{ "text": { "content": "{venue}" } }] },
    "City": { "rich_text": [{ "text": { "content": "{city}" } }] },
    "Category": { "rich_text": [{ "text": { "content": "{category}" } }] },
    "Date": { "rich_text": [{ "text": { "content": "{date}" } }] },
    "Price": { "rich_text": [{ "text": { "content": "{currency} {priceFrom}" } }] },
    "Tickets": { "rich_text": [{ "text": { "content": "{ticketsAvailable}" } }] },
    "URL": { "url": "{url}" }
  }
}
```

**Notion** — `mcpTool: "create_page"`, mode `chunked` (one page per batch of events)

```json
{
  "parent": { "page_id": "<your-page-id>" },
  "properties": { "title": [{ "text": { "content": "Tixel events — part {part}/{partCount}" } }] },
  "children": [
    { "object": "block", "type": "paragraph", "paragraph": { "rich_text": [{ "text": { "content": "{eventList}" } }] } }
  ]
}
```

**Airtable** — `mcpTool: "create_record"`, mode `perEvent`

```json
{
  "table": "Tixel Events",
  "fields": {
    "Name": "{name}",
    "Venue": "{venue}",
    "City": "{city}",
    "Category": "{category}",
    "Date": "{date}",
    "Tickets Available": "{ticketsAvailable}",
    "Price From": "{priceFrom}",
    "Currency": "{currency}",
    "URL": "{url}"
  }
}
```

**Google Sheets** — `mcpTool: "append_row"`, mode `perEvent`

```json
{
  "spreadsheetId": "<your-spreadsheet-id>",
  "range": "Sheet1!A:G",
  "values": [
    ["{name}", "{venue}", "{city}", "{category}", "{date}", "{ticketsAvailable}", "{priceFrom} {currency}", "{url}"]
  ]
}
```

**Jira** — `mcpTool: "create_issue"`, mode `perEvent`

```json
{
  "project": "EVT",
  "issueType": "Task",
  "summary": "Follow up: {name} ({city})",
  "description": "{message}"
}
```

**Linear** — `mcpTool: "create_issue"`, mode `perEvent`

```json
{
  "teamId": "<your-team-id>",
  "title": "Follow up: {name} ({city})",
  "description": "{message}"
}
```

**GitHub** — `mcpTool: "create_issue"`, mode `perEvent`

```json
{
  "owner": "your-org",
  "repo": "event-tracking",
  "title": "{name} — {city}",
  "body": "{message}"
}
```

For the Jira / Linear / GitHub examples above, pair with this `mcpMessageTemplate`:

```
{name} at {venue}, {city} on {date} — from {currency} {priceFrom} ({ticketsAvailable} tickets)
{url}
```

***

### 🛠️ How It Works

`my_actor/main.py` reads the input, then for each city + category combination:

1. Fetches page 1 of the Tixel discover page and reads the pagination footer to find how many pages actually exist.
2. Parses each page's HTML with `BeautifulSoup`, extracting event name, venue, date, category, tickets, price, and image for every listing, and deduplicates by event URL.
3. Fetches remaining pages up to `maxPages` (or the discovered max, whichever is lower), retrying failed requests with exponential backoff and pausing briefly between pages to stay polite to the server.
4. Pushes each page's events to the dataset immediately, and — if a connector is configured — delivers the full run's events via MCP once scraping finishes.

**Built with:** [Apify SDK for Python](https://docs.apify.com/sdk/python/) · [httpx](https://www.python-httpx.org/) · [BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/) · [MCP](https://modelcontextprotocol.io/)

***

### 🛠 Running Locally

```bash
## Install dependencies
pip install -r requirements.txt

## Create local input file
mkdir -p storage/key_value_stores/default
echo '{
  "cities": ["Melbourne"],
  "categories": ["all"],
  "maxPages": 2,
  "onlyWithTickets": false
}' > storage/key_value_stores/default/INPUT.json

## Run the actor
python -m src.main
```

***

### 🆘 Support

For issues, custom scraping requests, or feature suggestions:
**Email**: bhavin.shah@techforceglobal.com

***

#### Need a Custom Pipeline?

Want multi-market batch runs, scheduled refreshes, deeper enrichment, or a full data-warehouse integration?

#### [📅 Book a Free 15-min Consultation](https://calendly.com/techforce-infotech-pvt-ltd/intro-meeting?month=2026-01)

***

Made with ❤️ by **[Techforce](https://www.techforceglobal.com)**
Specialists in High-Performance Web Scrapers and AI Automation.

***

### Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Tixel. Tixel® is a trademark of its respective owner; all trademarks are property of their respective owners. The Actor collects only publicly available information (event listings, pricing, and availability shown on public discover pages) and does not log into, or scrape behind the authentication of, any platform. Use the data responsibly and in compliance with applicable laws (including GDPR/CCPA) and Tixel's terms of service.

# Actor input Schema

## `cities` (type: `array`):

Select one or more cities to scrape events from.

## `categories` (type: `array`):

Select which event categories to scrape.

## `maxPages` (type: `integer`):

Maximum pages to scrape per city + category combo. Each page has ~15–20 events. Maximum: 10.

## `onlyWithTickets` (type: `boolean`):

When enabled, skips events that have no tickets currently listed on Tixel.

## `mcpConnector` (type: `string`):

Optionally deliver scraped events into a connector you have authorized — Notion, Slack, Airtable, Google Sheets, or any MCP-compatible connector. Leave empty to only save results to the dataset.

## `deliveryMode` (type: `string`):

How to deliver to the connector: 'summary' (one call with an aggregate summary and the full event list), 'chunked' (split a large event list across multiple calls so services like Notion never time out), 'perEvent' (one call per scraped event), or 'none' (save to dataset only).

## `mcpTool` (type: `string`):

Name of the tool to call on the connector (e.g. 'create\_page' for Notion, 'send\_message' for Slack, 'append\_row' for Google Sheets/Airtable). If unsure, run once with a connector selected — the log lists the connector's available tools.

## `mcpArguments` (type: `object`):

Arguments passed to the connector tool. String values support {placeholders}. In 'summary' and 'chunked' modes: {totalEvents}, {cities}, {categories}, {eventList} (formatted list of events — in 'chunked' mode this holds one part), {part}/{partCount} (chunked mode only), and {message} (the rendered template below). In 'perEvent' mode: {name}, {venue}, {date}, {city}, {category}, {url}, {imageUrl}, {ticketsAvailable}, {hasTickets}, {priceFrom}, {currency}, {scrapedAt}, {sourcePage}, and {message}. Example for Slack: {"channel": "#tixel-events", "text": "{message}"}. Example for Notion (perEvent): {"parent": {"database\_id": "YOUR\_DB\_ID"}, "properties": {"Name": {"title": \[{"text": {"content": "{name}"}}]}}}.

## `mcpMessageTemplate` (type: `string`):

Optional template rendered and exposed as the {message} placeholder in the tool arguments. Summary example: 'Found {totalEvents} events across {cities} ({categories}):\n\n{eventList}'. Per-event example: '{name} at {venue}, {city} on {date} — from {currency} {priceFrom} ({ticketsAvailable} tickets) — {url}'.

## Actor input object example

```json
{
  "cities": [
    "Melbourne"
  ],
  "categories": [
    "all"
  ],
  "maxPages": 5,
  "onlyWithTickets": false,
  "deliveryMode": "summary",
  "mcpTool": "",
  "mcpArguments": {},
  "mcpMessageTemplate": ""
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "cities": [
        "Melbourne"
    ],
    "categories": [
        "all"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("techforce.global/tixel-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "cities": ["Melbourne"],
    "categories": ["all"],
}

# Run the Actor and wait for it to finish
run = client.actor("techforce.global/tixel-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "cities": [
    "Melbourne"
  ],
  "categories": [
    "all"
  ]
}' |
apify call techforce.global/tixel-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=techforce.global/tixel-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tixel Event Scraper",
        "description": "Scrape Tixel event listings, ticket prices & availability across 72 cities in AU, UK, US, NZ, NL & JP. Export concerts, festivals, sports & more as structured JSON, CSV, or Excel.",
        "version": "1.0",
        "x-build-id": "TPVCVzYFiCmuichdg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/techforce.global~tixel-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-techforce.global-tixel-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/techforce.global~tixel-scraper/runs": {
            "post": {
                "operationId": "runs-sync-techforce.global-tixel-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/techforce.global~tixel-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-techforce.global-tixel-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": [
                    "cities",
                    "categories"
                ],
                "properties": {
                    "cities": {
                        "title": "Cities",
                        "type": "array",
                        "description": "Select one or more cities to scrape events from.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Adelaide",
                                "Ballarat",
                                "Brisbane",
                                "Cairns",
                                "Canberra",
                                "Darwin",
                                "Geelong",
                                "Gold Coast",
                                "Hobart",
                                "Ipswich",
                                "Melbourne",
                                "Newcastle",
                                "Perth",
                                "Sydney",
                                "Toowoomba",
                                "Townsville",
                                "Wollongong",
                                "Amsterdam",
                                "Rotterdam",
                                "Atlanta",
                                "Austin",
                                "Baltimore",
                                "Boston",
                                "Charlotte",
                                "Chicago",
                                "Columbus",
                                "Dallas",
                                "Denver",
                                "Detroit",
                                "El Paso",
                                "Fort Worth",
                                "Houston",
                                "Indianapolis",
                                "Jacksonville",
                                "Las Vegas",
                                "Los Angeles",
                                "Louisville",
                                "Memphis",
                                "Miami",
                                "Nashville",
                                "New York",
                                "Oklahoma City",
                                "Philadelphia",
                                "Phoenix",
                                "Portland",
                                "San Antonio",
                                "San Diego",
                                "San Francisco",
                                "San Jose",
                                "Seattle",
                                "Washington",
                                "Auckland",
                                "Christchurch",
                                "Wellington",
                                "Birmingham",
                                "Bournemouth",
                                "Brighton",
                                "Bristol",
                                "Cardiff",
                                "Coventry",
                                "Edinburgh",
                                "Glasgow",
                                "Leeds",
                                "Leicester",
                                "Liverpool",
                                "London",
                                "Manchester",
                                "Newcastle Upon Tyne",
                                "Nottingham",
                                "Sheffield",
                                "Wolverhampton",
                                "Nagano"
                            ],
                            "enumTitles": [
                                "🇦🇺 Adelaide",
                                "🇦🇺 Ballarat",
                                "🇦🇺 Brisbane",
                                "🇦🇺 Cairns",
                                "🇦🇺 Canberra",
                                "🇦🇺 Darwin",
                                "🇦🇺 Geelong",
                                "🇦🇺 Gold Coast",
                                "🇦🇺 Hobart",
                                "🇦🇺 Ipswich",
                                "🇦🇺 Melbourne",
                                "🇦🇺 Newcastle",
                                "🇦🇺 Perth",
                                "🇦🇺 Sydney",
                                "🇦🇺 Toowoomba",
                                "🇦🇺 Townsville",
                                "🇦🇺 Wollongong",
                                "🇳🇱 Amsterdam",
                                "🇳🇱 Rotterdam",
                                "🇺🇸 Atlanta",
                                "🇺🇸 Austin",
                                "🇺🇸 Baltimore",
                                "🇺🇸 Boston",
                                "🇺🇸 Charlotte",
                                "🇺🇸 Chicago",
                                "🇺🇸 Columbus",
                                "🇺🇸 Dallas",
                                "🇺🇸 Denver",
                                "🇺🇸 Detroit",
                                "🇺🇸 El Paso",
                                "🇺🇸 Fort Worth",
                                "🇺🇸 Houston",
                                "🇺🇸 Indianapolis",
                                "🇺🇸 Jacksonville",
                                "🇺🇸 Las Vegas",
                                "🇺🇸 Los Angeles",
                                "🇺🇸 Louisville",
                                "🇺🇸 Memphis",
                                "🇺🇸 Miami",
                                "🇺🇸 Nashville",
                                "🇺🇸 New York",
                                "🇺🇸 Oklahoma City",
                                "🇺🇸 Philadelphia",
                                "🇺🇸 Phoenix",
                                "🇺🇸 Portland",
                                "🇺🇸 San Antonio",
                                "🇺🇸 San Diego",
                                "🇺🇸 San Francisco",
                                "🇺🇸 San Jose",
                                "🇺🇸 Seattle",
                                "🇺🇸 Washington",
                                "🇳🇿 Auckland",
                                "🇳🇿 Christchurch",
                                "🇳🇿 Wellington",
                                "🇬🇧 Birmingham",
                                "🇬🇧 Bournemouth",
                                "🇬🇧 Brighton",
                                "🇬🇧 Bristol",
                                "🇬🇧 Cardiff",
                                "🇬🇧 Coventry",
                                "🇬🇧 Edinburgh",
                                "🇬🇧 Glasgow",
                                "🇬🇧 Leeds",
                                "🇬🇧 Leicester",
                                "🇬🇧 Liverpool",
                                "🇬🇧 London",
                                "🇬🇧 Manchester",
                                "🇬🇧 Newcastle Upon Tyne",
                                "🇬🇧 Nottingham",
                                "🇬🇧 Sheffield",
                                "🇬🇧 Wolverhampton",
                                "🇯🇵 Nagano"
                            ]
                        },
                        "default": [
                            "Melbourne"
                        ]
                    },
                    "categories": {
                        "title": "Event Categories",
                        "type": "array",
                        "description": "Select which event categories to scrape.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "all",
                                "music",
                                "festival",
                                "sports",
                                "theatre",
                                "comedy",
                                "food"
                            ],
                            "enumTitles": [
                                "🎟️ All Categories",
                                "🎵 Concerts / Music",
                                "🎪 Festival",
                                "🏆 Sports",
                                "🎭 Theatre",
                                "😂 Comedy",
                                "🍔 Food & Drink"
                            ]
                        },
                        "default": [
                            "all"
                        ]
                    },
                    "maxPages": {
                        "title": "Max Pages Per City / Category",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum pages to scrape per city + category combo. Each page has ~15–20 events. Maximum: 10.",
                        "default": 5
                    },
                    "onlyWithTickets": {
                        "title": "Only Events With Available Tickets",
                        "type": "boolean",
                        "description": "When enabled, skips events that have no tickets currently listed on Tixel.",
                        "default": false
                    },
                    "mcpConnector": {
                        "title": "Deliver to (MCP connector)",
                        "type": "string",
                        "description": "Optionally deliver scraped events into a connector you have authorized — Notion, Slack, Airtable, Google Sheets, or any MCP-compatible connector. Leave empty to only save results to the dataset."
                    },
                    "deliveryMode": {
                        "title": "Delivery mode",
                        "enum": [
                            "summary",
                            "chunked",
                            "perEvent",
                            "none"
                        ],
                        "type": "string",
                        "description": "How to deliver to the connector: 'summary' (one call with an aggregate summary and the full event list), 'chunked' (split a large event list across multiple calls so services like Notion never time out), 'perEvent' (one call per scraped event), or 'none' (save to dataset only).",
                        "default": "summary"
                    },
                    "mcpTool": {
                        "title": "Connector tool name",
                        "type": "string",
                        "description": "Name of the tool to call on the connector (e.g. 'create_page' for Notion, 'send_message' for Slack, 'append_row' for Google Sheets/Airtable). If unsure, run once with a connector selected — the log lists the connector's available tools.",
                        "default": ""
                    },
                    "mcpArguments": {
                        "title": "Connector tool arguments",
                        "type": "object",
                        "description": "Arguments passed to the connector tool. String values support {placeholders}. In 'summary' and 'chunked' modes: {totalEvents}, {cities}, {categories}, {eventList} (formatted list of events — in 'chunked' mode this holds one part), {part}/{partCount} (chunked mode only), and {message} (the rendered template below). In 'perEvent' mode: {name}, {venue}, {date}, {city}, {category}, {url}, {imageUrl}, {ticketsAvailable}, {hasTickets}, {priceFrom}, {currency}, {scrapedAt}, {sourcePage}, and {message}. Example for Slack: {\"channel\": \"#tixel-events\", \"text\": \"{message}\"}. Example for Notion (perEvent): {\"parent\": {\"database_id\": \"YOUR_DB_ID\"}, \"properties\": {\"Name\": {\"title\": [{\"text\": {\"content\": \"{name}\"}}]}}}.",
                        "default": {}
                    },
                    "mcpMessageTemplate": {
                        "title": "Message template",
                        "type": "string",
                        "description": "Optional template rendered and exposed as the {message} placeholder in the tool arguments. Summary example: 'Found {totalEvents} events across {cities} ({categories}):\\n\\n{eventList}'. Per-event example: '{name} at {venue}, {city} on {date} — from {currency} {priceFrom} ({ticketsAvailable} tickets) — {url}'.",
                        "default": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
