Technical writing

FEC Committee Filings: The Campaign Finance Database Behind $14 Billion in Election Spending

· AI Analytics
FECCampaign FinanceElectionsFederal Data

The Federal Election Commission publishes every registered committee, every individual contribution above $200, and every expenditure made in federal elections—all as downloadable bulk files available without registration or fee. The 2024 election cycle generated approximately $14 billion in total federal spending, the most expensive in history. Understanding how that money moves, who gave it, and which legal structures it passed through requires working directly with the FEC's filing database.

The FEC and its regulatory mandate

The Federal Election Commission was created by the Federal Election Campaign Act of 1971 (FECA) and substantially restructured by the 1974 FECA amendments passed in the wake of the Watergate scandal. Those amendments established contribution limits, mandatory disclosure of contributions and expenditures, public financing of presidential campaigns, and the FEC itself as an independent regulatory agency.

The FEC is governed by six commissioners, no more than three of whom may belong to the same political party. Commissioners are nominated by the President and confirmed by the Senate to six-year terms. The bipartisan structure was designed to prevent partisan weaponization of campaign finance enforcement, but in practice it means the commission frequently deadlocks 3–3 on enforcement actions, advisory opinions, and rulemaking. A deadlocked vote on a Matter Under Review (MUR) effectively means no enforcement action proceeds, even when a majority of the legal staff recommends one. Critics argue this makes the FEC a structurally weak enforcer; defenders argue bipartisan consensus is a necessary feature for an agency regulating political speech.

The FEC's jurisdiction is limited to federal elections: presidential, U.S. Senate, and U.S. House of Representatives races. State and local elections are regulated by state campaign finance agencies, which vary enormously in their disclosure requirements, contribution limits, and enforcement capacity. Some states have stricter rules than the FEC; others have no meaningful limits at all. The FEC has no authority over state-level ballot measures, state legislative races, or local elections unless federal funds are commingled with state activity in ways that implicate federal law.

Committee types and registration requirements

Every organization that raises or spends money to influence federal elections must register with the FEC as a political committee once it crosses the threshold of $1,000 in contributions received or expenditures made in a calendar year. Registration is accomplished via Form 1 (Statement of Organization), which discloses the committee's name, address, treasurer, bank, type, and any connected organization or candidate. The committee then receives a unique FEC committee ID (formatted as a letter prefix followed by eight digits, e.g., C00100005 for the Democratic National Committee).

Principal Campaign Committees

Each federal candidate designates one Principal Campaign Committee (PCC) as the primary fundraising and spending vehicle for the campaign. The PCC is the only committee that can accept contributions directly for the candidate's election and coordinate expenditures with the candidate without limit. Individual contribution limits to PCCs are set by the FEC and adjusted for inflation each election cycle. For 2024, the limit was $3,300 per election (primary and general are counted separately, so a donor can give $3,300 for the primary and another $3,300 for the general, for a total of $6,600 per cycle to a single candidate).

Party committees

The national party organizations—the Democratic National Committee (DNC), Republican National Committee (RNC), Democratic Senatorial Campaign Committee (DSCC), National Republican Senatorial Committee (NRSC), Democratic Congressional Campaign Committee (DCCC), and National Republican Congressional Committee (NRCC)—are registered as national party committees. They may accept contributions from individuals up to $41,300 per year (indexed for inflation) and may make coordinated expenditures on behalf of their candidates up to limits set by state population. State and local party committees may accept contributions up to $10,000 per year from individuals. National party committees have an additional special role: they may make unlimited independent expenditures on behalf of federal candidates, which they do through their campaign committee affiliates.

PACs and Separate Segregated Funds

A Political Action Committee (PAC) is a committee that pools contributions from multiple donors to make contributions to candidates or parties. A PAC connected to a corporation, labor union, trade association, or membership organization is formally called a Separate Segregated Fund (SSF)—the fund is “segregated” because it must be kept separate from general corporate or union treasury funds and may only solicit contributions from the organization's restricted class (executives and shareholders for corporate SSFs; members for union SSFs). A PAC unconnected to any sponsoring organization is a non-connected PAC and may solicit the general public. Both types of traditional PACs are subject to the same contribution limits: they may contribute up to $5,000 per election to a candidate committee and up to $15,000 per year to a national party committee. They may accept contributions of up to $5,000 per year from individuals.

Super PACs

The Super PAC—formally an Independent Expenditure-Only Committee—is a post-Citizens United invention. The Supreme Court's 2010 decision in Citizens United v. FEC held that corporations and unions have a First Amendment right to make unlimited independent expenditures from their general treasury funds to expressly advocate for or against federal candidates, so long as those expenditures are not coordinated with any candidate or party. A follow-on D.C. Circuit decision, SpeechNow.org v. FEC(2010), extended the same logic to political committees: a PAC that limits itself exclusively to independent expenditures may accept unlimited contributions from any source—individuals, corporations, unions, or other PACs. The FEC formalized this structure through advisory opinions, and Super PACs proliferated rapidly in the 2012 cycle.

The critical legal constraint on Super PACs is the prohibition on coordination with candidates or parties. A Super PAC that coordinates its spending with a campaign is treated as making an in-kind contribution subject to the applicable contribution limits, which would immediately violate the limits given the scale of Super PAC spending. In practice, “coordination” is defined through a complex set of FEC regulations covering content, timing, and common vendors, and enforcement of coordination rules has been limited. Super PACs frequently share political consultants, polling firms, and media buyers with the campaigns they nominally operate independently from.

Hybrid PACs and leadership PACs

A Hybrid PAC (Carey Committee, named after an advisory opinion permitting the structure) maintains two separate bank accounts: a traditional PAC account subject to contribution limits, which may make direct contributions to candidates, and a Super PAC account that accepts unlimited contributions for independent expenditures only. The two accounts may not commingle funds. Hybrid PACs are relatively rare but are used by some major organizations that want both direct contribution capacity and IE capacity in a single entity.

A Leadership PAC is a committee established by a federal officeholder or candidate for their own leadership activities—donating to colleagues' campaigns, funding political travel, and building relationships within the caucus or party. Federal officeholders may maintain both their PCC and a Leadership PAC simultaneously. Leadership PACs are subject to traditional PAC limits: up to $5,000 per election to other candidates. They may not be used to pay the officeholder's own campaign expenses. In practice, Leadership PACs have been used to pay for expenses—meals, travel, event tickets—that would be impermissible under personal use rules if paid from the PCC.

Disclosure filing requirements

The disclosure regime is the FEC's primary tool for transparency. Committees file periodic reports of all contributions received and disbursements made, along with real-time notices for large transactions close to election day.

House candidate committees and presidential candidate committees file on Form 3 (Report of Receipts and Disbursements). Senate candidate committees file on Form 3 as well, but historically filed with the Secretary of the Senate rather than the FEC directly, a legacy of Senate tradition that was partially changed by the Senate Campaign Disclosure Parity Act of 2018, which required electronic filing. Presidential candidates with public financing use Form 3P. PACs and party committees file on Form 3X.

The standard filing schedule requires quarterly reports throughout the election cycle, with additional pre-election and post-election reports in election years. Committees exceeding $50,000 in activity during a non-election year month may also be required to file monthly reports. The quarterly reports cover January–March (filed by April 15), April–June (filed by July 15), July–September (filed by October 15), and October 1–November 25 (the “Pre-General” report, filed 12 days before the general election). A Post-General report covers November 26–December 31 (filed by January 31). Year-end reports cover through December 31.

Two real-time reporting requirements overlay the periodic schedule for the final weeks before an election. Any contribution of more than $1,000 received within the 20 days before an election must be reported within 48 hours of receipt. Any independent expenditure of more than $10,000 must be reported within 24 hours at any time during the calendar year, or within 24 hours if made within 20 days of an election regardless of amount. These real-time notifications are critical for tracking late money floods into close races and are available in near-real-time through the FEC's electronic filing system.

Form 3L, Lobbyist Bundling Disclosure, applies to any registered lobbyist who bundles contributions in excess of $18,200 (adjusted threshold for 2024) to a reporting committee. Bundling—the practice of a lobbyist collecting checks from multiple clients and delivering them together to a candidate—is disclosed through this mechanism rather than showing up directly in the individual contributions file.

2024 election spending and the post-Citizens United landscape

Total 2024 federal election spending reached approximately $14 billion according to OpenSecrets, making it the most expensive federal election cycle in history. The presidential race accounted for approximately $3.5 billion between the Harris and Trump campaigns and their allied Super PACs. Competitive U.S. Senate races in battleground states typically cost $20–$50 million per cycle for both major-party candidates combined, with outlier races in large states exceeding $100 million.

The Citizens United decision catalyzed a structural shift in campaign finance. Before 2010, corporations and unions were prohibited from spending general treasury funds on express advocacy for or against federal candidates. The Court's 5–4 ruling—authored by Justice Kennedy and joined by Justices Roberts, Scalia, Thomas, and Alito—held that this prohibition violated the First Amendment. The majority reasoned that the government has no legitimate interest in preventing corporations (including nonprofit advocacy organizations) from engaging in independent political speech, and that the risk of corruption sufficient to justify speech restriction requires an exchange of money for political favors, not merely the appearance of access or influence. Justice Stevens' 90-page dissent argued that the majority had overturned decades of precedent without adequate factual basis and that the ruling would open the floodgates to corporate influence in elections.

Four years later, McCutcheon v. FEC (2014) eliminated the aggregate contribution limits that had capped the total amount any individual could give across all federal candidates and committees in a two-year cycle. Before McCutcheon, a single donor was limited to $123,200 in total federal contributions per cycle. After the decision, a donor could give $3,300 to an unlimited number of individual candidates, $5,000 to an unlimited number of PACs, and $41,300 to each national party committee. The practical effect was to enable a small number of high-net-worth donors to give millions of dollars across the party apparatus in a single cycle, which had previously required routing money through Super PACs that technically could not coordinate with campaigns.

Current individual contribution limits for the 2024 cycle are: $3,300 per election to a candidate committee, $5,000 per year to a PAC, $41,300 per year to a national party committee, and $106,500 per year to additional national party accounts for convention and building expenses. These limits are indexed to inflation and adjusted every two years. Super PACs and 501(c)(4)s have no contribution limits—they may accept any amount from any source, including foreign nationals who hold U.S. permanent residency (though foreign nationals lacking permanent residency are prohibited from contributing to any federal political committee).

FEC bulk data files

The FEC publishes its full database as pipe-delimited flat files at fec.gov/data/browse-data/?tab=bulk-data. Files are organized by two-year election cycle. All files are available without fee or registration. The key files for research are:

  • cm.zip (Committee Master File): one row per registered committee. Fields include the committee's FEC ID, name, treasurer name, mailing address, committee designation (authorized/unauthorized/principal campaign/etc.), committee type code, party affiliation, filing frequency, organization type, and the name of any connected organization or candidate. This is the reference table for joining other files.
  • cn.zip (Candidate Master File): one row per registered candidate. Fields include candidate ID, name, party, election year, office sought (H/S/P), state, district, incumbent challenger open seat status, and the FEC ID of the candidate's principal campaign committee.
  • ccl.zip (Candidate–Committee Linkage): the join table between candidates and all committees authorized to raise money on their behalf. A candidate can have multiple authorized committees across cycles.
  • pas2.zip (PAC-to-Candidate Contributions, Schedule B): committee-to-candidate contributions. Each row represents a single disbursement from a PAC or party committee to a candidate committee. Fields include the contributing committee's FEC ID, the recipient candidate's FEC ID, amount, date, and election cycle. This file captures the direct PAC money flow into campaigns.
  • indiv.zip (Individual Contributions, Schedule A): the largest and most research-valuable file. Every contribution of more than $200 from an individual donor to a federal committee appears here. Fields include the contributor's name, city, state, zip code, employer, occupation, contribution date, amount, and the recipient committee's FEC ID. The employer and occupation fields are particularly powerful for industry-level analysis; they are self-reported and not standardized, so normalization is required before aggregation.
  • oth.zip (Committee-to-Committee Transfers): transfers between political committees, including transfers from national party committees to state parties and between affiliated committees. This file traces the flow of money through the party infrastructure.
  • oppexp.zip (Operating Expenditures, Schedule B): disbursements made by committees for operating expenses: staff salaries, media production, ad buys, polling, travel, and consulting. This file answers questions about where campaigns actually spend money and which vendors dominate the political consulting ecosystem.
  • weball.zip (Summary Financial Data): a pre-aggregated summary of total receipts, disbursements, cash on hand, and debt for each registered committee through the most recent filing. Useful for fast ranking of committees by total activity without parsing the full transaction files.

The individual contributions file (indiv.zip) for the 2024 cycle is the largest, running to several gigabytes compressed and 10–15 gigabytes uncompressed. pandas can load it in chunks; DuckDB handles it efficiently as a single scan without loading into memory. For the 2024 cycle, the file contains tens of millions of rows representing contributions from millions of individual donors across all 50 states.

The OpenFEC API

For programmatic access without handling bulk files, the FEC publishes the OpenFEC API at api.open.fec.gov/v1/. A free API key is required (register at fec.gov/api/public/signup/) and the rate limit for public keys is 1,000 requests per hour. The API covers the same underlying data as the bulk files but allows field-level filtering, pagination, and sorting without downloading gigabytes of data locally.

The primary API endpoints are: /candidates (search and filter candidates by office, party, state, district, and election year); /committees (search committees by type, organization type, state, and party); /filings (retrieve specific FEC filings by committee, report type, and date range);/schedules/schedule_a (receipts—equivalent to the indiv.zip individual contributions file, filterable by contributor name, employer, occupation, zip code, amount range, and date);/schedules/schedule_b (disbursements—equivalent to oppexp.zip, filterable by recipient name, purpose, amount, and date);/schedules/schedule_e (independent expenditures, which are the Super PAC spending records—filterable by supporting or opposing candidate, election cycle, and date); and/schedules/schedule_f (coordinated expenditures by party committees on behalf of candidates).

The Schedule E endpoint is particularly valuable for tracking Super PAC activity in real time during a campaign. Super PACs must report IEs of more than $10,000 within 24 hours, so the Schedule E feed provides a near-real-time window into which races are receiving major outside spending. The endpoint returns the spending committee, the candidate being supported or opposed, the amount, the date, and a payee description. Aggregating Schedule E data by candidate and date produces the outside spending timeline for any federal race.

Dark money and 501(c)(4) organizations

The FEC's disclosure system has a significant gap: nonprofit organizations described under Section 501(c)(4) of the Internal Revenue Code as “social welfare organizations” are not required to register with the FEC as political committees unless political activity is their primary purpose. The IRS standard is that political activity must not be the organization's “primary” activity—a threshold interpreted to mean less than 50% of activity, though the IRS has rarely enforced this limit with precision. A 501(c)(4) organization may therefore make substantial independent expenditures in federal elections— potentially running issue ads, funding voter contact programs, and making contributions to Super PACs—without disclosing the names of its donors to the FEC or the public.

This is the origin of the term “dark money”: money spent to influence elections where the original human donor cannot be traced through public filings. A 501(c)(4) that contributes to a Super PAC appears in the Super PAC's FEC reports as the donor, but the individuals who funded the 501(c)(4) are disclosed only in IRS Form 990 filings—and critically, the Schedule B of the 990 (which lists major donors) is not required to be made public for 501(c)(4)s. The 990 itself is publicly available on the IRS Tax Exempt Organization Search and through ProPublica Nonprofit Explorer, but donor identities are redacted.

Major dark money vehicles have included Crossroads GPS (affiliated with Republican strategist Karl Rove, which spent over $300 million in the 2012 cycle) and Priorities USA Action (a Democratic-aligned Super PAC with a 501(c)(4) affiliate). The DISCLOSE Act, which would require 501(c)(4)s spending on elections to disclose their donors, has been introduced repeatedly in Congress and has consistently failed to achieve the 60-vote threshold needed to overcome a Senate filibuster.

FEC enforcement cases are tracked as Matters Under Review (MURs). MURs are confidential during the investigation phase; the FEC is prohibited by statute from publicly disclosing that a MUR has been opened. Once a MUR is closed—either through a conciliation agreement (settlement), a finding of no probable cause, or a dismissal—the full file becomes public. Closed MUR files are available at fec.gov/legal/enforcement/matters-under-review/ and contain the complaint, investigation documents, commission deliberations, and any conciliation agreement. They represent a detailed record of how campaign finance law has been interpreted and enforced in practice, including the many cases closed on a deadlocked 3–3 vote with no action taken.

Geographic and employer analysis

The individual contributions file enables two types of geographic analysis that are unavailable from any other public dataset. First, zip-code-level mapping of contribution amounts allows researchers and journalists to identify which zip codes generate the most campaign money in absolute terms and as a share of income—a measure of the geographic concentration of political donor power. In the 2020 and 2024 cycles, a handful of zip codes in Manhattan, Silicon Valley, Beverly Hills, and Washington D.C. accounted for a disproportionate fraction of total itemized individual contributions.

Second, the employer and occupation fields enable industry-level analysis of who funds which candidates. The analysis requires normalization because donors self-report their employer name without standardization: “Goldman Sachs,” “Goldman, Sachs & Co.,” and “GS” all appear as distinct employers. The FEC does not harmonize these records. OpenSecrets performs this harmonization and publishes industry-level totals; replicating it from raw FEC data requires a fuzzy-match approach or a curated employer name crosswalk.

At the broad industry level, finance and investment—including private equity, hedge funds, commercial banking, securities, and insurance—account for roughly 30–40% of total itemized individual contributions to both major parties. The industry distributes money across party lines, though in recent cycles it has leaned Republican at the presidential level. Defense and aerospace contractors concentrate more heavily in Republican candidates and in the members of the Armed Services Committees and Appropriations subcommittees with defense jurisdiction. Technology sector employees give more to Democrats in aggregate; however, executives at large technology platforms have shifted toward Republican candidates in the 2024 cycle in ways visible in the individual contributions data. Real estate and construction donors distribute broadly across both parties and across all geographic markets where development activity requires favorable regulation.

The occupation analysis can also reveal which professions punch above their weight relative to income. Attorneys and lobbyists are heavy contributors relative to their share of the workforce. Physicians are major donors, concentrated toward Republican candidates at the individual level though specialty associations give across party lines. Retired individuals represent the largest single occupation category by row count in the individual contributions file because self-reporting “retired” is common among older high-net-worth donors who may have substantial investment income.

Python example: committee type breakdown and occupation partisan lean

The following script downloads the 2024 cycle committee master (cm.zip, approximately 200 KB) and a sample of the individual contributions file (indiv.zip, which is large—setnrows=None for the full dataset), then produces two analyses: committee counts by type and the partisan lean of the top-20 occupations by total contribution amount.

import zipfile
import io
import urllib.request
import pandas as pd

# ---------------------------------------------------------------------------
# FEC Bulk Data: Committee Master + Individual Contributions
# Source: https://www.fec.gov/data/browse-data/?tab=bulk-data
# Files are cycle-specific; replace 24 with 22/20/18 for prior cycles.
# ---------------------------------------------------------------------------

FEC_BASE = "https://www.fec.gov/files/bulk-downloads/2024"

# Committee master: name, type, connected org, treasurer, state
CM_URL = f"{FEC_BASE}/cm24.zip"

# Individual contributions >$200: name, employer, occupation, amount, date, committee
INDIV_URL = f"{FEC_BASE}/indiv24.zip"

CM_COLS = [
    "CMTE_ID", "CMTE_NM", "TRES_NM", "CMTE_ST1", "CMTE_ST2",
    "CMTE_CITY", "CMTE_ST", "CMTE_ZIP", "CMTE_DSGN", "CMTE_TP",
    "CMTE_PTY_AFFILIATION", "CMTE_FILING_FREQ", "ORG_TP",
    "CONNECTED_ORG_NM", "CAND_ID",
]

INDIV_COLS = [
    "CMTE_ID", "AMNDT_IND", "RPT_TP", "TRANSACTION_PGI", "IMAGE_NUM",
    "TRANSACTION_TP", "ENTITY_TP", "NAME", "CITY", "STATE", "ZIP_CODE",
    "EMPLOYER", "OCCUPATION", "TRANSACTION_DT", "TRANSACTION_AMT",
    "OTHER_ID", "TRAN_ID", "FILE_NUM", "MEMO_CD", "MEMO_TEXT", "SUB_ID",
]

COMMITTEE_TYPE_LABELS = {
    "H": "House Candidate Committee",
    "S": "Senate Candidate Committee",
    "P": "Presidential Candidate Committee",
    "Q": "PAC (Qualified Non-party Multi-candidate)",
    "N": "PAC (Non-qualified)",
    "O": "Super PAC (IE-Only)",
    "V": "Hybrid PAC (Carey Committee)",
    "W": "Hybrid PAC (Non-qualified)",
    "X": "Party Committee (Non-qualified)",
    "Y": "Party Committee (Qualified)",
    "Z": "National Party Nonfederal Account",
    "D": "Leadership PAC",
    "I": "PAC (Unknown)",
    "E": "Electioneering Communications Org",
    "C": "Corporation",
    "L": "Labor Organization",
    "M": "Membership Organization",
    "T": "Trade Association",
    "U": "Unknown",
}


def download_zip_to_df(url: str, filename_in_zip: str, cols: list[str],
                       sep: str = "|", nrows: int | None = None) -> pd.DataFrame:
    """Download a FEC bulk ZIP, extract the pipe-delimited file, return DataFrame."""
    print(f"Downloading {url} ...")
    with urllib.request.urlopen(url) as resp:
        raw = resp.read()
    with zipfile.ZipFile(io.BytesIO(raw)) as zf:
        with zf.open(filename_in_zip) as f:
            df = pd.read_csv(
                f,
                sep=sep,
                header=None,
                names=cols,
                encoding="latin-1",
                low_memory=False,
                nrows=nrows,
                dtype=str,
            )
    print(f"  Loaded {len(df):,} rows from {filename_in_zip}")
    return df


def load_committee_master() -> pd.DataFrame:
    return download_zip_to_df(CM_URL, "cm.txt", CM_COLS)


def load_individual_contributions(nrows: int | None = None) -> pd.DataFrame:
    return download_zip_to_df(INDIV_URL, "itcont.txt", INDIV_COLS, nrows=nrows)


def analyze_committee_types(cm: pd.DataFrame) -> None:
    """Aggregate committees by type and print summary."""
    cm["TYPE_LABEL"] = cm["CMTE_TP"].map(COMMITTEE_TYPE_LABELS).fillna("Other/Unknown")
    summary = (
        cm.groupby("TYPE_LABEL")
        .size()
        .rename("committee_count")
        .sort_values(ascending=False)
        .reset_index()
    )
    print("\n=== Committee Count by Type (2024 Cycle) ===")
    print(f"{'Committee Type':<45} {'Count':>8}")
    print("-" * 55)
    for _, row in summary.iterrows():
        print(f"{row['TYPE_LABEL']:<45} {row['committee_count']:>8,}")
    print(f"\nTotal committees registered: {len(cm):,}")


def analyze_occupation_partisan_lean(indiv: pd.DataFrame, cm: pd.DataFrame) -> None:
    """
    For the top-20 occupations by total contributions, compute:
      - total amount contributed
      - Democratic lean: D_total / (D_total + R_total) as a fraction
    Requires joining the individual file to committee master to get party affiliation.
    """
    # Coerce amount to numeric
    indiv["TRANSACTION_AMT"] = pd.to_numeric(indiv["TRANSACTION_AMT"], errors="coerce")
    indiv = indiv.dropna(subset=["TRANSACTION_AMT", "OCCUPATION"])
    indiv = indiv[indiv["TRANSACTION_AMT"] > 0]

    # Keep only major-party committees
    party_map = cm[["CMTE_ID", "CMTE_PTY_AFFILIATION"]].copy()
    indiv = indiv.merge(party_map, on="CMTE_ID", how="left")

    # Normalize occupation (strip whitespace, uppercase)
    indiv["OCC"] = indiv["OCCUPATION"].str.strip().str.upper()

    # Top-20 occupations by total contributions
    top_occs = (
        indiv.groupby("OCC")["TRANSACTION_AMT"]
        .sum()
        .nlargest(20)
        .index.tolist()
    )
    sub = indiv[indiv["OCC"].isin(top_occs)].copy()

    # Partisan breakdown
    dem = sub[sub["CMTE_PTY_AFFILIATION"] == "DEM"].groupby("OCC")["TRANSACTION_AMT"].sum()
    rep = sub[sub["CMTE_PTY_AFFILIATION"] == "REP"].groupby("OCC")["TRANSACTION_AMT"].sum()
    total_by_occ = sub.groupby("OCC")["TRANSACTION_AMT"].sum()

    result = pd.DataFrame({"total": total_by_occ, "dem": dem, "rep": rep}).fillna(0)
    result["dem_lean"] = result["dem"] / (result["dem"] + result["rep"]).replace(0, float("nan"))
    result = result.sort_values("total", ascending=False)

    print("\n=== Top-20 Occupations by Total Contributions (2024 Cycle) ===")
    print(f"{'Occupation':<30} {'Total ($M)':>10} {'Dem Lean':>10}")
    print("-" * 54)
    for occ, row in result.iterrows():
        lean_str = f"{row['dem_lean']:.1%}" if pd.notna(row["dem_lean"]) else "  N/A"
        print(f"{str(occ)[:30]:<30} {row['total']/1e6:>10.1f} {lean_str:>10}")


def main() -> None:
    # Load committee master (small file, ~200 KB)
    cm = load_committee_master()
    analyze_committee_types(cm)

    # Individual contributions file is large (~10-15 GB unzipped for 2024).
    # Set nrows=500_000 for a quick sample; remove for full analysis.
    print("\nLoading individual contributions (sample of 500,000 rows)...")
    indiv = load_individual_contributions(nrows=500_000)
    analyze_occupation_partisan_lean(indiv, cm)


if __name__ == "__main__":
    main()

The committee type breakdown reveals the scale of Super PAC proliferation: in the 2024 cycle there are thousands of registered Independent Expenditure-Only Committees, compared to essentially zero before 2010. The occupation partisan lean analysis quantifies which professions fund which party disproportionately. A Democratic lean of 0.70 for a given occupation means 70% of contributions from that occupation that went to either party went to Democratic committees. Note that this lean reflects only contributions to major-party committees recorded in the individual file; contributions to Super PACs and dark money organizations are partially captured but not comprehensively, since many Super PAC donors also give directly to candidate committees and party committees, and both types of giving appear in the file.

For the hospital payment records that represent one of the largest categories of federal spending, see CMS Medicare Inpatient Provider Data: The Hospital-Level Payment Records Behind $170 Billion in Annual DRG Reimbursements, which covers IPPS payment formulas, DRG relative weights, geographic variation, and Python examples for the full CMS charge dataset.

For analysis of pharmaceutical patent expiry and generic competition timelines relevant to campaign contributions from the healthcare sector, see FDA Orange Book: The Drug Patent and Exclusivity Database Behind Generic Drug Competition and Hatch-Waxman Challenges, covering the Orange Book flat files, Paragraph IV certifications, and Python tools for tracking branded-to-generic cliff dates.