# Alaska Campaign Finance Data (APOC) > Every contribution, expenditure, debt and registration reported to the Alaska > Public Offices Commission, rescraped from the state's site daily and > republished as typed Parquet and as APOC's raw CSVs. No key, no rate limit, > CORS enabled, MIT licensed. Query the Parquet directly over HTTPS — DuckDB fetches only the columns and row groups a query touches, so counting rows doesn't mean downloading the file: SELECT filer_name, sum(amount) AS raised FROM 'https://nickcrews.github.io/apoc-data/data/income.parquet' WHERE report_year = 2024 GROUP BY 1 ORDER BY raised DESC LIMIT 10; If you can't fetch URLs, stop and ask the person you're working for to attach https://nickcrews.github.io/apoc-data/apoc-csvs.zip to the conversation. Do not answer from memory and do not estimate anything. ## Tables One Parquet file each, at the URL shown, plus a CSV of the same name in the zip. - campaign_form — One row per filed report: totals for cash on hand, income, expenses and debt over a reporting period. https://nickcrews.github.io/apoc-data/data/campaign_form.parquet - candidate_registration — Candidates who registered to run, with their committee, treasurer and contact details. https://nickcrews.github.io/apoc-data/data/candidate_registration.parquet - debt — Outstanding debts a campaign or group reported owing. https://nickcrews.github.io/apoc-data/data/debt.parquet - entity_registration — Registered entities, such as independent expenditure groups. https://nickcrews.github.io/apoc-data/data/entity_registration.parquet - expenditures — Every expenditure reported to APOC: who was paid, how much, and what for. https://nickcrews.github.io/apoc-data/data/expenditures.parquet - group_registration — Registered PACs, political parties and other groups. https://nickcrews.github.io/apoc-data/data/group_registration.parquet - income — Every contribution reported to APOC: who gave, how much, and to which candidate or group. https://nickcrews.github.io/apoc-data/data/income.parquet - letter_of_intent — Letters of intent filed by people considering a run for office. https://nickcrews.github.io/apoc-data/data/letter_of_intent.parquet For columns, types, row counts, date ranges, and the CSV header each column was parsed from, read https://nickcrews.github.io/apoc-data/data/manifest.json, or run `DESCRIBE SELECT * FROM ''` against any of the files above. ## Things to know before you trust an answer - Money columns are decimal amounts. Negative amounts are refunds or corrections. - filer_name is the candidate or group that filed the report. In income and expenditures, last_business_name/first_name are the other party: the donor for income, the payee for expenditures. - The same person or business is often spelled several different ways, so grouping by name alone undercounts. Consider fuzzy matching or grouping on a normalized name. - A few dates are data-entry typos (years like 1934 or 3030). - report_year is the reporting year, which is not always the year the transaction happened — use the date column for that. - Transaction in 24 hour reports are re-reported in the following report, so don't include both in a total. ## Working from the CSVs instead They are APOC's raw exports, and need cleaning first: - Every column is text, under APOC's own headers. Rename them to the lowercase names in the manifest, which is what everything here calls them. - Money looks like "$1,234.56", with negatives in parentheses: "($1,234.56)". Strip the "$" and the commas, and turn a wrapping "(...)" into a minus sign. - Dates are M/D/YYYY with no zero padding. - Some files have a literal "--------" column separating the transaction's own fields from the fields describing the filer who reported it. Drop it. A header can repeat on either side of it — the one after the separator is the filer's. - income.csv is far bigger than the rest. If it's too much to load whole, read it in chunks or with a library that streams (polars or duckdb rather than pandas defaults), or answer from the smaller tables and say which ones you used. ## More - [manifest.json](https://nickcrews.github.io/apoc-data/data/manifest.json): every table's columns, types, row counts and date ranges, and when the data was scraped, as JSON - [All CSVs, zipped](https://nickcrews.github.io/apoc-data/apoc-csvs.zip): for tools that can only read files attached to the chat - [Interactive explorer](https://nickcrews.github.io/apoc-data/): the same data as a browser dashboard, with a SQL editor, over DuckDB-WASM - [Source repository](https://github.com/NickCrews/apoc-data): the scraper, the CSV-to-Parquet converter, and a Python API and CLI for the releases - [APOC's own site](https://aws.state.ak.us/ApocReports/Campaign/): where this is scraped from, and the authority if the two ever disagree