Event records carry the event name, performer or team, venue, city, event date and time, and the category.
Listing records carry the section, row where published, quantity available, the all-in price per ticket, the currency and whether the price is fee-inclusive. That last field is not decoration: when this data sits beside another platform's, the flag is what stops the two being averaged.
Price observations carry a timestamp, because resale prices move continuously and a price without a time is not a fact about anything. A single observation per event describes one moment of a market that changes daily.
Seating geography - section and row - is kept as published rather than normalised into a scheme of our own, since venue seating conventions differ and a home-made normalisation would silently misplace listings.
Every row carries the collection timestamp and the event identifier so a price series can be assembled per event.