# Moshtix Scraper (`mrdoe/moshtix-scraper`) Actor

Scrape Moshtix live music, festival, comedy and nightlife events in Australia - venue, date and ticket price per event.

- **URL**: https://apify.com/mrdoe/moshtix-scraper.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![Moshtix Scraper - scrape data with Apify](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/moshtix-scraper--hero.png)

### What does Moshtix Events Scraper do?

**Moshtix Events Scraper** extracts live music, festival, comedy and nightlife event listings from [Moshtix](https://www.moshtix.com.au), Australia's independent ticketing platform. Two operations live in one Actor: search events by keyword and/or state, or pull full detail for one or many specific events - no login, no Moshtix account, no API key.

### Why use this Actor?

- **Festival & lineup discovery** - find every festival and gig matching a keyword or region, with the full artist lineup for each one.
- **City/state event feeds** - build a recurring feed of what's on in a given state, ready to filter down to a city or venue.
- **Ticket monitoring** - schedule `eventDetails` against a watch-list of event IDs and diff consecutive runs to catch price changes, new ticket tiers going on sale, or sell-outs.

### What makes this different

Most general event scrapers only capture the headline name, date and a ticket link. This Actor pulls the full picture for every event: the complete artist lineup, every individual ticket tier with its own price and availability (not just a single "from" price), the venue's full street address, and the organizer - all from Australia's dedicated live-music and festival ticketing platform rather than a broad multi-country listings site.

### Data table

| Field                                                            | Description                                                         |
| ---------------------------------------------------------------- | ------------------------------------------------------------------- |
| `name`                                                           | Event or festival name                                              |
| `startDate` / `endDate`                                          | Event start/end date and time                                       |
| `venueName`, `address`, `suburb`, `state`, `postcode`, `country` | Full venue location                                                 |
| `category`, `genre`                                              | Event classification (e.g. Festivals, Live Music, Arts)             |
| `lineup`                                                         | Full list of artists/performers                                     |
| `ticketTypes`                                                    | Every ticket tier: name, price, currency, availability, sale window |
| `ticketStatus`                                                   | Overall status: `Available`, `SoldOut`, or `Unknown`                |
| `priceMin` / `priceMax`                                          | Lowest/highest ticket price across all tiers                        |
| `organizerName`                                                  | Event organizer/promoter                                            |
| `url`                                                            | Ticket page URL                                                     |

### How to use it

![How the Moshtix Scraper works](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/moshtix-scraper--how-it-works.png)

1. Pick an **Operation**: Event Search or Event Details.
2. Fill the matching field:
   - **Event Search** → a `query` keyword (artist, event, or venue name), an australian `state`, or both together for a city-style feed (e.g. keyword "Melbourne" + state VIC).
   - **Event Details** → `eventId` (e.g. `198093`) or a full moshtix.com.au event URL, or `eventIds` for a batch.
3. Optionally set `maxItems` to cap how many events the search operation returns.
4. Click **Start**.

Batch fields (`eventIds`) win over their singular counterpart when filled; duplicates and blanks are dropped automatically.

### Input

![Moshtix Scraper input options](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/moshtix-scraper--input.png)

| Field                  | Type              | Description                                                                                                 |
| ---------------------- | ----------------- | ----------------------------------------------------------------------------------------------------------- |
| `operation`            | string (required) | One of: `search`, `eventDetails`.                                                                           |
| `query`                | string            | Keyword to search by artist, event or venue name. Used by `search`.                                         |
| `state`                | string            | Restrict results to one Australian state/territory (ACT, NSW, NT, QLD, SA, TAS, VIC, WA). Used by `search`. |
| `eventId` / `eventIds` | string / array    | A Moshtix event ID or full event URL. Used by `eventDetails`.                                               |
| `maxItems`             | integer           | Caps total rows returned by `search`. First 10 rows are free. Leave blank for no cap.                       |
| `proxyConfiguration`   | object            | Proxy settings for the run.                                                                                 |

### Output

![Moshtix Scraper data fields](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/moshtix-scraper--fields.png)

![Moshtix Scraper output data](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/moshtix-scraper--output.png)

One flat row per event, with the full artist lineup and every ticket tier.

```json
{
    "eventId": "198093",
    "name": "Spilt Milk Canberra | 2026",
    "eventType": "Festival",
    "url": "https://www.moshtix.com.au/v2/event/spilt-milk-canberra-2026/198093",
    "image": "https://static.moshtix.com.au/uploads/b0b07fcb-3b7b-4df8-b458-43ecf56db078x600x600",
    "startDate": "2026-12-12T12:00:00",
    "endDate": "2026-12-12T23:00:00",
    "eventStatus": "EventScheduled",
    "ageRestriction": "18+",
    "category": "Festivals",
    "genre": "Festivals",
    "venueId": "2658",
    "venueName": "Exhibition Park In Canberra",
    "address": "Cnr of Flemington Road & Northbourne Ave",
    "suburb": "Mitchell",
    "state": "ACT",
    "postcode": null,
    "country": "Australia",
    "organizerId": "6092",
    "organizerName": "Kicks Entertainment- Canberra",
    "lineup": ["Spilt Milk", "Lewis Capaldi", "Raye", "kettama", "Baby keem"],
    "lineupCount": 24,
    "ticketTypes": [
        {
            "name": "2nd Release General Admission - Canberra",
            "category": "primary",
            "price": 234.95,
            "currency": "AUD",
            "availability": "InStock",
            "validFrom": "2026-07-31T10:00:00",
            "validThrough": "2026-12-12T23:00:00"
        }
    ],
    "priceMin": 149,
    "priceMax": 255,
    "currency": "AUD",
    "ticketStatus": "Available",
    "searchQuery": null,
    "searchState": null,
    "scrapedAt": "2026-09-14T12:00:00.000Z"
}
```

### Usage examples

- **Festival discovery for a region**: `operation: search`, `query: "festival"`, `state: "VIC"` - every festival-tagged event in Victoria, with full lineups.
- **City feed**: `operation: search`, `query: "Sydney"` - events matching "Sydney" in name, venue, or address.
- **Ticket watch-list**: `operation: eventDetails`, `eventIds: ["198093", "198208"]` on a daily schedule - track ticket-tier availability over time.

### Known Limitations

- Multi-city festival "hub" events (e.g. a national festival listing all its city dates on one page) don't carry ticket tiers themselves - scrape the individual city event listed on that hub page for pricing and lineup.
- Some long-running or free community listings carry minimal or no ticket-tier data (`ticketStatus: "Unknown"`) because the event itself has no paid tiers configured.
- Coverage is limited to what Moshtix itself lists - events sold exclusively through other ticketing platforms won't appear here.
- `postcode` is frequently blank because Moshtix itself omits it from many venue listings.

### FAQ

**Does Moshtix have a public API?** No general-purpose public API for event data. This Actor gets you event, lineup and ticket data anonymously, no approval process.

**Do I need a Moshtix account or API key?** No - it runs entirely against Moshtix's public, logged-out pages.

**Why is `ticketStatus` sometimes "Unknown"?** The event has no ticket tiers configured on Moshtix (common for informational/free listings) rather than a genuine sold-out or on-sale status.

**Can I track price and availability changes over time?** Yes - run `eventDetails` against the same `eventIds` on a schedule and diff the `ticketTypes`/`ticketStatus` fields between runs.

### Legal

This Actor is an independent tool, not affiliated with or endorsed by Moshtix or TEG. It only accesses data Moshtix serves publicly to anonymous visitors. Use it in compliance with Moshtix's Terms of Use and applicable law in your jurisdiction. Found a bug or have a feature request? Use the Issues tab on this Actor's page.

# Actor input Schema

## `operation` (type: `string`):

Which Moshtix data to scrape. One operation per run.

## `query` (type: `string`):

Keyword to search Moshtix by artist, event or venue name, e.g. "festival" or a city name like "Melbourne". Used by the search operation. Leave blank to browse by state only, or defaults to a demo keyword if both are blank.

## `state` (type: `string`):

Restrict search results to events in one Australian state or territory. Used by the search operation. Combine with a keyword for a city-style feed (e.g. keyword "Melbourne" + state VIC).

## `eventId` (type: `string`):

A Moshtix event ID (e.g. "198093") or a full moshtix.com.au event page URL. Used by the eventDetails operation. Defaults to a demo event if left blank.

## `eventIds` (type: `array`):

Many event IDs or moshtix.com.au event URLs in one run. Wins over "eventId" when filled.

## `maxItems` (type: `integer`):

Caps total rows returned by the search operation. The eventDetails operation always returns one row per requested event and ignores this cap. The first 10 rows of any run are free. Leave blank for no cap.

## `proxyConfiguration` (type: `object`):

Proxy settings for the run.

## Actor input object example

```json
{
  "operation": "search",
  "query": "festival",
  "eventId": "198093",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "query": "festival",
    "eventId": "198093",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/moshtix-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 = {
    "query": "festival",
    "eventId": "198093",
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

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

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

```

## CLI example

```bash
echo '{
  "query": "festival",
  "eventId": "198093",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call mrdoe/moshtix-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/moshtix-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cKohESLJh2TxEPpKg/builds/TYhUO8fD56HwHUb5L/openapi.json
