Eventim Scraper at a glance
Eventim Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes kind, recordid, eventid, productgroupid and url, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Web data
- Region
- Europe
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.20 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 27 options
Scrape CTS Eventim Germany and EU event catalogue: concerts, festivals, comedy, sports, dates, venues, prices and availability. Search by city, keyword, category and date, or paste event links. Incremental monitoring with NEW, UPDATED, REAPPEARED, EXPIRED, resume and MCP export.
What Eventim Scraper can do
- Two ways to find events. Search by city, keyword, category and date window, or paste Eventim event, city and venue links directly.
- Wide catalogue coverage. A search run walks every city and category combination you give it, not just one narrow query, and the coverage note below explains how to widen it further.
- Detail on demand. Switch on event detail reads to add the full venue address, price span and per-ticket-tier prices with availability (and the event page's own description and image), and pay the enrichment charge only for the events you actually read.
- Built for schedules. Incremental mode returns only new, updated and reappeared events on recurring runs, and can mark events that disappeared as expired (read the Max items caveat under "Resume and recurring updates" before turning that on).
- Resume support. Continue a large, interrupted pull without paying to recollect events you already have.
- Export anywhere. Download JSON, CSV or Excel, or pipe results into the apps you already use through MCP connectors.
Choose what to collect
These inputs let you configure Eventim Scraper - DE Events, Dates and Tickets. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Search reads Eventim by city, keyword, category and date. URL mode reads specific Eventim pages you paste. |
citiesarray | Search mode: city names to cover, one per line, for example Berlin, Hamburg, Munich. Each city is one catalogue scope. Leave empty to search all cities. |
querystring | Search mode: optional keyword, for example an artist, event or venue name. Applied inside every city and category scope. |
categoriesarray | Search mode: event categories, one per line, for example Concerts, Comedy, Classical, Sports. Each category multiplies the city scopes. Leave empty for all categories. |
dateFromstring | Only events on or after this date, format YYYY-MM-DD. Applies in search mode and to pasted city and venue links. Leave empty for no lower bound. |
dateTostring | Only events on or before this date, format YYYY-MM-DD. Applies in search mode and to pasted city and venue links. Leave empty for no upper bound. |
inStockOnlyboolean | Return only events whose tickets are currently bookable. Applies in search mode and to pasted city and venue links. |
Show 20 more inputs
| Input | What it controls |
|---|---|
sortstring | Ordering inside every scope: search mode, and pasted city or venue links. |
postalCodestring | Search mode: events around this German postal code (PLZ), for example 10117; the catalogue applies its own fixed radius. Applied inside every city and category scope. Leave empty for no postal filter. |
artiststring | Search mode: artist or performer name. It is appended to the keyword, so the catalogue keyword search runs on both together (there is no separate artist filter). Leave empty to skip. |
venuearray | Search mode: exact venue names as Eventim lists them, one per line, for example Uber Arena Berlin. Names must match exactly; a partial name returns nothing. Leave empty for all venues. |
priceMininteger | Search mode: from-price lower bound in euros. Leave empty for no lower bound. |
priceMaxinteger | Search mode: from-price upper bound in euros. Must not be below the minimum price. Leave empty for no upper bound. |
eventSeriesIdsarray | Search mode: event series (product group) IDs, one per line, as shown in the productGroupId output field. Each ID is its own scope, so the cities and categories fan out once per series. Leave empty for all series. |
urlsarray | URL mode: Eventim pages to read, one per line. Event links are read as single records; city and venue links read that city's catalogue scope. Multi-value supported. Left untouched in URL mode, the three example links below are read (one event, one city, one venue). Unsupported links (artist, series) are skipped with a warning. |
fetchDetailsboolean | Read each event's own page to add the full venue address, price span and per-tier prices with availability, plus the event page's own description and image (the listing's are used otherwise). Detail pages need the slower alternate connection (about 16 seconds per event), so this is off by default. Adds a per-event surcharge (see the section caption below). |
maxItemsinteger | Stop after this many events (0 = no limit; the run then stops when the scopes run out). |
maxPagesinteger | Upper bound on how many city and category scopes are walked (0 = no limit). Each scope serves up to 50 events, so Max items is the cap that normally stops a run first. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large pull without returning events already collected there. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns every matching event as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED events. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each search and link setup; use State key to name or deliberately share a monitoring campaign. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the search and link settings. |
emitUnchangedboolean | Off by default. Turn on to also return events that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have. |
emitExpiredboolean | Off by default. Turn on to also return events that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search. |
ignoreFieldsForChangesarray | Output field names that should NOT make an event count as UPDATED. Always ignored: raw (the verbatim upstream product data) and imageUrl (a CDN address that can rotate without the picture changing). Add fields such as tags or promoterName here if changes to them are not relevant to you. Use a dotted path (for example priceTiers.availability) to ignore a field inside a nested object or list. Ignored fields are still returned in the output. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API and Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output. |
notionParentPageUrlstring | URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
kindkindrecordIdrecordIdeventIdeventIdproductGroupIdproductGroupIdurlurltitletitlestartDatestartDateendDateendDateeventStatuseventStatuseventTypeeventTypevenueNamevenueNamevenueUrlvenueUrlShow 25 more fields
venueStreetvenueStreetvenueCityvenueCityvenueRegionvenueRegionvenuePostalCodevenuePostalCodevenueCountryvenueCountrypriceFrompriceFrompriceHighpriceHighpriceCurrencypriceCurrencypriceTierspriceTiersticketAvailabilityticketAvailabilitypromoterNamepromoterNamecategoriescategoriestagstagsdescriptiondescriptionimageUrlimageUrlvalidFromvalidFromchangeTypechangeTypechangedFieldschangedFieldsfirstSeenAtfirstSeenAtlastSeenAtlastSeenAtpriceCategoriespriceCategoriesvenuevenueattractionsattractionsratingratingeventSerieseventSeriesExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"kind": "event",
"recordId": "00000000",
"eventId": "00000000",
"productGroupId": "g00000000",
"url": "https://www.eventim.de/en/event/sample-artist-live-berlin-00000000/",
"title": "Sample Artist Live",
"startDate": "2027-05-01T20:00:00+02:00",
"endDate": "2027-05-01T22:30:00+02:00",
"eventStatus": "Available",
"eventType": "LiveEntertainment",
"venueName": "Sample Arena",
"venueUrl": "https://www.eventim.de/en/city/berlin-1/venue/sample-arena-1/",
"venueStreet": "Sample Platz 1",
"venueCity": "Berlin",
"venueRegion": "Berlin",
"venuePostalCode": "10115",
"venueCountry": "DE",
"priceFrom": 49.9,
"priceHigh": 99.9,
"priceCurrency": "EUR",
"priceTiers": [
{
"category": "Standing",
"price": 49.9,
"priceCurrency": "EUR",
"availability": "in_stock"
},
{
"category": "Seated",
"price": 99.9,
"priceCurrency": "EUR",
"availability": "in_stock"
}
],
"ticketAvailability": "in_stock",
"promoterName": "Sample Promoter GmbH",
"categories": [
"Concerts",
"Music"
],
"tags": [
"TICKETDIRECT"
],
"description": "A sample show description.",
"imageUrl": "https://www.eventim.de/obj/media/sample-image.jpg",
"validFrom": "2026-11-01T10:00:00+01:00"
}Ways to use this data
- Ticket resellers and price trackers: watch priceFrom, priceHigh and ticketAvailability across venues and cities for pricing and stock changes.
- Event discovery apps: feed concerts, festivals, comedy and sports dates into your own calendar, bot or notification tool.
- Tour and artist tracking: run a keyword search on a schedule with incremental mode to catch new tour dates as they go on sale.
- Venue and promoter research: collect venue addresses and promoter names for a city or category.
- Market research and reporting: build a dataset of event volume, categories and pricing across German cities over time.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Eventim Scraper return?
The documented output for Eventim Scraper includes kind, recordid, eventid, productgroupid, url, title, startdate and enddate. Availability of each field depends on the source page and the selected mode.
How much does Eventim Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Why does a search return at most 50 events per city or category?
That is the most common surprise: the catalogue serves at most 50 events for a single city and category combination and does not page deeper for it. Add more cities, categories or narrow the date window so the run covers the catalogue through more combinations instead of one large one. The "Coverage and the scope cap" note above has the details.
Can I get only new or changed events on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared events, and unchanged ones are not billed unless you turn on Emit unchanged. If you also turn on Emit expired, set Max items to 0 (see the known issue above).
Why did my run fail instead of returning an empty dataset?
If every scope or pasted link is rejected, the run stops with a clear message so "no matching events" is never confused with "nothing could be read". Run it again in a few minutes. If only some cities, categories or links could be read, you still get what was found, and the run succeeds with a status message naming what was skipped.
Why did an incremental run return far more rows than Max items?
EXPIRED rows are not counted against Max items: once a run qualifies to tombstone (not resumed, run-wide Max items total or Max scopes not reached, every scope finished), it returns every tracked event no longer found, however many that is. There is also a known issue: if Max items stopped a city or category early without the run reaching its total, the events it did not read are wrongly returned as EXPIRED (and come back as REAPPEARED on the next full run). With Emit expired on, set Max items to 0. Lower genuine expiry volume by narrowing the tracked scope (fewer cities or categories per stateKey) or by leaving Emit expired off on very large monitoring campaigns.
