MLC Core
A rights-intelligence platform that turns the entire US mechanical-rights database into a graph and finds royalties nobody is collecting.

- BigQuery Graph
- Cloud Spanner
- Dataform
- Gemini
- MCP
In the US, songwriters’ mechanical royalties flow through the Mechanical Licensing Collective. When a registration is incomplete, the money has nowhere to go. A writer’s share may have no publisher attached, a recording may never get linked to its song, or a duplicate registration may quietly absorb the claim.
The MLC publishes its whole database every week, but it is enormous and hard to read correctly. Ownership is a chain of shares passing from writer to publisher to administrator, so adding up percentages gives the wrong answer. I built MLC Core to load the entire snapshot, model it as a graph, and find the royalties nobody is collecting, each one backed by evidence a person can check.
- Works
- 59M
- Shares walked
- 189M
- Real entities
- 4.96M
- Agent tools
- 30
How it works
Load the whole database, weekly
A scheduled job pulls the full snapshot into a governed warehouse. The first backfill used a fleet of eight machines to move 415 GB in about 50 minutes.
Model ownership as a graph
Works, writers, publishers, and administrators become nodes; shares become edges. Walking every chain of title in the dataset takes about 14 seconds and costs about ten cents.
Work out who is who
The same publisher appears under dozens of spellings. An entity-resolution pipeline collapses 5.87M messy party records into 4.96M real-world entities.
Detect money with nowhere to go
Detectors run over the graph for open chains, recordings never linked to their song, and shadow registrations.
Try to prove it wrong
Every lead must survive gates for title collisions, public-domain standards, and a complete twin registration that already collects.
Hand over evidence
What survives becomes a ranked claim package, a one-page song dossier, and an outreach list.
Entity resolution, inside the warehouse
Matching millions of names is a cost problem as much as an accuracy one. Cheap steps run first and narrow the field: blocking, then embeddings, then fuzzy scoring. A language model only sees the 50,247 pairs that are actually ambiguous. That whole step cost $11.60. I also tested an off-the-shelf entity-resolution library and dropped it after the numbers came in.
- Party records in5,866,887Writers, publishers, and administrators as registered
- Candidate pairs scored39,900,000Blocking, embeddings, and fuzzy matching, all in SQL
- Ambiguous pairs judged by an LLM50,247Gemini 2.5 Flash, in batch, for $11.60
- Real-world entities out4,959,258After label propagation, passing a six-test acceptance suite
Architecture
- AgentsNo raw SQL
- Claude coordinator + workers
- MCP Toolbox · 30 tools
- OAuth connector
- ServingMillisecond reads
- Cloud Spanner
- Vector + graph + full-text in one query
- WarehouseGoverned, tested
- BigQuery
- Property graphs (GQL)
- Dataform + assertions
- Iceberg mirror
- Intelligence in SQL
- EmbeddingGemma · 768-d
- Vector indexes
- Gemini adjudication
- TimesFM forecasting
- IngestionWeekly
- Cloud Run job
- SFTP turbo-load fleet
Engineering details I’m proud of
- 010 mismatches
Chain of title as a native graph
The graph rewrite was checked against the original chain tables on more than 100,000 roots with zero mismatches before it replaced them.
- 0212–23 ms
Lookups 500× faster
All 189M shares were mirrored bit for bit into Spanner. A chain-status lookup dropped from 13.5 seconds to 12–23 ms.
- 03recall@10 0.94
One query: similar, connected, and named
Nearest-neighbor search, a graph walk, and full-text matching run in a single query in about 200 ms, with 0.94 recall at 10.
- 0479% filtered
Gates that kill false positives
A writer-overlap gate threw out 7,030 of 8,843 title-collision leads, so people only review leads that hold up.
- 0530 tools
Agents that can’t go off the rails
Agents reach the data only through 30 curated, typed tools. A planner model delegates to cheaper workers, and repeatable workflows live as skills.
- 0690.2% coverage
Forecasts with honest error bars
Listener forecasts were backtested on 116 series and recalibrated, raising interval coverage from 82.6% to 90.2%.
Built under a client engagement. Client names, catalogs, and recovery figures are confidential, so every number here describes the public MLC dataset or the method itself.