# Eventim Events Scraper - Concerts, Prices & Availability (`zen-studio/eventim-scraper`) Actor

Extract events, ticket prices, and availability from eventim.de. Search by category, city, date, artist, or venue across 532 categories. Get venue details, ratings, per-category price breakdowns, and event series metadata. 1,000+ events/minute. Export to JSON, CSV, or Excel.

- **URL**: https://apify.com/zen-studio/eventim-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** Social media, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 28 total users, 7 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.99 / 1,000 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

## Eventim Scraper | Events, Concerts & Ticket Prices from eventim.de (2026)

![1,000 Eventim events in under 60 seconds. Ticket prices, availability and venue details.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/eventim-scraper-readme-hero-v1.png)

**From Zen Studio**, creators of [10times Events](https://apify.com/zen-studio/10times-events-scraper), with **19,000+ lifetime runs**, and [Ticombo Tickets](https://apify.com/zen-studio/ticombo-scraper). Built for event discovery, ticket research and market monitoring.

### Why choose this actor?

- **1,000 events in under 60 seconds.** Collect event dates, starting prices and availability across Germany, ready to compare in your own dataset.
- **Know what tickets cost and whether they are available.** Get EUR prices, availability status and sold-out dates. Enable the optional seating-category breakdown to compare individual ticket tiers.
- **Put every event on the map.** Venue names, cities, postcodes and coordinates sit alongside artists and event links. Narrow your search by category, artist, venue, city, date or price.

<a href="https://console.apify.com/actors/Oy8cfw5IuzRzJidqx/input" data-demo-cta="true"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/eventim-scraper-readme-cta-v1.svg" width="250" height="48" alt="Explore 10 Eventim events →"></a>

### Try 10 concert events

Open the actor's [input page](https://console.apify.com/actors/Oy8cfw5IuzRzJidqx/input), switch to JSON and paste:

```json
{
  "categories": [
    "Konzerte"
  ],
  "maxResults": 10,
  "includeCategoryPricing": false
}
```

Export JSON, CSV or Excel. JSON preserves nested venue details and ticket categories. This example uses standard event pricing; set `includeCategoryPricing` to `true` for seating-category prices, which take longer and carry an additional charge.

<table><tr><td colspan="3" style="background:#FECA27;padding:10px 12px;border:none"><strong style="color:#202867">Zen Studio · Events &amp; Tickets</strong></td></tr><tr><td style="background:#FFF0BA;padding:8px 10px;border:1px solid #E9DDAE;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-Oy8cfw5IuzRzJidqx-9j7J9h99FL-eventim-api-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0">&nbsp;<a href="https://apify.com/zen-studio/eventim-scraper" style="color:#202867;font-size:13px;font-weight:700;text-decoration:none">Eventim</a></span><br><span style="white-space:nowrap;font-size:12px;color:#464969">You are here</span></td><td style="background:#FFF8DE;padding:8px 10px;border:1px solid #E9DDAE;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-G7kur4paCzryfTAeX-ZQYIeUVyoV-Gemini_Generated_Image_iebjpriebjpriebj.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0">&nbsp;<a href="https://apify.com/zen-studio/10times-events-scraper" style="color:#202867;font-size:13px;font-weight:700;text-decoration:none">10times</a></span><br><span style="white-space:nowrap;font-size:12px;color:#464969">Trade shows & conferences</span></td><td style="background:#FFF8DE;padding:8px 10px;border:1px solid #E9DDAE;vertical-align:top"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-rhpmVH9hEstdDBk4C-7wWaRoHm3G-ticombo-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0">&nbsp;<a href="https://apify.com/zen-studio/ticombo-scraper" style="color:#202867;font-size:13px;font-weight:700;text-decoration:none">Ticombo</a></span><br><span style="white-space:nowrap;font-size:12px;color:#464969">Tickets & seller listings</span></td></tr></table>

#### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
zen-studio/eventim-scraper on Apify. Call: ApifyClient("TOKEN").actor("zen-studio/eventim-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: categories (array, 532 enum values like "Konzerte", "Jazz & Blues", "Heavy Metal"), city (string), maxResults (int, default 1000). Full actor spec (input schema with all params/enums/defaults, output dataset fields, README): GET https://api.apify.com/v2/acts/zen-studio~eventim-scraper/builds/default (Bearer TOKEN) → inputSchema (JSON string, parse it), actorDefinition.storages.dataset.views.overview.transformation.fields (output field list), readme. Free tier: 10 runs, 10 results/run. Get token: https://console.apify.com/account/integrations To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.
```

### How to Scrape Eventim Events

#### Basic — browse concerts

```json
{
    "categories": ["Konzerte"],
    "maxResults": 100
}
```

#### Filter by city and date

```json
{
    "categories": ["Jazz & Blues"],
    "city": "Berlin",
    "dateFrom": "2026-06-01",
    "dateTo": "2026-06-30",
    "sortBy": "DateAsc"
}
```

#### Search by artist

```json
{
    "artist": "Rammstein",
    "maxResults": 50
}
```

#### Filter by price range

```json
{
    "categories": ["Konzerte"],
    "priceMin": 30,
    "priceMax": 80,
    "city": "München"
}
```

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchTerm` | string | | Free-text search across artists, events, venues |
| `categories` | array | `["Konzerte"]` | Pick from 532 categories (type to search) |
| `city` | string | | City name (Berlin, München, Köln, etc.) |
| `dateFrom` | string | | Start date (YYYY-MM-DD) |
| `dateTo` | string | | End date (YYYY-MM-DD) |
| `artist` | string | | Artist name (auto-resolved to ID) |
| `venue` | string | | Venue name (auto-resolved to ID) |
| `postalCode` | string | | German PLZ for radius search |
| `distanceKm` | integer | `20` | Radius in km around postal code |
| `priceMin` | integer | | Min ticket price in EUR |
| `priceMax` | integer | | Max ticket price in EUR |
| `sortBy` | string | `Recommendation` | Sort: Recommendation, DateAsc, DateDesc, Rating, NameAsc, NameDesc |
| `eventSeriesIds` | array | `[]` | Direct lookup by series ID (skips search) |
| `includeCategoryPricing` | boolean | `false` | Fetch per-category price breakdown (slower) |
| `maxResults` | integer | `1000` | Maximum events to return |

### What Data Can You Extract from Eventim?

Every result includes:

- **Event details** — ID, name, URL, description, image, type, performing artists, start/end date
- **Venue** — name, city, street address, postal code, country, lat/lng coordinates
- **Pricing** — starting price, display price, crossed-out price, currency, per-category breakdown
- **Availability** — status (Available, SoldOut, Cancelled, etc.), localized status message, in-stock flag
- **Ratings** — count and average score
- **Categories** — hierarchical (parent + child)
- **Series info** — series ID, name, description, total events, date range

#### Output Example

Every field the Actor produces, from a real run:

```json
{
  "eventId": "20872346",
  "eventName": "André Rieu - Tour 2026",
  "eventUrl": "https://www.eventim.de/event/andre-rieu-tour-2026-westfalenhalle-20872346/",
  "description": "Weltstar André Rieu geht im Jahr 2026 auf große Deutschlandtour!",
  "imageUrl": "https://www.eventim.de/obj/media/DE-eventim/teaser/222x222/2025/andre-rieu-26-tickets-2025.jpg",
  "type": "LiveEntertainment",
  "attractions": ["André Rieu"],
  "startDate": "2026-11-14T19:30:00+01:00",
  "endDate": "2026-11-14T22:15:00.000+01:00",
  "venue": {
    "name": "Westfalenhalle",
    "city": "Dortmund",
    "streetAddress": "Rheinlanddamm 200",
    "postalCode": "44139",
    "country": "DE",
    "latitude": 51.516111127605235,
    "longitude": 7.468333315966418
  },
  "categories": [
    { "name": "Kultur" },
    { "name": "Klassische Konzerte", "parent": "Kultur" },
    { "name": "VIP & Extras" },
    { "name": "VIP & Specials", "parent": "VIP & Extras" }
  ],
  "tags": ["TICKETDIRECT", "FANTICKET", "FANSALE"],
  "status": "Available",
  "statusMessage": "Verfügbar",
  "inStock": true,
  "hasRecommendation": false,
  "marketingLabels": [],
  "rating": { "average": 4.604300022125244, "count": 5393 },
  "fromPrice": 43.5,
  "fromPriceDisplay": "€ 43,50",
  "crossedOutPrice": null,
  "currency": "EUR",
  "priceCategories": [
    { "name": "Kategorie 1 Sitzplatz", "price": 149.5, "currency": "EUR", "availability": "OutOfStock" },
    { "name": "Kategorie 2 Sitzplatz", "price": 129.5, "currency": "EUR", "availability": "InStock" },
    { "name": "Kategorie 3 Sitzplatz", "price": 109.5, "currency": "EUR", "availability": "InStock" },
    { "name": "Kategorie 4 Sitzplatz", "price": 83.5, "currency": "EUR", "availability": "InStock" },
    { "name": "Kategorie 5 Sitzplatz", "price": 63.5, "currency": "EUR", "availability": "InStock" },
    { "name": "Kategorie 6 Sitzplatz / sichtbehindert", "price": 43.5, "currency": "EUR", "availability": "InStock" }
  ],
  "eventSeries": {
    "id": "3829711",
    "name": null,
    "description": null,
    "url": null,
    "totalEvents": null,
    "startDate": null,
    "endDate": null
  },
  "scrapedAt": "2026-07-22T08:15:43.400913+00:00"
}
```

`priceCategories` is filled in when `includeCategoryPricing` is on. The `eventSeries` name, description, URL, event count and date range are filled in on the [direct series lookup](#direct-series-lookup) path; a normal search returns the series ID only.

### Advanced Usage

#### Niche genre tags

Use long-tail tags from the 486-item "Weitere Kategorien" list to find specific genres.

```json
{
    "categories": ["Heavy Metal", "Punk"],
    "city": "Hamburg",
    "maxResults": 200
}
```

#### Radius search around a postal code

Find events within 50km of central Munich.

```json
{
    "postalCode": "80331",
    "distanceKm": 50,
    "categories": ["Konzerte"],
    "sortBy": "DateAsc"
}
```

#### Per-category ticket pricing

Get the full price breakdown per ticket category (Kategorie 1, 2, 3, Stehplatz, etc.).

```json
{
    "categories": ["Kultur", "Klassische Konzerte"],
    "city": "Berlin",
    "includeCategoryPricing": true,
    "maxResults": 50
}
```

#### Direct series lookup

If you already have event series IDs from a previous scrape, look them up directly.

```json
{
    "eventSeriesIds": ["3789122", "3967548"]
}
```

### Pricing — Pay Per Event (PPE)

**$6.99 per 1,000 results.**

| Results | Cost |
|---------|------|
| 10 | ~$0.07 |
| 100 | ~$0.70 |
| 1,000 | ~$6.99 |

Optional seating-category pricing adds **$2.99 per 1,000 events** when `includeCategoryPricing` is enabled.

Free tier: 10 lifetime runs, 10 results per run.

#### Cost Optimization

- Use `categories` and `city` to narrow results before scraping
- Set `maxResults` to only what you need
- Keep `includeCategoryPricing` off unless you need per-category prices (it's slower)
- Split large sweeps by date window or city — one search reaches at most 10,000 events

### FAQ

**How many events can I extract?**
eventim.de has 100,000+ events at any time across all categories. A single search returns up to 10,000 of them. To cover more, split the run by category, city, or date window — the Actor tells you in the log when a search has more events than one run can reach.

**How fresh is the data?**
Real-time. Every run fetches live data directly from eventim.de.

**What categories are available?**
532 total: 8 top-level (Konzerte, Sport, Kultur, Humor, Musical & Show, Freizeit, Ticket-Gutschein, VIP & Extras), 49 subcategories (Jazz & Blues, Rock & Pop, Fußball, Theater, etc.), and 486 niche tags (Heavy Metal, K-Pop, 2. Bundesliga, Poetry-Slam, etc.).

**Can I filter by price?**
Yes. Set `priceMin` and/or `priceMax` (in EUR) to keep only events whose starting price falls in that band.

**What does "per-category pricing" mean?**
German venues often have tiered seating (Kategorie 1, 2, 3, Stehplatz). The `includeCategoryPricing` option fetches the price for each tier. It's slower because it loads each event's detail page.

**What's the "status" field?**
Available, SoldOut, Cancelled, Moved, Blocked, InProgress, Expired, or Released. Rarer states appear in the same style, e.g. SoldOutFansaleAvailable for a sold-out date with resale tickets, or NoAmount for add-ons like parking that carry no ticket price. The `statusMessage` field gives the German-localized version (e.g. "Wenige Tickets" = few tickets left).

**Does it work for countries outside Germany?**
Currently DE only. Other CTS Eventim markets (AT, CH, PL, NL) use different configurations and haven't been tested.

**What's the free tier?**
10 lifetime runs with 10 results per run. No credit card required.

**Can I use this with my AI assistant?**
Yes. Copy the "Copy to your AI assistant" block above into any LLM. The full input schema with all 532 categories is available via the Apify API.

**How fast is it?**
1,000 events with prices in under 60 seconds. Speed depends on proxy latency and whether per-category pricing is enabled.

### Support

- **Bugs**: Issues tab
- **Features**: Issues tab

### Legal Compliance

Extracts publicly available data. Users must comply with eventim.de terms and data protection regulations (GDPR, CCPA).

***

*Scrape events, prices, and availability from Germany's largest ticket platform.*

# Actor input Schema

## `searchTerm` (type: `string`):

Search across artists, events, and venues.<br><br>Leave empty to browse by category instead.

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

Pick one or more from 532 categories. Type the exact name as shown on eventim.de.<br><br><b>Top-level (8):</b> Konzerte, Kultur, Freizeit, Humor, Musical & Show, Sport, Ticket-Gutschein, VIP & Extras<br><b>Subcategories (49):</b> Jazz & Blues, Rock & Pop, Festivals, Theater, Comedy, Fußball, etc.<br><b>Tags (486):</b> Heavy Metal, Punk, K-Pop, 2000er, Poetry-Slam, etc.<br><br>The actor validates names and returns an error for unknown entries.

## `maxResults` (type: `integer`):

Maximum number of events to return.

## `sortBy` (type: `string`):

How to sort the results.

## `includeCategoryPricing` (type: `boolean`):

Fetch individual ticket category prices (e.g. Kategorie 1, Kategorie 2) from the event detail page.<br><br><b>Slower:</b> requires one extra page load per event.

## `city` (type: `string`):

Filter to events in a specific city.<br><br>Examples: <code>Berlin</code>, <code>München</code>, <code>Köln</code>, <code>Hamburg</code>

## `dateFrom` (type: `string`):

Inclusive start date in <code>YYYY-MM-DD</code> format.

## `dateTo` (type: `string`):

Inclusive end date in <code>YYYY-MM-DD</code> format.

## `postalCode` (type: `string`):

German PLZ for radius search. Use with <b>Radius</b> below.<br><br>Example: <code>10115</code> (Berlin Mitte)

## `distanceKm` (type: `integer`):

Search radius around the postal code in kilometers.

## `artist` (type: `string`):

Filter to a specific artist. The actor looks up the artist ID automatically via the eventim autosuggest.

## `venue` (type: `string`):

Filter to a specific venue.<br><br>Examples: <code>Olympiahalle München</code>, <code>ZAG Arena</code>

## `priceMin` (type: `integer`):

Minimum ticket price in EUR.<br><br>When set, the actor returns individual events instead of event series.

## `priceMax` (type: `integer`):

Maximum ticket price in EUR.

## `eventSeriesIds` (type: `array`):

Look up specific event series by their ID. Skips the search entirely.<br><br>You can find these IDs in the <code>eventSeries.id</code> field of previous scrape results.

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

Residential DE proxies recommended for reliable access.

## `feedback` (type: `string`):

For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns.

## Actor input object example

```json
{
  "searchTerm": "apache 207",
  "categories": [
    "Konzerte"
  ],
  "maxResults": 100,
  "sortBy": "Recommendation",
  "includeCategoryPricing": false,
  "city": "",
  "distanceKm": 20,
  "eventSeriesIds": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# 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 = {
    "searchTerm": "apache 207",
    "categories": [
        "Konzerte"
    ],
    "maxResults": 100,
    "city": "",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/eventim-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 = {
    "searchTerm": "apache 207",
    "categories": ["Konzerte"],
    "maxResults": 100,
    "city": "",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/eventim-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 '{
  "searchTerm": "apache 207",
  "categories": [
    "Konzerte"
  ],
  "maxResults": 100,
  "city": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call zen-studio/eventim-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zen-studio/eventim-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/Oy8cfw5IuzRzJidqx/builds/fA3d9wVQTfhrcqXoM/openapi.json
