Fill your filing in 2 minutes.

Drop in your donor, disbursement, and debt spreadsheets. Get back a signed PDF and Excel supplements ready to file with your committee's designated filing officer. Your data never leaves your device.

Filing venue varies by committee type and jurisdiction (state, county, city, or clean-elections). Check your committee's registration to confirm where to submit.

Loading Python runtime (first visit: ~10s, cached thereafter)โ€ฆ

Try it with sample data

Don't want to load real data just to kick the tires? Download a complete synthetic dataset โ€” two fake committees, 41 fake donors (mix of in-state, out-of-state, PACs, in-kind), 17 fake disbursements (enough to exercise the 5-row page overflow), and 2 fake unpaid debts. Feed them to the forms above to see the tool work end-to-end.

All data is 100% synthetic โ€” no real people, committees, vendors, or addresses. The ActBlue- and Givebutter-shaped CSVs contain the same donors under their respective platform's native column headers, so you can verify the column mapper auto-resolves non-template layouts.

1. Committee

Load a committee_config.yaml, or fill in the form below for a single committee.

2. Your data

Load your donor, disbursement, and debt data. Any CSV or XLSX with the required fields works โ€” you don't have to use our template. The column-mapper will figure out which of your columns correspond to which AZ schedule fields.

Drop CSV/XLSX or click to choose (multiple files OK)

Download blank template

Drop CSV/XLSX or click to choose (multiple files OK)

Download blank template

Drop CSV/XLSX or click to choose (multiple files OK)

Download blank template

+ Add a single contribution (check, wire, in-kind, etc.)
+ Add a single disbursement
+ Add an outstanding debt

3. Signature

Choose how to sign. Typed electronic signatures are accepted under A.R.S. ยง 44-7007.

4. Generate

Everything runs locally in your browser. Your files are never sent to a server โ€” not even to us.

Self-host this tool

This web app is open source and designed to self-host. Three ways:

Docker

docker run -p 8080:80 \
  ghcr.io/energy-freedom-team/openfile-az:latest

Open http://localhost:8080.

Static files

pip install openfile-az
openfile-az serve --port 8080

Or drop web/dist/ into any static host (nginx, Caddy, S3, GitHub Pages).

Offline

# unzip openfile-az-web-*.zip
open index.html

Works from a USB stick. No install, no network.

Privacy