tritone
royalty audit

Upload

Drop royalty statements (and optional contracts) → normalized dataset.
Drop royalty statement files here
CSV · XLSX · PDF — multiple files OK
Contracts (optional)
PDF · DOCX — indexed for clause search
✓ Good: built_to_spill, other_lives, eben  ·  ✗ Avoid: bts_sx, other_lives_pias, built_to_spill_pub (these create dataset splits — one artist's data ends up scattered across multiple datasets)
▸ Dataset Tools
▸ Normalization Pipeline

Full pipeline for a dataset already in datasets/<name>/data_raw/: CSV normalization → export folders → parquet→DuckDB → benchmark & Qdrant.

▸ Multi-Label Dataset

Build multiple label DuckDB databases for one dataset. Provide a JSON array of {"source_label","output_label"} mappings.

▸ Band Builder (server folder)

Build a complete multi-label dataset from a server-side folder path. Scan auto-detects label sub-folders and contracts; edit the config JSON before building.

▸ Advanced Pipeline

Low-level normalization / parquet→DuckDB pipeline stages. Blank fields use their server-side defaults. Run stages in order 1→8.

Stage 1 · Full Normalization
Stage 2 · Export Folders
Stage 3 · Freeze Baseline
Stages 4-6 · Parquet→DuckDB
Stage 7 · Benchmark Parquet vs CSV
Stage 8 · Build ATO/TBD Qdrant
Build Dataset from Parquets / Index Contracts

Dashboard

Overview of uploaded artist data.

Select an artist from the top-right dropdown to view their data summary.

Summaries

Each period compares the label's own summary totals against our independent line-by-line count of the statement detail. Status says whether the two numbers agree; the Why column says why.
Match — the label's total and our own count agree. Verified.
Match (known difference) — the numbers differ, but this label is on the reviewed list below and this period's gap fits that reason.
Doesn't fit pattern — check — the label has a known reason, but this period's gap does not fit its usual pattern. Investigate this period.
Totals only — can't verify — the label sent totals only (no line items), so there is nothing to double-check against. Verify vs the printed statement.
Missing summary — we hold line-item detail for this period but no summary covers it (a coverage gap).
Mismatch — check — the numbers don't match and there is no known reason. A real red flag.

Benchmark

Compare rates across labels for the same DSP. Find underpayment.
Loading...
Master rate trends — $/unit by DSP

Select filters above. Chart updates automatically.

Single-Label Drill-Down

Granular per-period rates for one label (no rollup).

▸ DSP Coverage Matrix

Expand to load rows per Label × DSP (top 30).

Audit

Findings, quality assessment, contract reconciliation.
Action Items

Click Run Audit to generate a ranked list of claims you can take to your label.

Reports

Generate exportable audit reports and deep-dive analyses.
▸ Report Parameters

Optional tuning — applied when you click a report card below.

Revenue Segments

Pivot analysis by platform, year, territory, artist, sales type.

Error Quantification

Total money left on table. Breakdown by error type.

Platform Benchmarking

Per-platform per-year streaming rates with Z-score anomalies.

Track Deep Dive

Top/bottom earners, zero-pay tracks, rate anomalies.

Period Comparison

Period-over-period revenue and rate changes.

Contract Violations

Detect contract rate violations with ≥95% confidence.

Cross-Label Benchmark

Compare same-platform rates across multiple labels of one dataset.

Cross-Dataset Benchmark

Compare how multiple datasets are paid by the same DSP/period.

MLC Search

Search public MLC database for works and writers.

Tools

SQL queries, contract search, and more.
SQL Query