# Event Ticket Price Monitor (`technicaldost/event-ticket-price-monitor`) Actor

Track ticket prices and availability for events from public event pages (schema.org Event/Offer). Structured JSON: event, venue, date, price range, currency, availability.

- **URL**: https://apify.com/technicaldost/event-ticket-price-monitor.md
- **Developed by:** [Technical Dost Solutions](https://apify.com/technicaldost) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 5 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 tracked events

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Event Ticket Price Monitor

### What this Actor does

Track ticket prices and availability for events from public event pages you supply.

It processes user-provided public event URLs, prioritizes JSON-LD/schema.org `Event` and `Offer` structured data (including `MusicEvent`, `SportsEvent`, and `TheaterEvent`), and can optionally run a conservative fallback price scan over visible page text. It normalizes useful fields, deduplicates rows, and saves structured records to the Apify dataset for recurring price monitoring.

### Why this Actor is useful

Buyers pay for this kind of extraction when it saves manual checking, creates repeatable price monitoring, feeds spreadsheets or dashboards, and turns public event pages into clean API-ready datasets.

### Who this is for

- Event resellers and brokers monitoring their own permitted listings
- Promoters and venues tracking public price signals
- Price-comparison and deal-alert builders
- Analysts and researchers studying public event pricing
- Fans tracking price/availability for events they follow

### Common use cases

- Monitor ticket price ranges and availability over time
- Build price-comparison or deal-alert datasets
- Feed dashboards or spreadsheets with public event pricing
- Track availability status changes for events you follow
- Create recurring public event pricing snapshots

### Input

- `startUrls`: Public event page URLs to extract from. Use only pages you are permitted to access without login or bypassing access controls.
- `maxItems`: Maximum number of rows to save.
- `maxConcurrency`: Number of pages processed in parallel. The default is intentionally conservative.
- `extractionMode`: Use `structuredDataOnly` or `structuredDataWithFallback`. The default enables a safe public price fallback when no `Event` structured data is present.
- `requestTimeoutSecs`: Maximum time to spend on a single page.
- `proxyConfiguration`: Optional Apify proxy configuration where permitted by your source review.

### Output

- `eventName`: Event name from structured data or page title/heading.
- `performer`: Performer or act name when exposed in structured data.
- `venue`: Venue name from the event location.
- `eventLocation`: Event address or locality string.
- `eventDate`: Event start date/time.
- `ticketPriceMin`: Lowest ticket price found across offers.
- `ticketPriceMax`: Highest ticket price found across offers.
- `currency`: Price currency code such as USD, GBP, or EUR.
- `ticketAvailability`: Availability status such as InStock or SoldOut when published.
- `ticketUrl`: Ticket or offer URL, or the source page URL.
- `platform`: Hostname of the source page.
- `sourceUrl`: URL where the data was extracted.
- `detectedAt`: Timestamp when this Actor extracted the row.
- `extractionMethod`: `structured_data` for valid Event/Offer schema, or `fallback_price_scan` for visible public price text.
- `confidenceScore`: Heuristic confidence score based on structured data availability.
- `missingFields`: Output fields that were not available from the source page.

### Sample input

```json
{
  "startUrls": [
    {
      "url": "https://example.com/events/indie-night-live"
    }
  ],
  "maxItems": 25,
  "maxConcurrency": 3,
  "extractionMode": "structuredDataWithFallback",
  "requestTimeoutSecs": 30
}
```

### Sample output

```json
{
  "eventName": "Indie Night Live",
  "performer": "The Examples",
  "venue": "Example Arena",
  "eventLocation": "Boston, MA, US",
  "eventDate": "2026-08-15T20:00:00-04:00",
  "ticketPriceMin": 45,
  "ticketPriceMax": 150,
  "currency": "USD",
  "ticketAvailability": "InStock",
  "ticketUrl": "https://example.com/events/indie-night-live/tickets",
  "platform": "example.com",
  "sourceUrl": "https://example.com/events/indie-night-live",
  "detectedAt": "2026-06-27T00:00:00.000Z",
  "extractionMethod": "structured_data",
  "confidenceScore": 0.95,
  "missingFields": []
}
```

### How to use

Run this Actor on Apify with public event URLs, export the dataset as JSON, CSV, Excel, or through the Apify API, then connect the output to Google Sheets, Make, Zapier, a webhook, or a dashboard. For price monitoring, save the input as an Apify task and schedule recurring runs.

### Pricing

This Actor uses a pay-per-event pricing model: $0.01 per tracked event row saved to the dataset. You pay only for the normalized event rows the Actor produces.

### Best practices

- Start with a small set of reviewed public event URLs.
- Prefer pages that expose schema.org `Event` and `Offer` JSON-LD.
- Use `structuredDataOnly` when you want the highest precision and can tolerate empty output.
- Use `structuredDataWithFallback` for reviewed public pages that show visible prices but no Event schema.
- Keep `maxConcurrency` low for smaller websites.
- Review source website rules before scheduling recurring runs.

### Compliance and responsible use

This Actor is for public data only. It must not be used to bypass logins, paywalls, CAPTCHAs, or security systems, collect private data, or support spam or abuse. Many ticket resale platforms (for example StubHub and Viagogo) use bot protection and have restrictive terms of service; this Actor is not designed to defeat those protections. It works on public event pages that expose `Event`/`Offer` JSON-LD and is intended for monitoring pages you are permitted to access. You are responsible for following applicable laws and source website rules.

### Limitations

- Output quality depends on the public structured data available on the source pages.
- The fallback price scan is intentionally conservative; it derives a price range from visible currency-and-number patterns and infers a name from the title/heading. It does not claim universal event-page support.
- Many resale sites use bot protection and restrictive ToS and are not supported targets.
- Some fields may be empty when the source does not publish them.
- Website markup and access policies can change.

### Troubleshooting

- Empty output usually means the page has no public `Event` JSON-LD and no visible price text.
- Invalid URL errors mean one or more input URLs are malformed.
- Slow runs can usually be improved by lowering `maxConcurrency`.
- Missing fields are source-data limitations, not inferred values.

### Changelog

- v0.1.0: Initial release with Event/Offer structured-data extraction and conservative public price fallback.

# Actor input Schema

## `startUrls` (type: `array`):

Public event pages to extract ticket prices and availability from. Use only URLs you are permitted to access without login, paywall bypass, CAPTCHA bypass, or security circumvention.

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

Maximum number of normalized dataset rows to save. The Actor stops pushing new rows when this limit is reached.

## `maxConcurrency` (type: `integer`):

How many event pages to process at once. Lower this for small websites or cautious monitoring.

## `extractionMode` (type: `string`):

Use structured data only, or allow a conservative fallback price scan of visible text on public event pages.

## `requestTimeoutSecs` (type: `integer`):

Maximum time to spend processing a single page before it is treated as failed.

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

Optional Apify proxy configuration. Use only where permitted by the source website and your compliance process.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://example.com/events/sample-concert"
    }
  ],
  "maxItems": 50,
  "maxConcurrency": 3,
  "extractionMode": "structuredDataWithFallback",
  "requestTimeoutSecs": 30
}
```

# Actor output Schema

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

Structured dataset items produced by this Actor.

# 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 = {
    "startUrls": [
        {
            "url": "https://example.com/events/sample-concert"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("technicaldost/event-ticket-price-monitor").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 = { "startUrls": [{ "url": "https://example.com/events/sample-concert" }] }

# Run the Actor and wait for it to finish
run = client.actor("technicaldost/event-ticket-price-monitor").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 '{
  "startUrls": [
    {
      "url": "https://example.com/events/sample-concert"
    }
  ]
}' |
apify call technicaldost/event-ticket-price-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,technicaldost/event-ticket-price-monitor"
        }
    }
}
```

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/DF7E9eLX89Aq7uWYH/builds/flgZmpGZYW46zBt02/openapi.json
