Myles Franklin
Things I’ve built
Data platform

MLC Core

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

Role
Sole engineer
Built
2 weeks · Jul 2026
For
A US music publisher
Scale
1.35B rights rows
Chain-of-title graph flowing from works to writer shares, publishers, admins, and collectors, with open chains in amber
  • 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
01

How it works

  1. 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.

  2. 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.

  3. 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.

  4. Detect money with nowhere to go

    Detectors run over the graph for open chains, recordings never linked to their song, and shadow registrations.

  5. Try to prove it wrong

    Every lead must survive gates for title collisions, public-domain standards, and a complete twin registration that already collects.

  6. Hand over evidence

    What survives becomes a ranked claim package, a one-page song dossier, and an outreach list.

02

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.

  1. Party records in5,866,887
    Writers, publishers, and administrators as registered
  2. Candidate pairs scored39,900,000
    Blocking, embeddings, and fuzzy matching, all in SQL
  3. Ambiguous pairs judged by an LLM50,247
    Gemini 2.5 Flash, in batch, for $11.60
  4. Real-world entities out4,959,258
    After label propagation, passing a six-test acceptance suite
Log scale · in pipeline order
03

Architecture

  1. AgentsNo raw SQL
    • Claude coordinator + workers
    • MCP Toolbox · 30 tools
    • OAuth connector
  2. ServingMillisecond reads
    • Cloud Spanner
    • Vector + graph + full-text in one query
  3. WarehouseGoverned, tested
    • BigQuery
    • Property graphs (GQL)
    • Dataform + assertions
    • Iceberg mirror
  4. Intelligence in SQL
    • EmbeddingGemma · 768-d
    • Vector indexes
    • Gemini adjudication
    • TimesFM forecasting
  5. IngestionWeekly
    • Cloud Run job
    • SFTP turbo-load fleet
04

Engineering details I’m proud of

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.