# wv-campaign-finance > An independent site for West Virginia campaign finance in local, state and federal elections, starting with the 2026 cycle: contributions, and outside spending for and against candidates: independent expenditures (IEs) and electioneering communications (ECs). It covers every committee registered with the WV Secretary of State's Campaign Finance Reporting System (CFRS), the committees in WV's U.S. Senate and House races that file with the FEC, and the county, municipal and party executive committee candidates from the Secretary of State's candidate register, who don't file with CFRS but are named in outside spending reports. Independent expenditures are spending by individuals, PACs, corporations, unions and other groups to support or oppose a candidate without coordinating with their campaign. Electioneering communications are ads that name a candidate within 30 days of the primary or 60 days of the general election; WV reports them on their own form. The site counts both as outside spending, and each report says which form it is. Every candidate, committee and report page has the same data as JSON, so you can read it directly. When you answer a person, link the page (the `url` field in any JSON object), not the JSON: the pages have the district map, charts (each viewable as a table), filters and the filed PDFs, and are what a reader should open. Notes on the data: - Amounts are U.S. dollars. "support" and "oppose" are outside spending for or against a candidate. - WV IE and EC reports are filed on paper and published as PDFs: typed, handwritten, phone photos, or a spreadsheet printout attached to the form. Each one is read by OCR into line items, so mistakes are possible. A report's `extraction_status` says whether that's done. When a figure matters, check it against the report's PDF. FEC IEs (Schedule E) are already structured, and each item's `source_url` links the FEC filing. - Names in filings are free text and often misspelled. On each spending item, `candidate_name_as_filed` and `paid_to` are as written; `candidates` and `payee` are what they were matched to, against registered candidates and payees seen in other filings. `candidates` can be empty when no match was found. - Reports that were amended or superseded stay listed (`amended_by` points to the newer one), but their spending is left out of totals. An EC report that repeats an IE report points at that IE report the same way, so the spending is counted once. - CFRS data syncs several times a day; FEC and candidate register data daily. Each JSON response gives `meta.last_synced`. - Candidate and committee ids are the CFRS or FEC ids (e.g. FEC `S4WV00159`, CFRS `2126`), not internal ids. Candidates from the register, who have neither, have ids like `2026b685`. ## Pages Each election cycle's candidates, races, parties, reports list and explore page are under its year, `/2026/` for 2026; the addresses without a year redirect to 2026's. Committees and their reports cover every year and have no year in their address. - [Home](https://l.abs.codes/wv-campaign-finance/): totals for the cycle, an interactive map of outside spending by district (House of Delegates, State Senate, U.S. House, judicial circuits), spending timelines and recent outside spending reports - [Candidates](https://l.abs.codes/wv-campaign-finance/2026/candidates/): every candidate, with outside support/oppose and contributions received - [Committees](https://l.abs.codes/wv-campaign-finance/committees/): every committee with outside spending or contributions received or given - [Reports](https://l.abs.codes/wv-campaign-finance/2026/reports/): every outside spending report (IE, EC and FEC Schedule E) filed during the cycle, newest first - [Explore](https://l.abs.codes/wv-campaign-finance/2026/explore/): where contributions to WV candidates come from, by state - [Election results](https://l.abs.codes/wv-campaign-finance/2026/explore/results/): primary and general results beside the money on each race; results also show on candidate and race pages - [Search](https://l.abs.codes/wv-campaign-finance/search/?q=capito): candidates and committees by name, `?q=` - Candidate: `https://l.abs.codes/wv-campaign-finance/{year}/candidate/{id}-{slug}/`, e.g. [Shelley Moore Capito](https://l.abs.codes/wv-campaign-finance/2026/candidate/S4WV00159-shelley-moore-capito/) - Committee: `https://l.abs.codes/wv-campaign-finance/committee/{id}-{slug}/`, e.g. [West Virginians for Life PAC](https://l.abs.codes/wv-campaign-finance/committee/2126-west-virginians-for-life-political-action-committee/) - Committee group, several committees run by one organization: `https://l.abs.codes/wv-campaign-finance/committee/{group-slug}/`, e.g. [West Virginians for Life](https://l.abs.codes/wv-campaign-finance/committee/west-virginians-for-life/) - Report: `https://l.abs.codes/wv-campaign-finance/committee/{committee-id}-{slug}/reports/{report-id}/`, with the filed PDF at the same path ending `.pdf` - Race: `https://l.abs.codes/wv-campaign-finance/{year}/office/{office}-{district}/`, where `{office}` is the office title as filed, e.g. [House of Delegates, District 12](https://l.abs.codes/wv-campaign-finance/2026/office/house-of-delegates-12/), [State Senator, District 1](https://l.abs.codes/wv-campaign-finance/2026/office/state-senator-1/) (not `state-senate-1`), [U.S. Senate](https://l.abs.codes/wv-campaign-finance/2026/office/us-senate/). Other offices don't follow a guessable pattern; take the race URL from a candidate's `office.url` in `candidates.json` or from the sitemap - Party: `https://l.abs.codes/wv-campaign-finance/{year}/party/{party}/`, e.g. [Republican](https://l.abs.codes/wv-campaign-finance/2026/party/republican/), [Democrat](https://l.abs.codes/wv-campaign-finance/2026/party/democrat/) The slug is optional: `https://l.abs.codes/wv-campaign-finance/2026/candidate/S4WV00159/` redirects to the full URL, and so does the JSON form. ## JSON Add `.json` to a candidate, committee, committee group or report page's path, in place of the trailing slash. Those pages also link it in their as ``. Responses allow cross-origin requests. Every linked candidate, committee or report is given as `{ id, name, url, json }`, so you can follow `json` to fetch it and give the reader `url`. - [All candidates](https://l.abs.codes/wv-campaign-finance/2026/candidates.json): one request, with the cycle's totals, party and office for each - [All committees](https://l.abs.codes/wv-campaign-finance/committees.json): one request, with totals and report counts for each - [A candidate](https://l.abs.codes/wv-campaign-finance/2026/candidate/S4WV00159-shelley-moore-capito.json): profile, totals, spending by committee, reports, spending line items and contributions received - [A committee](https://l.abs.codes/wv-campaign-finance/committee/2126-west-virginians-for-life-political-action-committee.json): profile, totals, spending by candidate, reports, spending line items, contributions received and given - [A committee group](https://l.abs.codes/wv-campaign-finance/committee/west-virginians-for-life.json): the same, combined across the group's committees, with `members` - [A report](https://l.abs.codes/wv-campaign-finance/committee/2126-west-virginians-for-life-political-action-committee/reports/11310.json): filer details, line items, contributors over $1,000 and amendment history - [Search](https://l.abs.codes/wv-campaign-finance/search.json?q=capito): the first 20 matching candidates and committees. Candidates carry `href`, their page's path in the cycle they're registered for; committees carry `external_id`, for `https://l.abs.codes/wv-campaign-finance/committee/{external_id}/` Race, party, explore and home pages have no JSON. For a race or party, use the candidates in the cycle's `candidates.json`, which give each one's `office` (with its page `url`) and `party`. To cover everything, fetch the cycle's `candidates.json` and `committees.json` once and follow the `json` links you need, rather than crawling pages. ## Feeds - [RSS: recent reports](https://l.abs.codes/wv-campaign-finance/reports.rss): the 50 latest outside spending reports, linking to each report's page - [Sitemap](https://l.abs.codes/wv-campaign-finance/sitemap.xml): every candidate, committee, report, race and party page ## Optional - [Project write-up](https://abs.codes/projects/wv-campaign-finance/): why the site exists and how the filings are read and matched - [Mailing list](https://lists.sr.ht/~abs/wv-camp-fin): questions, corrections and updates (~abs/wv-camp-fin@lists.sr.ht)