Building a Lobbying Compliance Platform with Graph Data
Why a spreadsheet can't model political relationships — and what Neo4j makes possible.
Lobbying data is public. Most of it is sitting in state and federal disclosure filings — lobbyist registrations, expenditure reports, legislation sponsorships, campaign contributions. The problem isn't access. It's structure.
A spreadsheet sees a row. A relational database sees a table. Neither of them naturally answers the question an investigative journalist or a compliance officer actually needs answered: Who is connected to whom, through what, and over what period of time?
That's a graph problem.
What the platform tracks
The Lobbying Compliance Platform models three things as nodes: people (lobbyists, legislators, donors), organizations (firms, PACs, agencies), and legislation (bills, amendments, regulatory actions). The relationships between them — registration filings, campaign contributions, co-sponsorships, client engagements — are edges with timestamps and dollar amounts attached.
When you query it, you're not running a JOIN. You're traversing a network. "Show me every piece of legislation that Firm X has touched, grouped by the legislators who sponsored it, filtered to the last 18 months" is a single Cypher query. In SQL it's a multi-table join that takes a junior analyst a morning to write.
Why this matters for compliance
Most compliance workflows today involve someone manually cross-referencing PDFs. A lobbyist registers in January. A bill they've been engaged on passes in March. A contribution to the bill's sponsor surfaces in a June filing. Connecting those three events requires a human to hold all of it in their head — or a spreadsheet formula someone will eventually break.
The graph holds it automatically. New filings get ingested and linked. Relationships that were invisible in isolation become traversable paths.
The investigative angle
For journalists, the value is pattern detection at a scale that manual research can't reach. Not "did this lobbyist contact this legislator" — but "which lobbyists have worked for clients with active contracts in the same agencies their former employers regulate, within the last three years."
That question takes months to answer manually. It's a 200ms query on a graph.
What's next
The current build handles ingestion, entity resolution, and basic relationship queries. I'm working on a visual graph explorer — something that lets a non-technical investigator browse the network without writing Cypher — and an alert layer that flags new connections as filings come in.
If you work in government transparency, investigative journalism, or compliance and want to see where it's headed, I'd like to talk.