Distributor statements are at least predictable — each vendor has one layout. Publishing income is the opposite: every publisher, admin and sub-publisher exports its own shape, at work level rather than recording level, split by right type and routed through collecting societies. This tool normalizes those CSVs into the same earnings tape as everything else you drop in.
Drop your publisher or admin CSV alongside your ASCAP, MLC and distributor files — one run, one normalized dataset, one workbook.
Convert your statement now — freeA publishing statement's natural row is a musical work earning under a right type — PR (performing), MR (mechanical), SR (synchronisation) — from a source society or licensee, often in the society's own currency. The same song can appear a dozen times per statement: PRS performing income, MLC mechanicals passed through, a sync fee, each with its own period lag. Header vocabularies differ per company; there is no common spec the way ASCAP publishes one.
First, a dedicated publisher-format parser recognises the recurring shape of admin and publisher exports — columns carrying a work title, a right type, an amount and a currency, plus the usual companions (source society, territory, period, your share). Statements matching that shape are parsed with full confidence and normalized field by field.
Second, for layouts nobody has catalogued, a generic header-vocabulary mapper reads the header row and maps columns by meaning — title-ish, amount-ish, date-ish, currency-ish. Its output is explicitly labelled generic, and the mapping note shows exactly which header it took for which meaning, so you check its guesswork before trusting the numbers. Unreadable amounts are skipped and counted as warnings, never silently written as zero.
| Normalized field | Typical source headers |
|---|---|
| Work title | Work Title, Song Title, Composition, Title |
| Right type | Right Type, Income Type, Royalty Type — values like PR / MR / SR, Performance, Mechanical, Sync |
| Amount | Amount, Royalty, Net Amount, Payable, Your Share Amount |
| Currency | Currency, CCY, Curr — ISO codes kept as reported, never silently converted |
| Source | Society, Source, Licensee, Territory Society (PRS, GEMA, SACEM…) |
BMI is the notable gap in the CSV world: the statement of record is a PDF, and BMI publishes no file-format spec for the CSV export hiding behind the portal's "View CSV" button. The real PDF has a consistent anatomy: a header block on every page (affiliate name, account number, IP number, distribution date, US performance period, international accounting number); page-one summaries of current and year-to-date earnings; then detail sections per source — commercial radio, cable and local television, internet audio grouped by service and tier (SPOTIFY PREM, PANDORA PLUS…), other sources, and international performances grouped by country and society — each with per-source subtotals, bonus columns (hit song, standards, super usage) and section grand totals. A dedicated PDF parser for that layout is on the roadmap. Meanwhile, the portal's CSV export is close enough to the common publisher shape that the generic mapper often handles it.
SoundExchange pays the statutory digital-performance royalty for sound recordings (a neighbouring right — SR-side money, not publishing), delivered as a monthly "Detail CSV" from SoundExchange Direct with the period coded in the filename (AUG2022 style). It publishes no public spec of the detail-CSV columns, so a dedicated parser is on the roadmap pending verified real-world exports. Today, the generic mapper frequently maps its CSV cleanly — and shows you exactly how it mapped it.
Your statements never leave your browser. Parsing, normalization and workbook generation run in WebAssembly inside the tab. Nothing is uploaded; you can disconnect from the internet after the page loads and everything still works.
The tie-out proves the extraction, not the source. Publisher statements that print totals are reconciled: extracted rows must sum to the statement's own printed totals to the cent, or the discrepancy is shown. Machine exports with no printed totals report as SELF-CONSISTENT — internal checks passed, nothing stated to reconcile against. That is normal for raw exports, not a defect.
Usually. If it matches the common publisher shape (work title, right type, amount, currency) the dedicated parser takes it; otherwise the generic mapper has a go and labels the result so you can verify the column mapping before trusting the totals.
Performing, mechanical and synchronisation rights — the three ways a musical work earns. The earnings tape keeps the right type on every row so you can pivot income by type, source and period.
The PDF, not yet — a parser for BMI's PDF layout is on the roadmap. The CSV export from the BMI portal is worth trying now: the generic mapper often handles it, and it will tell you honestly if it could not.
No — deliberately. Amounts are kept in the currency the statement reported, with the currency on every row. Silent FX conversion is how earnings tapes stop tying out to their source statements.
New to statement anatomy? Start with how to read a royalty statement.
Drop every publisher and period in one run: one normalized dataset, one six-sheet Excel earnings tape, every mapping decision written down. Free, in your browser.
Convert your statement now — free