Delotrope

How a report gets made.

A Python script collects the records and draws the map. A language model helps with one step, matching names. I check every claim against the original filing and write the report.

Who does what

StepWhat happensDone by
Lobbyist declarationsCollected for each bill from the Iowa Legislature’s website.Python script
Tax filingsForm 990s and their schedules, pulled for each organization.ProPublica Nonprofit Explorer API
Clear name matchesNames that are exact or nearly exact across records are linked by rule.Python
Hard name matchesOnly pairs the scripts rate as uncertain reach the model. It gets the two names and what is already known about them, and answers one question: same group or not. I confirm each answer, and every decision is saved so the same pair is never decided twice.Language model, then me
Network mapDrawn from a table of ties. Each tie carries its source link and the date it was pulled. A tie with no source is not drawn.Python
VerificationEvery claim is checked against the original filing.Me
Summaries and reportWritten by me, in a report template I built.Me

Most of the work is matching names.

A company can file under an LLC name in one record and a trade name in the next, and nothing in either one says they’re the same company. A declaration might name Caesars Enterprise Services, LLC. A campaign finance record names Caesars Entertainment PAC. Linking the two is a matching question.

Scripts handle the clear cases, first by rule and then by fuzzy scoring. The language model sees only the pairs the scripts can’t settle. It judges the names it is handed and never supplies a fact. Every tax ID, dollar amount and officer name comes from a downloaded record. I confirm each match before it goes into a report.

From four kinds of record to one checked organization

The diagram is wide. Scroll sideways to see all of it.

Four kinds of public record are matched to one organization, and every claim is then checked back against the original filing. LOBBYIST DECLARATIONS IRS FORM 990S CAMPAIGN CONTRIBUTIONS ORGANIZATION WEBSITES MATCH SAME GROUP, RESOLVED ORGANIZATION AND ITS SOURCED TIES EVERY CLAIM CHECKED BACK AGAINST ITS ORIGINAL FILING
Public records are matched to one organization, then each claim is checked against the record it came from.

Why not give the records to a chatbot?

You can try. Here is where it runs into trouble.

The records are in different places

Lobbyist declarations are on the legislature’s website, campaign contributions are in a state database, and tax filings are in IRS files. A chatbot answers from what it already has or can find on the open web, and most of these records aren’t in a form it can read as a set.

Matching names is where it goes wrong

Whether two records name the same group is a judgment call, and a model makes that call with the same confidence whether or not it’s right. In this process the scripts handle the clear cases, the model sees only the hard ones, and I check the result.

A model can say what no filing says

A language model writes fluent text whether or not a document backs it up. In a report someone will rely on, a claim that sounds right and has no source is the worst error. Every line in a Delotrope report traces to a filing you could pull yourself.

What you are paying for

The collection, the matching, the line by line checking, and a finished report by morning. A chatbot can help with the reading. Someone still has to check each claim against the filing, and that is the part you are buying.

Two kinds of statement, kept apart

What a document says

A filing states a fact, such as who registered For or Against a bill, or who gave how much to whom. The report cites it.

What documents together imply

Two filings can point at the same thing without either one saying so. The report labels these as readings, not as facts in a filing.

What the reports draw on

Iowa LegislatureLobbyist declarations, bill history and journals
IRSNonprofit tax returns (Form 990s), through ProPublica
Iowa Ethics and Campaign Disclosure BoardCampaign contributions
Company and association websitesBoard rosters and property listings

What this doesn’t do

It doesn’t monitor anything continuously yet.

It won’t tell you anyone broke the law, it won’t guess at motives, and it doesn’t take a side. The same standard applies no matter who’s asking or which party the filing belongs to. When the filings don’t say something, the report says that plainly instead of filling the gap, and every report ends with a section on what’s not there.

Send me a bill number

I’ll tell you what the public records can show, and whether it’s a fit.

Contact    See the sample report