TICKETRECON
Does your landfill invoice match your scale tickets?
TicketRecon is a waste hauling invoice audit for independent haulers and roll-off operators. Give it one month of landfill scale tickets and that month's invoice. It recomputes every line against the facility's rate schedule and hands back an exception packet: each mismatch with the ticket evidence, the invoice line, the rule it breaks, and the dollar amount.
The first month is free. If it comes back clean, no discrepancies were found in the lines your files covered — that is all a clean result claims. If it doesn't come back clean, you have something you can dispute with.
Run the sample month — no upload needed Upload your own CSVs

What a scale ticket check catches
- Duplicate billings — the same ticket charged twice.
- Wrong material rates — brush billed at the trash rate, and other class mix-ups.
- Inflated net weights — the invoice's net doesn't match the ticket's printed net.
- Phantom invoice lines — charges for ticket numbers that don't exist in your ticket file.
- Tickets never billed — valid loads missing from the invoice (flagged for your books, even when it's in your favor).
- Below-minimum undercharges — loads billed under the per-load minimum. Reported both ways: a check you can't trust in both directions isn't worth disputing with.
- Unsupported penalties — contamination penalties billed when the ticket records no definite contamination assessment, or records that none was found. A merely "suspected" note is never priced automatically; a penalty billed on one is flagged for your review instead.
The specimen month (synthetic data)
The demo runs on a made-up month — 40 scale tickets, 41 invoice lines — priced on a real published schedule: Fairfax County's commercial disposal rates, FY27 (trash $98/ton, brush $59/ton, yard waste $96/ton; per-class minimums assigned inside the county's published $39–$109 range).
| Billed total | $27,415.06 |
|---|---|
| Expected total | $25,841.71 |
| Gross overbilled | $2,327.65 |
| Gross underbilled | $754.30 |
| Net effect | +$1,573.35 in 7 lines |
34 of 41 lines were exactly right. The 7 that weren't are the seven kinds of error listed above, one of each. Run it yourself — the sample button at the top recomputes it live.
Try it with your month
Sample files: tickets.csv · invoice.csv · rates.csv
CSV formats
Tickets: ticket_no,date,truck_id,material,gross_t,tare_t,net_t,notes — the notes carry the scale house's own wording: a penalty is priced only when the note records a definite contamination assessment. A note saying none was found supports no penalty, and a "suspected" mention sends any billed penalty to review, unpriced.
Invoice: ticket_no,billed_net_t,billed_rate,billed_penalty_amount,billed_amount
Rates: material,rate_per_ton,minimum_per_load, plus one row contamination_penalty_per_ton,185, carrying your facility's penalty per ton. Material names in the rates file must match the material names on your tickets. List each material once and carry exactly one penalty row — a duplicate row for a material (or a second penalty row) is rejected with the duplicate named, whether the rows agree or conflict, because a schedule with two rows for one material has no single rate to price against.
Every row must have exactly as many fields as its header: a field that contains a comma (a note like "Checked for contamination, none found" is the common case) must be wrapped in double quotes, or the run is rejected with the row named — no field is ever silently dropped. Each column name may appear only once in a header: a duplicated column name is rejected with the column named, because two columns under one name cannot both be read.
How it works
- Match. Every invoice line is joined to a scale ticket by ticket number.
- Recompute. Each charge is rebuilt from the ticket: material rate × ticket net, per-load minimum applied, contamination penalty only when the ticket records a definite contamination assessment.
- Report. Anything that doesn't match lands in the exception packet with both sides of the evidence and the exact dollar effect. Clean lines are counted, not buried.
Privacy, plainly
- Online CSV runs are processed in memory and not stored by TicketRecon — no database, no file storage, nothing kept after your packet is generated. Emailed records remain in the mailbox, and working files follow our seven-day-after-delivery deletion policy.
- No accounts, no cookies, no tracking.
- Caps: 512 KB per file, 5,000 rows per file. Runs are rate-limited so the demo stays up for everyone.
Honest limits
- This online check takes CSV. Most haulers hold paper tickets and PDF invoices — for the free month, email those instead and we'll do the intake by hand: johnnyribcage@proton.me. When you email, include your facility's applicable rate schedule and its effective dates, so there is no intake round-trip.
- Ticket weights are trusted as printed; the ticket's net is the authority. A row whose weights cannot describe a load — a negative weight, gross below tare, or a net that disagrees with gross − tare beyond scale-print rounding — is rejected as invalid input, never priced.
- Taxes, credits, partial payments, and invoices summarized by day or material instead of by ticket are outside this check.
- This is an audit aid, not a guarantee. Check each exception against your own records before you dispute a charge.
First month free
Send one month of scale tickets and that month's landfill invoice — by the form above if you have CSVs, or by email if you have paper or PDFs — and the exception packet comes back free, no obligation. Reach us at johnnyribcage@proton.me or message @JohnnyRibcage on X.