Dark Money Map
Docs menu

Data files

Downloadable datasets, field definitions and file verification.

Last updated

The site publishes the records behind the map as JSON files that you can open directly. Their fields can change when the map does. A public API with documented access is planned; join the waitlist on the Sources page.

The files

These files are published under /data/:

FileHolds
map-graph.json.gzEvery record and connection loaded by the current map, published gzip-compressed (the map inflates it)
bill-lobbying-estimates.jsonLabelled bill-level lobbying estimates, by reporting quarter
public-graph.jsonThe smaller compatibility projection used by older pages and field tables
public-donors.jsonThe donor index of itemized givers
money-signals.jsonPatterns to check, per record
public-bills.jsonThe bill index
measure-descriptions.jsonVoter guide text for ballot measures
entity-images.jsonThe portrait image used for each legislator
manifest.jsonThe size and checksum of every other file

map-graph.json.gz

Published gzip-compressed, since the file is over twice the 25 MiB a Cloudflare Pages file may be; the map inflates it in the browser. Decompress it to read map-graph.json, described below.

The primary dataset for the map. It contains the current California state legislation, lobbying and campaign records as nodes, their sourced relationships as edges, and release dates and counts in meta. The current map's default date window is year to date; changing that window filters dated relationships in the browser.

bill-lobbying-estimates.json

The separate input for figures marked as lobbying estimates. Each bill-side estimate is divided by reporting quarter so the map's date range can recalculate it. The file also keeps per-organization detail, source dates, allocation totals and the published method. An absent estimate is missing data, never $0. See Method.

public-graph.json

A smaller compatibility projection retained for older pages and downloads. It has three keys: nodes (the records), edges (the connections) and meta (about that projection). It is not the dataset loaded by the current map. Every amount is in US dollars. Dates are YYYY-MM-DD unless a field says otherwise.

Record fields

Each item in nodes has some of these fields. Filled in counts the records in this snapshot with a value.

FieldTypeFilled inDescriptionExample
idtext2,319 of 2,319The record's identifier on the map. The prefix shows where it came from: bill: for bills, firm: and person: for lobbying registrations, entity: for organizations, and ca: for campaign filers, candidates, measures and contributors.entity:22984
kindtext2,319 of 2,319The record type. See Record types.organization
labeltext2,319 of 2,319The name as filed, or the bill number for a bill.NextGen California
statetext1,527 of 2,319The state from the record's address, as filed.CA
citytext1,180 of 2,319The city from the record's address, as filed.Sacramento
urltext1,365 of 2,319A link to the official source. Bills link to their page on California Legislative Information. Campaign records currently link to the Secretary of State's campaign finance and lobbying data page, not to a page for the individual filer.https://leginfo.legislature.ca.gov/faces/billNavClient.xhtml?…
source_systemtext1,184 of 2,319The system the record was imported from. CAL-ACCESS whenever it is filled in.CAL-ACCESS
source_idtext835 of 2,319The record's identifier in the source system: the committee's filer ID when the filing gives one. Blank when it gives none. Contributor records repeat the map's own ID.1219354
detailtext1,135 of 2,319A short note from the import, such as a bill's subject or how an organization was matched to lobbying records.Wildfire.
industrieslist619 of 2,319Industry tags for organizations and bills. Assigned during import, not filed.["energy_utilities"]
descriptiontext160 of 2,319A short description where the import gives one, such as Ballot measure.CONSTITUTIONAL CIVIL LIBERTIES & CIVIL RIGHTS ISSUES,INCLUDIN…
statustext811 of 2,319For organizations: whether the import matched the organization to lobbying registration records.
segmenttext811 of 2,319For organizations: the type of organization, assigned during import.corporation
lobbying_intereststext100 of 2,319For organizations: the lobbying interests stated in their registration, as filed.Constitutional, Civil Liberties, & Civil Rights Issues
reportedReceiptsnumber493 of 2,319For committees and PACs: total contributions received this calendar year, from the Summary Page of the latest included campaign statement. In dollars.1030029.74
receiptsThroughdate493 of 2,319The end of the statement period that reportedReceipts runs through.2026-06-30
fundingSourceslist459 of 2,319For committees and PACs: up to 10 of the largest itemized givers, each with its record ID, type, name, total, number of transactions and latest date. Already counted in reportedReceipts.[{"id": "ca:donor-org:97f55d2fad878bc7", "kind": "donor_organ…
fundingSourceGroupslist493 of 2,319For committees and PACs: the receipts split into groups (givers drawn on the map, other itemized givers, unitemized or other receipt categories), each with an amount and a count of givers.[{"label": "Other organizations and committees", "amount": 56…
itemizedSourceTotalnumber493 of 2,319For committees and PACs: the total of contributions itemized by named givers on the included statements.5692.3099999999995
committee_typetext37 of 2,319The committee type code from the filing's cover page, where the import carries it, such as C for a candidate-controlled committee. Blank for most records.G
employertext82 of 2,319For individual donors: the employer as filed.SELF-EMPLOYED; CHARLES T. MUNGER, JR.
occupationtext92 of 2,319For individual donors: the occupation as filed.PHYSICIST
jurisdictiontext345 of 2,319For candidates and measures: the jurisdiction as filed, such as a district or statewide. Spelling varies between filings.California statewide
scope_leveltext347 of 2,319Whether the import placed the record at state (state-government) or local (local) level. Check jurisdiction as well.state-government
electiontext118 of 2,319For candidates and measures: the election date as filed, in the source's own format.6/2/2026 12:00:00 AM
officetext282 of 2,319For candidates: the office code as filed, such as GOV (Governor), ASM (Assembly) or SEN (Senate).GOV
districttext199 of 2,319For candidates: the district number, when the office has one.41
sessiontext181 of 2,319For bills: the legislative session, such as 20252026.20252026
subjecttext181 of 2,319For bills: the subject line.Wildfire.
authortext181 of 2,319For bills: the author's last name as published.Becker
stagetext181 of 2,319For bills: a simplified stage: introduced, floor, enrolled or dead.floor
bill_statustext181 of 2,319For bills: the status as published.In Floor Process
last_actiontext181 of 2,319For bills: the latest action as published.Ordered to third reading.
last_action_datedate181 of 2,319For bills: the date of the latest action.2026-08-30
hearingtext0 of 2,319For bills: the next scheduled hearing, when one is published.
committeetext0 of 2,319For bills: the committee the bill is in, when published.
activetrue or false43 of 2,319For lobbying firms: whether the registration is active.true
filer_idnumber43 of 2,319For lobbying firms: the CAL-ACCESS filer ID.1435195

Connection fields

Each item in edges has some of these fields:

FieldTypeFilled inDescriptionExample
sourcetext6,953 of 6,953The ID of the record the connection starts from. Each type's direction is on Connection types.entity:25627
targettext6,953 of 6,953The ID of the record the connection points to.bill:202520260SB492
kindtext6,953 of 6,953The connection type. See Connection types.oppose
labeltext6,953 of 6,953The connection's name from the import, such as Late contribution received. Bill positions repeat the position as filed.oppose
datetext, usually a date6,953 of 6,953The date of the record: the analysis date for a bill position, the filing or transaction date for campaign records, a year for a firm affiliation, or a date range for lobbying payments.2026-09-01
detailtext6,807 of 6,953A note on the source or on what an amount covers, such as the bill analysis the position appears in.
urltext6,761 of 6,953A link to the source: the bill analyses page for positions, the Secretary of State's data page for campaign records.https://leginfo.legislature.ca.gov/faces/billAnalysisClient.x…
amountnumber994 of 6,953The amount in dollars, on money connections.35750.0
source_systemtext948 of 6,953CAL-ACCESS whenever it is filled in.CAL-ACCESS
source_idtext948 of 6,953The identifier in the source system, when there is one.497:3096463:INC1
coverage_throughdate788 of 6,953The end of the statement period an amount runs through.2026-06-30
filing_idnumber or text526 of 6,953The CAL-ACCESS filing ID the connection was read from.3093005
transaction_countnumber468 of 6,953For sources of receipts: how many itemized transactions are added up in the amount.27
included_in_receiptstrue or false468 of 6,953For sources of receipts: true when the amount is already part of the receiving committee's reported receipts, so it must not be added to that total.true
transaction_typetext146 of 6,953For late contributions: the part of the report the line is on. Form 497 Part 1 lists contributions received and Form 497 Part 2 contributions made.Form 497 Part 1
end_datedate16 of 6,953For historical representations: when the representation ended.2025-09-30
support_opposetext14 of 6,953For independent spending: S (support) or O (oppose), as filed.S

Snapshot fields

FieldTypeDescription
sincedateThe start of the lobbying reporting window
untildateThe snapshot date
notetextNotes recorded when the snapshot was built
snapshottrue or falseAlways true for a published snapshot

money-signals.json

The patterns to check, worked out from the campaign layer and the donor index after each build. Leads, not findings.

FieldTypeDescription
generatedstringWhen the file was built.
patternsobjectEach pattern's title, the technique it points to, the rule the map applies, and its ordinary explanations, keyed by the pattern's slug.
countsobjectHow many records each pattern was found on.
recordsobjectKeyed by record ID: a list of leads, each with the pattern slug, a one-sentence summary, the amount involved, and evidence, a list of the records and amounts the lead rests on (id, label, amount, and a note where one helps).

public-donors.json

The donor index: every itemized giver at or above a minimum total on committees' campaign statements.

FieldTypeDescription
generateddate and timeWhen the index was built
sincedateThe earliest contribution date included
minimumnumberThe smallest total a giver needs to be listed, in dollars
sourceslistThe givers
sources[].id, kind, labeltextThe giver's ID, record type (donor or donor_organization) and name as filed
sources[].employer, occupation, citytextAs filed; employer and occupation for individuals only
sources[].committeeslistEach committee the giver gave to: id, label, amount (what the committee kept), transactions and last_date, and returned when the committee gave some of it back
Caution

Every amount in the donor index is already inside the receiving committee's reported receipts.

public-bills.json

The bill index, in pages.

FieldTypeDescription
rowslistBills, each with bill_id (session and number, such as 202520260AB1), measure (such as AB 1), title and session
totalnumberHow many bills the index has
next_offsetnumberWhere the next page starts

measure-descriptions.json

Text copied from the Secretary of State for ballot measures.

FieldTypeDescription
retrieveddateWhen the text was copied
notetextWhat was copied and what was left out
electionobjectThe election's date and label
sourcesobjectLinks to the voter guide and the list of eligible initiatives
propositionslistNumbered propositions on the ballot
initiativeslistEligible initiatives, by initiative number

manifest.json

Written each time the site is published, with the size and checksum of every other data file, so you can confirm that a file you downloaded is the one that was published.

FieldTypeDescription
builtdate and timeWhen the site was published
snapshotdateThe snapshot date of public-graph.json
algorithmtextThe checksum algorithm, sha256
fileslistFor each file: path, size in bytes, sha256 checksum, and when it was generated

Check a file yourself

  1. Download the data file and /data/manifest.json.
  2. Compute the file's SHA-256 checksum, for example with shasum -a 256 public-graph.json on macOS or Linux.
  3. Compare it with the file's sha256 in the manifest.