Send us the source
Brief 01 What was hard 02 How it works 03 Numbers 04 Outcome 05 All cases → Send us the source

Atoms / Data extraction / Cases / Eventim

Ticketing — running since 2022

Eventim — eleven markets, one schema.

A European ticketing platform is not one site. It is eleven country sites with different layouts, languages, currencies, tax treatments and even different ideas of what a seat is — and a client trying to compare markets needs all of that arriving as one clean table.

The source is named because it is public; the client is not. Every figure on this page is a measured production number the client agreed to publish. Have a source of your own? Send it over, whatever its size — you get an answer within 24 hours.

Case fileeventimIn production
SourceEventim, 11 market sites
ClientEuropean ticketing group
Running since2022
DeliveryPostgres + daily Parquet
Events tracked640k
Markets11
Reach → Read → Reconcile → DeliverRecounted daily
15B

event records to date

4.4B

a year

98.6%

measured coverage

640k

events tracked

SourceEventim
VerticalTicketing
Running since2022 — without a rebuild
The brief01 / 05

What the client actually needed.

Not more rows. Every one of these projects started with somebody who already had data and could not use it for the decision in front of them.

The problem

Where it started

The client operates in several European markets and wanted to see all of them the way a single analyst would. What they had was eleven separate exports in eleven shapes, reconciled by hand each month by somebody who was the only person who understood the differences — and who was, inevitably, about to leave.

Fixed on day one

What we committed to

All eleven markets present in one schema, every day11 markets
Prices normalised to a base currency with the observed rate retainedBoth kept
Category and tier names mapped to one taxonomy across marketsMapped
Local tax and fee treatment preserved rather than averaged awayPer market

Every one of these is measured continuously and reported on the same dashboard the client watches. A commitment nobody measures is a sentence in a proposal.

What was hard02 / 05

Four things that beat the previous attempt.

None of these is solved by better headers or a bigger proxy pool. Each needs a different piece of engineering, and working out which one you are actually facing is most of the job.

01 — ShapeShape

Eleven different sites

Market sites share a brand and very little else. Layouts, identifiers, pagination and even the meaning of a category differ, so eleven collectors is the obvious answer and eleven collectors is a maintenance disaster.

What we doOne collector with a per-market adapter layer: the traversal, the reconciliation and the schema are shared, and only the market-specific reading is separate. A new market is an adapter, not a project.

02 — TaxonomyTaxonomy

A category that means different things

Seat tiers, price categories and event genres carry local names that do not map one to one. Naive mapping produces comparisons that look right and are not.

What we doA maintained taxonomy with explicit per-market mappings, reviewed with the client, and an unmapped-value alert so a new local category surfaces as a question rather than silently becoming 'other'.

03 — MoneyMoney

Currency and tax

Six currencies, different VAT treatment and fees that are sometimes included in the displayed price and sometimes not. Averaging across that produces numbers nobody can act on.

What we doPrices are stored in local currency with the observed rate and the tax treatment as attributes; the normalised base-currency figure is derived, never the only thing kept.

04 — DriftDrift

Markets change one at a time

A layout change in one market is invisible in aggregate metrics — total volume barely moves — and can go unnoticed for weeks.

What we doCoverage and field-fill rates are monitored per market rather than in aggregate, so a single market drifting triggers an alert on its own.

How it works03 / 05

Five decisions the pipeline is built on.

The architecture is not interesting; every extraction system has a queue, a fetcher and a parser. These are the decisions that made this one work where the last one did not.

01

One collector, eleven adapters

The expensive parts — traversal, scheduling, reconciliation, schema — are written once. Only the market-specific reading is per market, which is what keeps eleven markets from costing eleven times as much.

02

Map the taxonomy explicitly

Local categories map to a shared taxonomy through a reviewed table, not a heuristic. Anything unmapped raises an alert instead of being quietly bucketed.

03

Keep local, derive global

Local currency, local tax treatment and the observed exchange rate are all retained. The normalised figure is computed on top and can be recomputed when the client changes their mind about the method.

04

Monitor per market

Every quality metric exists per market. Aggregate monitoring is how a single broken market hides for a month behind ten healthy ones.

05

Make a new market cheap

Adding a twelfth market is an adapter, a taxonomy review and a day of verification. That was the actual requirement behind the brief, even though it was not in it.

The numbers04 / 05

What it does on an ordinary day.

Production figures, not a benchmark run. Coverage is recounted daily against an independent sample of the live source rather than asserted, which is why the numbers are not round.

Daily profile

Where the volume goes

Event records a day12M
Requests a day1.4M
Events tracked640k
Price categories mapped1 400
Unmapped values raised a week12

Twelve million records a day is 360 million a month, 4.4 billion a year and 15 billion since 2022, from 1.4 million requests — sixteen a second — because an event page carries its whole price-category table. A dozen unmapped values a week is the number that keeps the taxonomy honest: a system that never raises one is not detecting change, it is hiding it.

Headline

The four that are contractual

Records to date
15B
Coverage
98.6 %
Events
640k
Time to add a market
1 day

These four sit in the support agreement. When one of them drifts outside its band, we are alerted within fifteen minutes and fixing it is routine work under the monthly arrangement, not a change request.

What changed05 / 05

Before, and after.

The columns are the client's own numbers from before the rebuild and the measured ones from production today. The left column is the part most vendors would rather not put on a page.

MetricBeforeToday

Markets in one view

None — eleven exports

All eleven, one schema

Monthly reconciliation

Two days of manual work

None

Cross-market comparison

Approximate, by hand

Direct, with tax and currency kept

Adding a market

A project

A day

The person who used to reconcile the eleven exports by hand now works on the product. That was the outcome the client actually wanted.

Start here

Have a source of your own? Two lines are enough.

Send the source, the fields you need and roughly how often. You get a straight answer within 24 hours: whether it can be done, what makes it hard, what coverage is achievable and roughly what it costs to build and to run. Whatever the size.

Direct

NDA before technical detail, as always. If it isn't our kind of work, we say so in the first reply.