$ FOLLOW THE MONEY Florida Campaign-Finance Knowledge Graph
Investigative campaign-finance intelligence

Follow the money.
Find the conflict.

A knowledge-graph explorer over Florida's complete Division of Elections contribution record. Resolve donors and recipients, map money between candidates, committees, judges, and attorneys — and cite every dollar to a filed report.

Built for litigators, investigators, journalists, and compliance teams.

Millions+
Contribution records
Multi-cycle
Election cycles loaded
Entity·resolved
Donors & recipients linked
100%
Figures traceable to filings

What it's for

Questions a money graph can answer that a spreadsheet can't.

Contribution data is public — but it's fragmented across filings, spelled inconsistently, and disconnected. We resolve identities and rebuild the network so you can ask relationship questions directly.

USE CASE 01 — flagship

Judicial conflict-of-interest discovery

Before a hearing, check whether the attorneys appearing before a judge — or their firms and PACs — contributed to that judge's campaign. Surface direct donations and shared funding circles that bear on a recusal motion or court-case due diligence.

The graph reveals indirect ties a name-match search misses: a partner who gave through a firm PAC, or a bar association that collectively backed the bench.

Recusal motions Judge ↔ attorney Case due diligence
USE CASE 02

Coordinated-giving & funding-bloc detection

Surface groups that fund the same candidates — an Inn of Court or bar association collectively backing a judge who ran unopposed. Community detection partitions the entire network into funding blocs, so you can ask for the largest circles across Florida — or which bloc any single entity belongs to — not just the individual checks.

Community detectionBloc analysis
USE CASE 03

Multi-hop money tracing

A funds B, B funds C, C funds the ultimate recipient. Follow money through committees and PACs across cycles to find the true origin behind a contribution.

Path-findingPass-through
USE CASE 04

Conflict vetting for litigation

Vet opposing counsel, expert witnesses, and public officials. Build a defensible, source-cited picture of who funded whom before you walk into the room.

Opposing counselExperts
USE CASE 05

Opposition research & journalism

Investigative reporting and oppo work demand citations. Every figure the analyst returns traces to a filed contribution record — defensible by design.

NewsroomCompliance
USE CASE 06

Power-broker & influence ranking

Ask who actually controls the money network — not just who wrote the biggest checks. Centrality analysis (PageRank) ranks the entities that sit at the heart of the flow, surfacing the brokers and pass-through hubs a raw-dollar total misses.

PageRankCentrality

Why this is hard

Florida runs its disclosure on the honor system.

The contribution record is public — but it's typed in by hand, candidate by candidate, with no donor ID, no standardized names, and no validation. The same donor ends up shattered into dozens of fragments that no keyword search will ever total. Resolving those identities back into one entity is the whole problem — and our core capability.

  1. 1

    One donor, shattered into fragments

    Trulieve gave roughly $126 million across the record — but never as one clean donor. Candidates and committees type the company's name and its self-described "occupation" differently every time, so a single contributor splinters into dozens of look-alike strings. Total them by keyword and you under-count by an order of magnitude. Our entity resolution stitches the fragments back into one.

  2. 2

    No donor ID, no validation — the honor system

    Disclosure depends on filers self-reporting names and occupations by hand. There is no standardized identifier and no validation step — nothing reconciles "TRULIEVE INC." with "TRULIEVE, INC." or a freehand "MANUFACTURER." Whether the fragmentation is accidental or convenient, the effect is the same: tracking who really gave what becomes guesswork unless you resolve identities computationally.

  3. 3

    The public record is available — but built to resist research

    The state's official campaign-finance portal lets you search only by recipient (you must already know the committee), offers no semantic or fuzzy matching, and gives you no way to follow money across multiple hops. The record is technically public yet practically unusable for real analysis. We make it usable.

    State portal

    • Search by recipient only
    • No semantic / fuzzy search
    • Inconsistent, unresolved names
    • No multi-hop money tracing

    Follow the Money

    • Search any entity, semantically
    • Donors & recipients resolved
    • A→B→C tracing, automated
    • Mapped on an interactive 2D graph

The pipeline

How it works.

From raw state filings to a navigable network, with an AI analyst and an interactive 2D node map working off the same resolved data.

1

Load the record

Ingest Florida's complete Division of Elections contribution data — millions of donations across cycles, preserved without loss.

2

Resolve entities

Reconcile inconsistent names and addresses into stable donor / recipient identities, so the same person isn't five different nodes.

3

Graph + AI analysis

Explore on an interactive node map while an AI analyst expands networks, traces paths, ranks power brokers, and detects funding blocs on command.

4

Cite the findings

Every figure links back to the underlying filed report — ready to drop into a motion, memo, or story.

The science

Knowledge graphs, AI, and the management of complexity.

A primer — conceptual, not implementation-specific — on the ideas that make it possible to turn millions of disconnected records into a network you can question in plain language.

From Tables to Networks: Representing, Resolving, and Reasoning over Large Relational Records

Abstract

Public records are usually published as flat tables: rows of transactions with inconsistent, free-text identifiers and no explicit links between them. This shape is easy to store but hard to reason about, because the questions people actually ask — who is connected to whom, through what, and how strongly — are questions about relationships, not rows. This overview describes the conceptual stack that converts such records into a knowledge graph: a model in which real-world entities are nodes and the facts that relate them are edges. We sketch why entity resolution is the load-bearing step, how graph algorithms answer relationship questions that table queries cannot, how modern language models translate natural-language intent into precise retrieval over millions of records, and the techniques that keep all of this tractable at scale.

1. Knowledge representation: why a graph

A knowledge graph represents information as a set of entities (people, organizations, accounts) connected by typed, directed relationships (gave-to, paid, affiliated-with). The structure mirrors how the facts actually join together, so a relationship that would require many self-joins in a relational table becomes a single edge traversal. Crucially, the graph makes indirect connections first-class: a path of several edges (A relates to B, B to C) is as queryable as a direct one. This is the difference between asking "what rows contain this name" and asking "what is connected to this entity, and by how much."

2. Entity resolution: the hard, foundational problem

Real records do not come with stable identifiers. The same entity appears under many surface forms — spelling variants, abbreviations, punctuation differences, transcription errors, and differing free-text descriptions. Entity resolution (also called record linkage or deduplication) is the task of deciding which of these surface forms refer to the same underlying entity, and collapsing them into one canonical node.

Conceptually it combines several signals: deterministic rules for obvious matches, approximate string similarity (fuzzy matching) for near-duplicates, and semantic comparison — often via vector embeddings, numeric representations of meaning where similar entities sit close together in space. Getting this step right is what separates an under-counted, fragmented view from a faithful one: a single actor scattered across dozens of variant strings is invisible to keyword search until it is resolved back into one node.

3. Reasoning with graph algorithms

Once data is a graph, a body of well-studied graph algorithms answers relationship questions directly. Shortest-path and reachability search trace how one entity connects to another through intermediaries. Centrality measures rank which nodes are structurally important — the hubs through which influence or value flows. Community detection (clustering) exposes densely connected groups that behave as a bloc, even when no single member stands out. Flow propagation models how a quantity spreads through the network, splitting at each node, to estimate where it ultimately lands. These are general techniques: the same algorithms illuminate financial networks, supply chains, citation graphs, and social structures alike.

4. Language models as an interface to retrieval

A large language model (LLM) is a system trained to predict and generate text; its practical power here is translation of intent. A user asks a question in ordinary language; the model maps that intent onto precise, structured operations — which entity to locate, which relationship to traverse, which analysis to run — and then narrates the result. This pattern, often called tool use or retrieval-augmented generation, keeps the model grounded: it does not invent figures, it orchestrates queries against the authoritative data and reports what comes back. The heavy lifting — scanning millions of records — is done by indexes and the database; the model decides what to ask and explains what it means, returning answers in seconds rather than hours of manual cross-referencing.

5. Managing complexity at scale

A graph of millions of nodes cannot be drawn or queried naively. Several techniques keep it tractable. Indexing and pre-aggregation turn relationship lookups that would scan entire tables into near-instant seeks. Level-of-detail rendering and lazy loading fetch only what is in view and only when needed, so an interface can sit atop a graph far larger than any screen. Bounded, ranked expansion ensures that when an entity has thousands of connections, the most significant ones are surfaced first rather than an arbitrary slice. Together these let a person explore an enormous network interactively — zooming from a single actor to a whole community and back — without ever loading the whole thing at once.

6. Provenance and verifiability

Analysis is only trustworthy if it can be checked. The principle of provenance holds that every derived figure should decompose back to the primary records that produced it. In a knowledge graph this means an aggregated edge is never a dead end: it can always be expanded into the individual source transactions behind it. Resolution decisions — which surface forms were merged into one entity — should likewise be inspectable rather than hidden. This makes computational findings defensible: a claim is not "the system says so" but "here are the underlying filings, see for yourself."

Further reading (concepts)
  1. Knowledge representation & knowledge graphs — entities, relations, and graph data models.
  2. Entity resolution / record linkage — deterministic rules, fuzzy matching, and embedding-based similarity.
  3. Graph algorithms — shortest paths, centrality, community detection, and flow propagation.
  4. Large language models & tool use — natural-language interfaces and retrieval-augmented generation.
  5. Scalable graph systems — indexing, level-of-detail, and interactive exploration of large networks.

Instant search over millions

Ask in plain language and the AI analyst locates an entity among millions of records and returns it in seconds — work that would take hours of manual cross-referencing.

🔗

Resolve fragmented identities

One actor scattered across dozens of name and description variants is stitched back into a single node — so totals are complete, not under-counted.

🧭

Trace multi-hop connections

Follow a relationship through intermediaries — A to B to C — to surface indirect ties and ultimate origins that no single-table lookup can reach.

See the whole network

Explore an interactive map that scales from one entity to an entire community, expanding the most significant connections first.

Detect coordinated groups

Community-detection surfaces blocs that act together — groups funding the same target — even when no individual member stands out.

Verify every figure

Drill any aggregate down to the individual source records behind it. Findings are defensible because the primary evidence is one click away.

Credibility

Defensible by construction.

"Show me whether anyone appearing before this judge — directly or through a firm PAC — funded the campaign, and cite the filings."

Analyst response: a resolved sub-graph, ranked contributions, shared-circle flags, and a record-level citation for each dollar.

Source: Florida Division of Elections, Campaign Finance Database (public filings).

Get started

Open the graph. Follow the money.

Create an account and start with free analyst tokens. No data wrangling — the record is already loaded and resolved.

Create Account Log In