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/:
| File | Holds |
|---|---|
map-graph.json.gz | Every record and connection loaded by the current map, published gzip-compressed (the map inflates it) |
bill-lobbying-estimates.json | Labelled bill-level lobbying estimates, by reporting quarter |
public-graph.json | The smaller compatibility projection used by older pages and field tables |
public-donors.json | The donor index of itemized givers |
money-signals.json | Patterns to check, per record |
public-bills.json | The bill index |
measure-descriptions.json | Voter guide text for ballot measures |
entity-images.json | The portrait image used for each legislator |
manifest.json | The 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.
| Field | Type | Filled in | Description | Example |
|---|---|---|---|---|
id | text | 2,319 of 2,319 | The 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 |
kind | text | 2,319 of 2,319 | The record type. See Record types. | organization |
label | text | 2,319 of 2,319 | The name as filed, or the bill number for a bill. | NextGen California |
state | text | 1,527 of 2,319 | The state from the record's address, as filed. | CA |
city | text | 1,180 of 2,319 | The city from the record's address, as filed. | Sacramento |
url | text | 1,365 of 2,319 | A 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_system | text | 1,184 of 2,319 | The system the record was imported from. CAL-ACCESS whenever it is filled in. | CAL-ACCESS |
source_id | text | 835 of 2,319 | The 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 |
detail | text | 1,135 of 2,319 | A short note from the import, such as a bill's subject or how an organization was matched to lobbying records. | Wildfire. |
industries | list | 619 of 2,319 | Industry tags for organizations and bills. Assigned during import, not filed. | ["energy_utilities"] |
description | text | 160 of 2,319 | A short description where the import gives one, such as Ballot measure. | CONSTITUTIONAL CIVIL LIBERTIES & CIVIL RIGHTS ISSUES,INCLUDIN… |
status | text | 811 of 2,319 | For organizations: whether the import matched the organization to lobbying registration records. | |
segment | text | 811 of 2,319 | For organizations: the type of organization, assigned during import. | corporation |
lobbying_interests | text | 100 of 2,319 | For organizations: the lobbying interests stated in their registration, as filed. | Constitutional, Civil Liberties, & Civil Rights Issues |
reportedReceipts | number | 493 of 2,319 | For committees and PACs: total contributions received this calendar year, from the Summary Page of the latest included campaign statement. In dollars. | 1030029.74 |
receiptsThrough | date | 493 of 2,319 | The end of the statement period that reportedReceipts runs through. | 2026-06-30 |
fundingSources | list | 459 of 2,319 | For 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… |
fundingSourceGroups | list | 493 of 2,319 | For 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… |
itemizedSourceTotal | number | 493 of 2,319 | For committees and PACs: the total of contributions itemized by named givers on the included statements. | 5692.3099999999995 |
committee_type | text | 37 of 2,319 | The 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 |
employer | text | 82 of 2,319 | For individual donors: the employer as filed. | SELF-EMPLOYED; CHARLES T. MUNGER, JR. |
occupation | text | 92 of 2,319 | For individual donors: the occupation as filed. | PHYSICIST |
jurisdiction | text | 345 of 2,319 | For candidates and measures: the jurisdiction as filed, such as a district or statewide. Spelling varies between filings. | California statewide |
scope_level | text | 347 of 2,319 | Whether the import placed the record at state (state-government) or local (local) level. Check jurisdiction as well. | state-government |
election | text | 118 of 2,319 | For candidates and measures: the election date as filed, in the source's own format. | 6/2/2026 12:00:00 AM |
office | text | 282 of 2,319 | For candidates: the office code as filed, such as GOV (Governor), ASM (Assembly) or SEN (Senate). | GOV |
district | text | 199 of 2,319 | For candidates: the district number, when the office has one. | 41 |
session | text | 181 of 2,319 | For bills: the legislative session, such as 20252026. | 20252026 |
subject | text | 181 of 2,319 | For bills: the subject line. | Wildfire. |
author | text | 181 of 2,319 | For bills: the author's last name as published. | Becker |
stage | text | 181 of 2,319 | For bills: a simplified stage: introduced, floor, enrolled or dead. | floor |
bill_status | text | 181 of 2,319 | For bills: the status as published. | In Floor Process |
last_action | text | 181 of 2,319 | For bills: the latest action as published. | Ordered to third reading. |
last_action_date | date | 181 of 2,319 | For bills: the date of the latest action. | 2026-08-30 |
hearing | text | 0 of 2,319 | For bills: the next scheduled hearing, when one is published. | |
committee | text | 0 of 2,319 | For bills: the committee the bill is in, when published. | |
active | true or false | 43 of 2,319 | For lobbying firms: whether the registration is active. | true |
filer_id | number | 43 of 2,319 | For lobbying firms: the CAL-ACCESS filer ID. | 1435195 |
Connection fields
Each item in edges has some of these fields:
| Field | Type | Filled in | Description | Example |
|---|---|---|---|---|
source | text | 6,953 of 6,953 | The ID of the record the connection starts from. Each type's direction is on Connection types. | entity:25627 |
target | text | 6,953 of 6,953 | The ID of the record the connection points to. | bill:202520260SB492 |
kind | text | 6,953 of 6,953 | The connection type. See Connection types. | oppose |
label | text | 6,953 of 6,953 | The connection's name from the import, such as Late contribution received. Bill positions repeat the position as filed. | oppose |
date | text, usually a date | 6,953 of 6,953 | The 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 |
detail | text | 6,807 of 6,953 | A note on the source or on what an amount covers, such as the bill analysis the position appears in. | |
url | text | 6,761 of 6,953 | A 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… |
amount | number | 994 of 6,953 | The amount in dollars, on money connections. | 35750.0 |
source_system | text | 948 of 6,953 | CAL-ACCESS whenever it is filled in. | CAL-ACCESS |
source_id | text | 948 of 6,953 | The identifier in the source system, when there is one. | 497:3096463:INC1 |
coverage_through | date | 788 of 6,953 | The end of the statement period an amount runs through. | 2026-06-30 |
filing_id | number or text | 526 of 6,953 | The CAL-ACCESS filing ID the connection was read from. | 3093005 |
transaction_count | number | 468 of 6,953 | For sources of receipts: how many itemized transactions are added up in the amount. | 27 |
included_in_receipts | true or false | 468 of 6,953 | For 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_type | text | 146 of 6,953 | For 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_date | date | 16 of 6,953 | For historical representations: when the representation ended. | 2025-09-30 |
support_oppose | text | 14 of 6,953 | For independent spending: S (support) or O (oppose), as filed. | S |
Snapshot fields
| Field | Type | Description |
|---|---|---|
since | date | The start of the lobbying reporting window |
until | date | The snapshot date |
note | text | Notes recorded when the snapshot was built |
snapshot | true or false | Always 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.
| Field | Type | Description |
|---|---|---|
generated | string | When the file was built. |
patterns | object | Each pattern's title, the technique it points to, the rule the map applies, and its ordinary explanations, keyed by the pattern's slug. |
counts | object | How many records each pattern was found on. |
records | object | Keyed 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.
| Field | Type | Description |
|---|---|---|
generated | date and time | When the index was built |
since | date | The earliest contribution date included |
minimum | number | The smallest total a giver needs to be listed, in dollars |
sources | list | The givers |
sources[].id, kind, label | text | The giver's ID, record type (donor or donor_organization) and name as filed |
sources[].employer, occupation, city | text | As filed; employer and occupation for individuals only |
sources[].committees | list | Each 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 |
Every amount in the donor index is already inside the receiving committee's reported receipts.
public-bills.json
The bill index, in pages.
| Field | Type | Description |
|---|---|---|
rows | list | Bills, each with bill_id (session and number, such as 202520260AB1), measure (such as AB 1), title and session |
total | number | How many bills the index has |
next_offset | number | Where the next page starts |
measure-descriptions.json
Text copied from the Secretary of State for ballot measures.
| Field | Type | Description |
|---|---|---|
retrieved | date | When the text was copied |
note | text | What was copied and what was left out |
election | object | The election's date and label |
sources | object | Links to the voter guide and the list of eligible initiatives |
propositions | list | Numbered propositions on the ballot |
initiatives | list | Eligible 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.
| Field | Type | Description |
|---|---|---|
built | date and time | When the site was published |
snapshot | date | The snapshot date of public-graph.json |
algorithm | text | The checksum algorithm, sha256 |
files | list | For each file: path, size in bytes, sha256 checksum, and when it was generated |
Check a file yourself
- Download the data file and
/data/manifest.json. - Compute the file's SHA-256 checksum, for example with
shasum -a 256 public-graph.jsonon macOS or Linux. - Compare it with the file's
sha256in the manifest.