Before a single dollar of federal campaign money can be traced to its source, the entity that raised or spent it has to be named. A campaign, a party, a trade-association PAC, a billionaire's independent-expenditure vehicle—each must register with the Federal Election Commission and receive a unique identifier before it can lawfully move money in a federal election. The committee registry is that master list of the spenders: the tens of thousands of committees registered in a federal election cycle, one row each, every one carrying a C-prefixed committee ID that is the key the rest of the campaign-finance record turns on.
This article covers what the committee registry is and how the Federal Election Campaign Act frames it; the registration threshold that pulls a group into the FEC's jurisdiction and the disclosure obligations that follow; the full taxonomy of committee types—candidate committees, party committees, traditional PACs, Super PACs, hybrid PACs, and leadership PACs—and the designation and connected-organization fields that qualify them; the 2010 decisions in Citizens United v. FEC and SpeechNow.org v. FEC that created the Super PAC and the unlimited fundraising that finances it; how the committee ID is the universal join key from the registry into the itemized receipts, disbursements, and independent-expenditure data; a Python workflow that pulls committees from the OpenFEC API, tallies them by type, and isolates the outside-spending vehicles; and the caveats—registry churn, the gap between registration and activity, and the limits of self-reported descriptive fields—that every analyst must hold in mind before drawing conclusions.
What the dataset is
The committee registry is the FEC's authoritative inventory of political committees: the organizations that register with the Commission because they raise or spend money to influence federal elections. It is the front door of the entire campaign-finance disclosure system. Every other dataset the FEC publishes—the itemized contributions a committee receives, the disbursements it makes, the independent expenditures it reports, the loans, the transfers—is filed by a committee, and every such record points back to a committee in this registry. The registry answers the prior question on which all the money questions depend: who, exactly, is the entity that filed? It is assembled from the registration statements committees file with the Commission and is published through the FEC's OpenFEC API and its bulk data downloads. Across the federal election cycles it covers, the registry runs to tens of thousands of committees.
In our database this record is stored as the table fec_committees, with the grain of one row per registered committee. The columns capture the committee's identity, its regulatory classification, who is legally responsible for it, what organization stands behind it where applicable, and where it sits politically and geographically:
committee_id -- unique FEC identifier, always begins with "C"
name -- the committee's registered name
committee_type -- single-letter type code (P, S, H, N, Q, O, U, V, W, X, Y, Z...)
committee_type_full -- human-readable type (e.g. "Super PAC", "PAC - Qualified")
designation -- designation code (A authorized, P principal, U unauthorized...)
designation_full -- human-readable designation
treasurer_name -- the committee's treasurer (the responsible officer)
connected_org_name -- sponsoring / connected organization, where applicable
organization_type -- corporation, labor, trade, membership, cooperative...
party -- party affiliation code, where applicable
state -- the committee's registered state
filing_frequency -- how often the committee files (monthly, quarterly...)The committee_id is the load-bearing column. It is a persistent identifier assigned by the FEC at registration—always beginning with the letter C followed by eight digits—that uniquely names the committee for as long as it exists. It is the key that ties a committee's registration record to every dollar it later reports: the contributions it receives, the expenditures it makes, the independent expenditures it discloses, the transfers it sends and receives. Because the committee ID appears on every FEC financial filing, a committee identified in fec_committees can be joined directly to its money. The committee_type and designation fields are the substantive classification payload: type distinguishes a Super PAC from a traditional PAC from a party committee from a candidate's campaign, and designation marks whether a committee is a candidate's authorized principal committee or an independent unauthorized one. The connected_org_name and organization_type fields, where present, name the corporation, union, trade association, or membership group that sponsors a traditional PAC—the institutional interest behind the committee.
The Federal Election Campaign Act and the FEC's mandate
The registry exists because of the Federal Election Campaign Act (FECA), the statute that governs the financing of federal elections. Enacted in 1971 and substantially strengthened by amendments in 1974 in the wake of the Watergate scandal—which exposed large, secret, and sometimes illegal corporate contributions to a presidential campaign—FECA established the modern architecture of campaign-finance regulation: limits on contributions, disclosure of receipts and disbursements, and, in the 1974 amendments, the creation of the Federal Election Commission as the independent agency charged with administering and enforcing the law. The Act's core premise is that money in federal elections should be limited at the source and visible to the public, and the committee registry is the first link in the visibility chain.
The constitutional frame around FECA was set by the Supreme Court's 1976 decision in Buckley v. Valeo, which upheld the Act's contribution limits and disclosure requirements as serving the government's interest in preventing corruption and its appearance, while striking down limits on a candidate's own spending and on independent expenditures as impermissible restrictions on political speech. That distinction—between contributions, which may be limited, and independent expenditures, which may not—is the fault line that runs through the entire committee taxonomy, and it is the line the 2010 cases would later widen into the Super PAC. The FEC itself is structured as a six-member bipartisan commission, no more than three of whom may belong to the same party, a design intended to prevent partisan capture but one that often produces deadlock on contested enforcement questions. The agency's practical work is less prosecutorial than informational: it receives registrations and reports, makes them public, issues advisory opinions and regulations, and audits and enforces against violations. The committee registry is the most basic product of that informational mission.
The registration threshold and disclosure duties
Not every group that spends money on politics is a federal political committee. The triggering rule under FECA is a threshold of activity: an organization that receives contributions or makes expenditures aggregating over a statutory dollar amount—more than \$1,000 in a calendar year for the purpose of influencing a federal election—generally becomes a political committee and must register with the FEC. (Candidate committees and the major-purpose test for independent groups add nuance, but the threshold is the basic gate.) Registration is accomplished by filing a Statement of Organization— FEC Form 1—within ten days of crossing the threshold. That form supplies exactly the fields the registry carries: the committee's name, its type and designation, its treasurer, its connected organization where one exists, its bank, and its address. The registry is, in effect, the database of Form 1 filings.
Registration is not a formality; it carries continuing obligations. Once registered, a committee must designate a treasurer—the officer legally responsible for the committee's reporting and recordkeeping, without whom the committee may not accept contributions or make expenditures—and it must file periodic disclosure reports on a schedule set by its type and the election calendar: monthly or quarterly in non-election periods, with additional pre-election and post-election reports, plus special 48-hour and 24-hour reports for last-minute independent expenditures and large late contributions. Those reports are the itemized money: each lists the contributions received above the itemization threshold (with the donor's name, employer, occupation, and amount) and the disbursements made. The registry is therefore the index to a vast, continuously updated body of financial filings—and the filing_frequency field on the registry record tells an analyst how often to expect a given committee to report.
The committee taxonomy
The single most important thing the registry encodes is what kind of committee each entry is, because the type determines the rules—how much it may raise, from whom, and whether it may give directly to candidates. The taxonomy runs along two axes that the data captures separately: the committee type and the designation.
Candidate committees are the campaigns themselves. Every federal candidate has a principal campaign committee—marked in the data by a principal designation—which is the committee that raises and spends the candidate's own money under the contribution limits, and which is linked in the FEC's data to a separate candidate record by a candidate ID. These are the most numerous committees in any election cycle. Party committees are the committees of the political parties at the national, state, and local levels—the national party committees and their congressional and senatorial campaign arms, and the state and local party organizations—each operating under its own contribution and coordinated-spending rules. Traditional PACs—political action committees—are the classic vehicle: a committee that pools contributions from many individuals and contributes directly to candidates within strict per-candidate, per-election limits. Many traditional PACs are separate segregated funds sponsored by a corporation, labor union, trade association, or membership organization—the connected_org_name and organization_type fields name that sponsor—while others are non-connected PACs organized around an ideology or issue.
The post-2010 additions to the taxonomy are the consequential ones. Super PACs—formally independent-expenditure-only committees—may raise unlimited sums from individuals, corporations, and unions, but in exchange may make only independent expenditures: spending that advocates for or against candidates but is not coordinated with any campaign, and crucially may not be contributed directly to candidates or parties. Hybrid PACs (sometimes called Carey committees) maintain two accounts: a traditional, limited account from which they make direct candidate contributions, and a separate, unlimited account from which they make only independent expenditures—a structure that lets a single committee do both jobs while keeping the money segregated. Finally, leadership PACs are PACs established by sitting officeholders or party leaders, separate from their own campaign committees, used to contribute to other candidates and to build political support; they are a traditional PAC type with a distinctive political purpose, and the registry flags them through the connected-officeholder relationship. The designation field cross-cuts all of this, marking whether a committee is a candidate's authorized or principal committee or an independent, unauthorized one—the difference between a campaign's own arm and an outside group.
Citizens United, SpeechNow, and the birth of the Super PAC
The Super PAC—by far the most consequential category the registry has gained in the last two decades—did not exist before 2010. It is the direct product of two judicial decisions handed down that year, and understanding the registry means understanding how they fit together.
The first was the Supreme Court's decision in Citizens United v. Federal Election Commission. The Court held that the government may not prohibit independent expenditures—spending on political communications that is not coordinated with a candidate or party—by corporations and unions. The First Amendment, the majority reasoned, protects political speech regardless of the speaker's corporate or union form, and because independent expenditures are, by definition, not coordinated with a campaign, the Court concluded they do not give rise to the quid pro quo corruption that justifies contribution limits. The decision did not touch the limits on contributions to candidates and parties, and it left disclosure requirements intact; what it removed was the ban on corporations and unions spending their own treasury funds on independent political advocacy.
The second decision supplied the other half of the machine. In SpeechNow.org v. FEC, the U.S. Court of Appeals for the D.C. Circuit, applying the logic of Citizens United, held that because independent expenditures cannot corrupt, the government may not limit the contributions made to a committee that does nothing but make independent expenditures. Citizens United had freed the spending; SpeechNow freed the fundraising that finances it. Together the two decisions created a wholly new kind of entity: a committee that can accept unlimited contributions from any source and spend unlimited amounts on independent expenditures, so long as it makes no direct contributions to candidates and does not coordinate its spending with them. The FEC implemented this through advisory opinions later in 2010, and the result was the independent-expenditure-only committee—the Super PAC—which appears in the registry as its own committee type. This is why the committee type field carries the analytical weight it does: the difference between a traditional PAC and a Super PAC is the difference between a committee bound by source and amount limits that may give to candidates, and a committee bound by none of those limits that may only spend independently. The registry is where that distinction is recorded, one row at a time, for every outside-spending vehicle in federal politics.
The committee ID as the universal join key
The committee registry is most valuable not in isolation but as the index that anchors the entire campaign-finance record, and the committee_id is the key that makes the integration possible. The registry names the spender; the join carries that identity into the money. Three families of join matter most.
The first is to the receipts—the contributions and other money a committee takes in. Every itemized contribution a committee reports carries the recipient committee's ID, so joining fec_committees to the contributions data by committee ID is what attributes a body of donations to a named, typed committee: it lets an analyst ask not just “who gave?” but “who gave to a Super PAC versus a candidate committee?”—and, because the Super PAC has no contribution limits, it is on this join that the unlimited corporate, union, and individual money becomes visible. The second join is to the disbursements and independent expenditures—the money a committee spends. Independent-expenditure records identify the spending committee by ID and name the candidate supported or opposed, so the same key that names a Super PAC in the registry traces, on the expenditure side, exactly which races it intervened in and on which side. The third join is the committee-to-candidate linkage: candidate committees are tied to a separate candidate record by candidate ID, and leadership-PAC and connected-organization relationships tie committees to the officeholders and institutions behind them—so the registry supports building the network of who controls, sponsors, and benefits from each committee. The committee ID is what threads all of it together; without the registry to define and type the spender, the itemized money is a flood of transactions with no actors named.
Analytical uses
A complete, typed, dated registry of every federal political committee supports a distinctive set of analyses that the raw transaction data alone cannot.
Sizing the universe of outside spending is the most immediate use. Because every committee carries a type, an analyst can count how many Super PACs and hybrid PACs are registered in a given cycle, watch that population grow cycle over cycle since 2010, and—joined to the money—measure what share of total federal spending now flows through the unlimited, independent-expenditure channel rather than the limited, direct-contribution one. Mapping the institutional interests behind PACs exploits the connected-organization and organization-type fields: aggregating traditional PACs by their sponsoring corporation, union, or trade association reveals which industries and sectors maintain the largest PAC footprints, and joining to receipts and disbursements turns that footprint into dollars given and races contested.
Listing the most active committees brings the join to the money to bear directly: ranking committees by receipts or disbursements within a cycle surfaces the largest single vehicles—the mega Super PACs, the best-funded party committees, the highest-spending campaigns—and, filtered by type, separates the biggest candidate operations from the biggest outside groups. Finally, building the actor network uses the registry's linkages—committee to candidate, committee to connected organization, leadership PAC to officeholder—to construct the graph of who stands behind which committee, the scaffolding on which dark-money and coordination questions are investigated. In every case the registry is the layer that supplies the identity and the classification; the magnitude comes from the money it joins to.
Python workflow: committees from the OpenFEC API
The script below pulls the committee registry for an election cycle from the FEC's OpenFEC API, tallies the committees by type, isolates the independent-expenditure-only and hybrid vehicles that carry the post-2010 unlimited spending, and ranks registrations by state. OpenFEC is the FEC's public REST interface; it requires a free API key (the literal DEMO_KEY works for light testing at a low rate limit, and a registered key raises the quota). The /committees endpoint returns one row per registered committee with exactly the descriptive fields the registry carries; the money lives on the /committee/{id}/totals and itemized endpoints, reached through the same committee ID. The script paginates the full result set rather than assuming it fits in one page, and leaves the money join as the natural next step.
import requests
from collections import Counter, defaultdict
# OpenFEC API -- the FEC's public REST interface.
# Base: https://api.open.fec.gov/v1
# A free key is required. The literal "DEMO_KEY" works for light
# testing at a low rate limit; register at https://api.data.gov/signup/
# for a per-key quota. Pass it as the api_key query parameter.
BASE = "https://api.open.fec.gov/v1"
API_KEY = "DEMO_KEY" # replace with your registered key for real work
def get_pages(path, params, max_pages=None):
# Walk the paginated OpenFEC result set. Each response carries a
# "pagination" block with the total page count; "results" holds the
# rows. We stop when we run out of pages or hit max_pages.
params = dict(params)
params["api_key"] = API_KEY
params.setdefault("per_page", 100)
page = 1
while True:
params["page"] = page
r = requests.get(f"{BASE}{path}", params=params, timeout=60)
r.raise_for_status()
body = r.json()
for row in body.get("results", []):
yield row
pages = body.get("pagination", {}).get("pages", 1)
if page >= pages or (max_pages and page >= max_pages):
break
page += 1
def committees(cycle):
# /committees returns one row per registered committee. We filter to
# a two-year election cycle and ask only for the descriptive fields
# the registry carries -- the money lives on other endpoints.
params = {"cycle": cycle, "sort": "name"}
for c in get_pages("/committees/", params):
yield {
"id": c.get("committee_id"),
"name": c.get("name"),
"type": c.get("committee_type_full"),
"designation": c.get("designation_full"),
"party": c.get("party_full"),
"state": c.get("state"),
"org": c.get("organization_type_full"),
}
def analyze(cycle):
rows = list(committees(cycle))
print(f"Cycle {cycle}: {len(rows):,} registered committees")
# --- Tally by committee type ----------------------------------------
# Super PAC vs traditional PAC vs party vs candidate committee.
by_type = Counter(r["type"] or "(unspecified)" for r in rows)
print("\nCommittees by type")
print("-" * 56)
for label, n in by_type.most_common():
print(f" {label[:44]:<46} {n:>6,}")
# --- Super PACs and hybrid PACs specifically ------------------------
# The independent-expenditure-only and hybrid committee types are the
# post-2010 vehicles for unlimited outside spending.
outside = [r for r in rows if r["type"] and (
"Independent" in r["type"] or "Hybrid" in r["type"])]
print(f"\nIndependent-expenditure-only + hybrid committees: "
f"{len(outside):,}")
# --- Registrations by state -----------------------------------------
by_state = Counter(r["state"] or "--" for r in rows)
print("\nTop states by committee registrations")
print("-" * 32)
for st, n in by_state.most_common(10):
print(f" {st:<4} {n:>6,}")
return rows
# A committee_id is the join key into the itemized money. Given an id,
# the /committee/{id}/totals endpoint returns receipts and disbursements.
def totals(committee_id, cycle):
params = {"cycle": cycle}
for t in get_pages(f"/committee/{committee_id}/totals/", params, max_pages=1):
return t
return None
rows = analyze(2024)
# Trace one committee's money once its id is known:
# t = totals("C00401224", 2024)
# print(f"Receipts: ${t['receipts']:,.2f} Disbursed: ${t['disbursements']:,.2f}")
Two practical notes apply. First, the type tally in the script counts registered committees, not active ones—a count that, as the caveats stress, includes committees that registered but never raised or spent meaningful money. To measure real activity rather than registration, the natural extension is to call the totals endpoint for each committee ID and filter to those with non-trivial receipts or disbursements; the commented call at the foot of the script shows the shape of that step. Second, for national-scale work—every committee across many cycles, or the full registry joined to all itemized receipts and expenditures—the FEC's bulk data downloads (the committee master file and the transaction files) are far more efficient than thousands of paginated API calls and ship with the authoritative, version-stamped column layouts for each cycle. The API is the right tool for exploration and targeted lookups; the bulk files are the right tool for building the full joined dataset.
Limitations and analytical caveats
The committee registry is the authoritative public record of who is permitted to raise and spend money in federal elections, but it carries structural limitations that an analyst must internalize before drawing conclusions from it.
Registration is not activity. A committee appears in the registry the moment it files a Statement of Organization, whether or not it ever raises or spends a meaningful dollar. Many committees register and then go dormant, raise a token amount, or wind down without formally terminating. A raw count of registered committees therefore overstates the number of consequential actors in any cycle, and any analysis that equates “number of Super PACs” with “amount of Super PAC activity” will be misled. The honest version of every population count is gated on the money: filter to committees with non-trivial receipts or disbursements before treating a registration as an actor.
The registry churns, and committees come and go. Campaigns register for a cycle and terminate after the election; Super PACs spin up around a single race or candidate and dissolve; committees change names, change treasurers, and occasionally change type. A snapshot of the registry is a snapshot of a moving population, and the committee ID—persistent though it is—does not by itself tell you whether a committee was active in the cycle you care about. Cycle-scoped queries (as the script uses) are essential, and longitudinal work must track committees by their stable ID across the name and status changes rather than by name.
The descriptive fields are self-reported, and type does not guarantee behavior. The committee's name, its connected organization, and its stated purpose come from the committee's own filing. A committee's name may be anodyne or deliberately uninformative—a generic, patriotic-sounding label that reveals nothing about who funds it—and the connected-organization field is only as informative as the committee chooses to make it. The type code is reliable for what it legally permits, but it does not by itself reveal whose interests a Super PAC serves; that answer lives in the receipts join, and even there can be obscured when a Super PAC is funded by a nonprofit that does not itself disclose its donors. The registry tells you what a committee is permitted to do and who is nominally responsible for it; it does not, on its own, tell you who is really behind the money.
Held with these caveats in mind, the fec_committees table is a uniquely valuable resource: a complete, typed, persistently identified registry of every entity licensed to move money through a federal election—the layer that names and classifies the spenders before the contribution and expenditure data traces what they raised and where it went, the entry point without which the flood of campaign-finance transactions would be a ledger with no actors in it.
Related writing
FEC Super PAC and Dark Money Data: The Federal Database Behind Outside Political Spending — The committee registry names and types the Super PACs and hybrid PACs; the dark-money record follows the next step, tracing the unlimited receipts and independent expenditures those committees report and the points at which the true source of the money goes dark.
Congressional Voting Records: The Federal Database Behind Every House and Senate Roll Call Vote — The committees in this registry exist to elect and influence members of Congress, and joining the money that flows through them to the roll-call votes those members cast is the central question of money-in-politics analysis.
FARA Foreign Agent Registrations: The Federal Database Behind Foreign Lobbying and Influence Disclosure — Where the FEC registry covers domestic political committees, the FARA database covers agents acting on behalf of foreign principals, the two disclosure regimes that together map who is permitted to spend on American political influence and on whose behalf.