Uniqueness
Sheet columns are picker options, never auto-checked. A column from the old sheet with no match in the new one is dropped.

Industry · Usage
Volume extracts, warehouse events, uniqueness, drafts that wait. The invoice still has to match the commercial story — packaged, graduated, prepaid — not a blended rate nobody can defend.
The mess
Volume files and warehouse events are the product, not a side quest. Uniqueness has to be a column you chose, not “all columns.” Drafts wait until the period’s events are in. If the line is zero, the usual cause is no events — not a “wrong” list price.
Sheet columns are picker options, never auto-checked. A column from the old sheet with no match in the new one is dropped.
Uploading a sample stages nothing and bills no one. Process computes the preview. Only a new file or worksheet asks you to Process again.
Packaged, graduated, prepaid slabs, overage companions — so the customer sees the deal, not a single blended number.
What Sonic does
Internally we have processed usage extracts on the order of 2 GB in about fifteen minutes — ask to see it. Seat rows convert only the columns the expression references. Converting every column lets an unrelated text id fail arithmetic that never mentions it.
| Customer | Seat type | As of | Daily seats | Event |
|---|---|---|---|---|
| Nimbus Cloud | Editor | 1 Apr | 180 | — |
| Nimbus Cloud | Editor | 2 Apr | 180 | — |
| Nimbus Cloud | Editor | 3 Apr | 196 | Add 16 |
| Westbound Logistics | Viewer | 3 Apr | 40 | — |
| Westbound Logistics | Viewer | 4 Apr | 38 | Remove 2 |
Formula · daily_seats first, then columns, then helpers. Events only where the count changed.
Seat formulae
Do not mix them in one flat list. Helpers evaluate before the daily-value formula so it can reference them.
01
Sonic’s current balance for that customer and seat type. Always first on a seat formula.
02
Only the sheet columns the expression references.
03
Named formulae that run first so the daily-value expression can call them.
Usage
2 templates
Event files
Seats
1 template
Daily snapshots
Last process
3 Apr
Sample only
| Template | Grain | Worksheet | Status |
|---|---|---|---|
| API events | Usage | daily_export | Ready |
| Seat snapshots | Seats | pupm_daily | Ready |
| Warehouse sync | Usage | — | Connected |
| Legacy CSV | Usage | sheet1 | Needs process |
Uploading a sample does not bill. Process computes the preview.
A warehouse pipe is how events arrive without a monthly hero upload. Open a builder from the list. The sample is one current file — replacing it drops the previous sheet.
Usual mess
Usage is what they did. The invoice is a blended rate nobody can defend.
Seats imported from a vendor increase column that breaks at customer boundaries.
In Sonic
Packaged, graduated, prepaid slabs, overage companions — the line matches the deal.
Snapshots versus the balance on record. Events only when the count changes.
Questions
These are the questions this page raises. The full list lives on FAQ.
Templates map vendor files or a Postgres connection. Usage is events. Seats are daily snapshots compared to the balance on record. Large files are a first-class path, not an afterthought.
Snapshots. Each row is how many they had that day. Sonic compares it to the balance on record and writes an event only when the count changes. Vendor increase/delta columns are not imported — they break at customer boundaries.
An optional hold on seat adds. If you set N days, an increase on date D bills only if the new count still holds through D+N. Removals bill immediately. Incomplete files show as awaiting, not as a guessed invoice line.
Next
A walkthrough on the agreements and files you actually bill from — not a slide deck.