← writing

What a Quarantine Teaches You About an Export

The first file a venue sends is a message about its systems, not its data · October 2026

We rehearse client onboarding against a synthetic sportsbook export: a venue's real headers, its own vocabulary for sides and outcomes, prices in cents, timestamps in seconds. The first time the rehearsal ran, the surveillance platform refused the whole file. Not a row here and there — all of it. The quality gate looked at the first two thousand rows, found that every one of them failed, and put the file in quarantine with a single sentence: nothing was ingested, fix the mapping or the export, resend.

That refusal was the correct behavior, and it is the most useful thing that happened all week. Here is why.

A file that is 100% wrong is a mapping problem, not a data problem

An export where half the rows reject has a data-quality story: a feed that drops fields, an upstream bug, a corner of the matching engine nobody owns. An export where every row rejects has a simpler story: the two systems are not speaking the same language yet. The venue calls the side "B"; the spec says "buy". The venue's timestamp is Unix seconds; the spec wants milliseconds. The venue's price is 55; the spec wants 0.55. None of that is a defect in the venue's data. It is a translation that has not been written down.

The temptation — ours and every vendor's — is to be accommodating: accept the half-right rows, log the rest, let the backfill "mostly work." That is how a surveillance program ends up computing settlement win rates on the subset of trades whose side happened to parse. The gate exists so that a translation error cannot become a silent sampling error.

Rejects should be a recipe, not a verdict

A quarantine that only says "no" is a dead end. Ours keeps the sample: the first fifty rejected lines with their reasons, grouped by reason, next to the column mapper. "2,000 × side must be buy or sell (got B)" is not a complaint; it is the first line of the mapping. The same screen now proposes the mapping itself, from the file's own header row and the vocabulary it finds in the first two thousand lines — the admin reviews a guess labelled as a guess, applies it, and the dry run of the same file accepts every row that was refused a minute earlier.

Three steps, one screen, no ticket to engineering. The rehearsal clocks the whole sequence — provision, refuse, map, accept, ingest, first scan, offboard — in under a minute. We run it every week as a canary so the path a real client's first file will take is a path that was walked seven days ago.

What the export says about the venue

The shape of a first export tells you more about an operator's readiness than any questionnaire. A venue that can produce ninety days of trades, book events and settlements in one pull, with a stable schema and timestamps that mean one thing, has a matching engine someone understands end to end. A venue that needs three tries and a spreadsheet in between has a surveillance gap that predates any vendor — and the examiner's data request will find it the same way we did.

So the quarantine is not a failure of the proof of value. It is the first finding. It says: here is the exact distance between your systems and a record a regulator can rely on, measured in column names. Closing that distance is a morning's work with the right tools, and it is work the venue needs done whether or not it buys surveillance from anyone.

The test worth running on yourself

Before anyone asks for it, export one day of your own trades and validate it against a published spec — ours is at datatap.org/validate, in the browser, nothing uploaded. If the file comes back clean, you are ready for the request letter. If it comes back quarantined, you have just learned the cheapest thing you will learn this year.

DataTap ships the gate, the mapper and the rehearsal as the default onboarding path — the data guide · the data-spec pack · for DCM applicants.