Method & source
Where the data comes from
Every figure on this site is derived from the public API behind rausgegangen.de. Nothing here is official, endorsed by, or affiliated with them.
This site publishes aggregate statistics — counts, shares, medians, distributions. It does not republish their catalogue: there is no bulk export, no descriptions, no images. Where a specific event is named, the title links back to the source page so the listing itself is read there.
The collection window
The API only serves today forward. Past dates return nothing, so the archive cannot be backfilled — it exists only because it was collected as it passed.
A crawl walks each city day by day. Only the days actually swept are a complete census, and every count-based figure here is clamped to that window. The database holds events years further out, but those arrive as a side effect: fetching one event returns its entire future schedule. Charting them would show a calendar that collapses over time, which is a sampling artifact, not a fact about the cities.
Two corrections worth knowing
Times are local. start_date is stored as timestamptz and the database
runs in UTC, so reading the hour directly reports UTC and shifts the whole clock
by one or two hours depending on daylight saving. Everything here converts to
Europe/Berlin before the hour is taken.
All-day listings are not 22:00 events. Listings in the “Jederzeit verfügbar” category — walking tours, escape rooms, city rallies — are stored as markers running 00:00 to 23:59 local rather than as real start times. Counted naively they pile onto a single hour and invent a spike. They are excluded from anything hour-shaped, and still counted in totals and category mix.
Prices
Prices arrive as display strings, not numbers: "19,00 bis 44,00 €",
"Eintritt frei", "Ticketshop", "Preis an AK". They are classified before
parsing — free, fixed, range, donation, or unknown — and only the numeric kinds
enter the price charts. Roughly one listing in twenty carries no number at all.
Treating those as 0 would drag every average down, so they are excluded rather
than assumed free.
The map
Positions come from the listings themselves, which carry coordinates only when they arrive through search; a listing reached through its parent event has none, so a small share of listings sit off the map. The figure is stated under the map rather than quietly dropped.
Two upstream defects are repaired before plotting. A handful of venues are stored at latitude 0, longitude 0 — a placeholder that would put them in the Gulf of Guinea — and at least one has its latitude and longitude transposed in the API's own payload. Both are corrected in aggregation, not in the chart, so every view sees the same repair.
Districts are assigned by testing each venue against the district polygons in the browser. Venues outside every district — a festival site an hour out of town, say — are drawn on the venue map but sit outside the district totals.
District outlines come from OpenStreetMap and are there for orientation only. They are simplified and committed to the repository, so building the site does not depend on a third-party service.
Venues, organizers, artists
Upstream these are one entity type distinguished by a type field, so a
listing's location and its organizer resolve through the same endpoint. Venue
figures here count dated listings at a location, not distinct events — a museum
running one exhibition daily for a month counts as a month of listings.
Reproducing it
The collector, schema, aggregation and this site are one repository. Figures are regenerated by a data loader that queries the database directly, so the page and the numbers cannot drift apart.