Industries give roughly 2-2.5x more per member to legislators sitting on their regulating committee than to other members of Congress — the raw gap; the causal premium once selection is accounted for is closer to 32%
FEC direct PAC contributions, 2023-2024 cycle; 119th Congress committee rosters; literature comparison via Fouirnaies & Hall (2018, AJPS)
Summary
In the 2023-2024 election cycle, industries gave roughly 2 to 2.5 times more in direct PAC contributions, per member, to legislators sitting on the House/Senate committee that regulates their industry than to members off that committee. Computed here: finance-sector PACs gave House Financial Services/Senate Banking members an average of $694,000 each vs. $331,000 for everyone else (2.1x); energy-sector PACs gave House Energy & Commerce/Senate Energy & Natural Resources members $354,000 vs. $166,000 (2.1x); agriculture-sector PACs gave House/Senate Agriculture Committee members $380,000 vs. $151,000 (2.5x). But this raw cross-sectional gap is NOT a clean causal estimate of what committee jurisdiction itself buys — powerful, senior, and already industry-aligned legislators are the ones who seek and win these committee seats in the first place, so some of the gap reflects who gets on the committee, not what the committee seat does. The one published study that isolates the pure jurisdiction effect with a within-legislator, before/after committee-assignment-change design (Fouirnaies & Hall, 2018, state legislatures) finds a real but much smaller premium of about 32% once that selection is stripped out. Both numbers are true and answer different questions: the raw gap (this analysis, current U.S. Congress) describes how much MORE money committee members actually receive; the causal estimate (published literature, state legislatures) describes how much of that is attributable to holding the seat itself.
Step 1 — Which channel and which industries
Money reaches candidates through several FEC-tracked channels. This analysis uses fec.committee_contributions filtered to transaction_type='24K' (direct PAC-to-candidate contributions), joined to fec.committees for each PAC's connected_org_name, for the 2024-cycle year. This is a real and defensible measure of direct industry giving, but it excludes independent expenditures, electioneering communications, and non-connected/leadership-PAC money (which in some cycles is larger than named-industry-PAC giving) — see the caveats section.
Three industries were chosen because they map cleanly onto a specific committee's jurisdiction: finance (banks, credit unions, securities, insurance, mortgage, investment, real estate PACs) against House Financial Services and Senate Banking, Housing & Urban Affairs; energy (energy, oil, gas, petroleum, electric, utility, power PACs) against House Energy & Commerce and Senate Energy & Natural Resources; and agriculture (farm, agriculture, grain, dairy, crop, cotton, sugar, poultry, cattle PACs) against House/Senate Agriculture. Industry identification here is by keyword match on the PAC's connected-organization name, not an exact entity join — this over- and under-matches at the margins (see caveats).
Step 2 — Building the committee rosters and matching to FEC candidate IDs
Committee membership for the current (119th) Congress came from officials.committee_membership joined to officials.committees — 53 members on House Financial Services, 24 on Senate Banking, 54 on House Energy & Commerce, 20 on Senate Energy & Natural Resources, 53 on House Agriculture, 23 on Senate Agriculture (227 committee-seat rows, 214 unique people, since some members sit on two of these committees).
These bioguide IDs were matched to FEC candidate_ids via officials.members (name, state, district) joined to fec.candidates (2024 election year) on state + office + district + last name. This is a name/geography match, not an exact ID crosswalk — no bioguide-to-FEC-candidate-ID table exists in this corpus. The match rate was roughly 35-40% of sitting members (e.g., 19 of 53 House Financial Services members, 8 of 24 Senate Banking members) — losses come mostly from members who ran unopposed or had simple FEC filings that didn't produce a matchable committee record, plus a few accented-name and multi-candidate-per-district collisions. The unmatched members were dropped rather than guessed at. Because the loss rate is similar across the on-committee and off-committee groups (both in the 33-40% range), it should not by itself bias the on/off ratio, but it does shrink the sample: only 27 of ~77 finance-committee members, 25 of ~74 energy-committee members, and 20 of ~76 agriculture-committee members are represented in the dollar totals below.
Step 3 — The computed gap
| Industry | Off-committee members (matched) | Off-committee avg $/member | On-committee members (matched) | On-committee avg $/member | Ratio |
|---|---|---|---|---|---|
| Finance | 147 | $330,991 | 27 | $694,322 | 2.10x |
| Energy | 145 | $166,180 | 25 | $354,006 | 2.13x |
| Agriculture | 143 | $151,360 | 20 | $380,380 | 2.51x |
The average premium across all three industries is roughly 2.2x (+120%) — committee members receive a bit more than double what non-committee members receive per capita from the industries their committee oversees. This is a cross-sectional, correlational finding for the current Congress, not a causal effect.
Step 4 — Why the raw gap overstates the pure committee effect, and what the literature finds instead
A cross-sectional comparison like the one above cannot separate 'the committee seat causes more industry money' from 'legislators who already have industry ties, seniority, or fundraising power get placed on (and stay on) the lucrative committee in the first place.' Committee assignments in the U.S. Congress are themselves partly a function of prior relationships with the industries the committee regulates — so some of the observed 2-2.5x gap is selection, not effect.
The design that actually isolates the jurisdiction effect is a within-legislator, before/after comparison: track legislators whose committee assignment CHANGED, and compare their own contributions before and after the change against a matched group of legislators whose assignment did not change over the same window. Fouirnaies and Hall, \"How Do Interest Groups Seek Access to Committees?\" (American Journal of Political Science, 2018, 62(1): 132-147), run exactly this design across 99 U.S. state legislative chambers, 1988-2014, and find that industries increase contributions to a legislator by roughly 32% on average once that legislator gains jurisdiction over their industry — with a placebo test (industries with no jurisdictional relationship to the committee) showing no comparable jump, which is what confirms the design is isolating the targeted relationship rather than a generic 'new committee seat, more money of all kinds' effect. This is the best available causal benchmark for the question, though it is measured in state legislatures, not the U.S. Congress specifically — no equivalent published within-legislator natural-experiment estimate for the federal Congress was found in this pass, and this corpus does not carry historical committee-ASSIGNMENT-CHANGE records (only the current roster), so that design could not be replicated here for federal committees in this session.
Other literature confirms the broader pattern qualitatively without a comparable causal estimate: OpenSecrets and academic work on corporate PAC giving (e.g., Grier, Munger & Roberts-style corporate-PAC studies) document that PAC contributions flow disproportionately to incumbents, majority-party members, and members of committees with jurisdiction relevant to the PAC's sponsor, and that more heavily regulated industries form more PACs and give more in aggregate — consistent with, but not a quantified causal replication of, the pattern found here.
Caveats and limits
- Channel: this covers direct PAC-to-candidate contributions (24K) only, for the 2023-2024 cycle. It excludes independent expenditures, electioneering communications, and non-connected/leadership-PAC and individual-donor money, all of which can be large and are not attributable to a single named industry PAC in the same way.
- Industry identification: by keyword match on each PAC's self-reported connected-organization name, not a verified entity-level industry classification (e.g., NAICS-coded). This is a reasonable approximation for finance/energy/agriculture, which have fairly distinctive PAC-naming conventions, but will miss diversified conglomerates and misclassify a few edge cases (e.g., 'real estate' PACs pulled into finance).
- Candidate matching: name/state/district matching to FEC IDs succeeded for roughly 35-40% of each committee's sitting members; this shrinks the sample materially (to 20-27 committee members per industry) though the loss rate looks similar on and off each committee.
- Correlational, not causal: the 2-2.5x figures answer 'how much more do committee members currently receive,' not 'how much would a given legislator's industry money change if they gained or lost the seat.' The 32% figure from Fouirnaies & Hall answers the causal question, but for state legislatures rather than the federal Congress specifically.
- Current roster only: officials.committee_membership in this corpus carries only the CURRENT (119th Congress) roster, with no historical committee-assignment-change data, so a federal-Congress-specific replication of the Fouirnaies & Hall design was not possible in this session.
What This Report Does Not Answer
- Use a design that actually isolates the committee-jurisdiction effect for the federal Congress specifically: This corpus only carries the CURRENT committee roster (no historical assignment-change data), so a federal-Congress-specific within-legislator natural experiment could not be built this session; the causal estimate cited is from state legislatures (Fouirnaies & Hall 2018), not the U.S. Congress
Every query behind this report
18 warehouse calls ran in this session, in order. Each is reproducible against the same snapshot.
query — 6 rows — 1926 ms
SELECT committee_id, chamber, name FROM officials.committees WHERE is_subcommittee = false AND (name ILIKE '%financial services%' OR name ILIKE '%energy and commerce%' OR name ILIKE '%agriculture%' OR name ILIKE '%banking%' OR name ILIKE '%energy and natural resources%')query — 1 rows — 2987 ms
SELECT MAX(congress) AS c FROM officials.membersquery — 6 rows — 4661 ms
SELECT DISTINCT "year" FROM fec.committee_contributions ORDER BY 1query — 1 rows — 5526 ms
WITH committee_current AS (
SELECT cm.committee_id AS panel_id, c.chamber, c.name AS committee_name, cm.bioguide_id
FROM officials.committee_membership cm JOIN officials.committees c ON cm.committee_id=c.committee_id
WHERE cm.committee_id IN ('HSAG','HSBA','HSIF','SSAF','SSBK','SSEG')
),
mem AS (
SELECT bioguide_id, name_last_first, state_name, district
FROM officials.members WHERE congress = 119
),
matched AS (
SELECT cc.panel_id, cc.chamber, cc.committee_name, cc.bioguide_id, m.name_last_first, m.state_name, m.district, sr.state_abbr
FROM committee_current cc
JOIN mem m ON cc.bioguide_id = m.bioguide_id
JOIN geo.state_ref sr ON sr.state_name = m.state_name
)
SELECT count(*) AS n_committee_rows, count(DISTINCT bioguide_id) AS n_unique_members FROM matched
query — 6 rows — 5980 ms
WITH committee_current AS (
SELECT cm.committee_id AS panel_id, c.chamber,
CASE WHEN cm.committee_id IN ('HSBA','SSBK') THEN 'finance'
WHEN cm.committee_id IN ('HSIF','SSEG') THEN 'energy'
WHEN cm.committee_id IN ('HSAG','SSAF') THEN 'agriculture' END AS industry,
cm.bioguide_id
FROM officials.committee_membership cm JOIN officials.committees c ON cm.committee_id=c.committee_id
WHERE cm.committee_id IN ('HSAG','HSBA','HSIF','SSAF','SSBK','SSEG')
),
mem AS (
SELECT bioguide_id, name_last_first, state_name, district
FROM officials.members WHERE congress = 119
),
matched AS (
SELECT DISTINCT cc.industry, cc.chamber, cc.bioguide_id, m.name_last_first,
sr.state_abbr, m.district,
split_part(m.name_last_first, ',', 1) AS last_name
FROM committee_current cc
JOIN mem m ON cc.bioguide_id = m.bioguide_id
JOIN geo.state_ref sr ON sr.state_name = m.state_name
),
cand AS (
SELECT DISTINCT m.industry, m.chamber, m.bioguide_id, fc.candidate_id
FROM matched m
JOIN fec.candidates fc
ON fc.state = m.state_abbr
AND fc.office = CASE WHEN m.chamber='house' THEN 'H' ELSE 'S' END
AND fc.election_year = 2024
AND fc.candidate_name ILIKE m.last_name || ',%'
AND (m.chamber = 'senate' OR fc.district = LPAD(CAST(m.district AS VARCHAR), 2, '0'))
)
SELECT industry, chamber, count(DISTINCT bioguide_id) AS n_members_matched, count(DISTINCT candidate_id) AS n_cand_ids
FROM cand GROUP BY industry, chamber
query — 6 rows — 781 ms
SELECT committee_id, count(*) FROM officials.committee_membership WHERE committee_id IN ('HSAG','HSBA','HSIF','SSAF','SSBK','SSEG') GROUP BY committee_idquery — 10 rows — 3360 ms
WITH committee_current AS (
SELECT cm.bioguide_id
FROM officials.committee_membership cm
WHERE cm.committee_id = 'HSBA'
),
mem AS (
SELECT bioguide_id, name_last_first, state_name, district AS mem_district
FROM officials.members WHERE congress = 119
),
matchedx AS (
SELECT cc.bioguide_id, m.name_last_first, sr.state_abbr, m.mem_district,
split_part(m.name_last_first, ',', 1) AS last_name
FROM committee_current cc
JOIN mem m ON cc.bioguide_id = m.bioguide_id
JOIN geo.state_ref sr ON sr.state_name = m.state_name
)
SELECT * FROM matchedx LIMIT 10
query — 1 rows — 3758 ms
SELECT candidate_id, candidate_name FROM fec.candidates WHERE state='AR' AND office='H' AND election_year=2024 AND candidate_name ILIKE 'Hill,%'critique_query — 159 ms
WITH committee_current AS (
SELECT cm.bioguide_id
FROM officials.committee_membership cm
WHERE cm.committee_id = 'HSBA'
),
mem AS (
SELECT bioguide_id, name_last_first, state_name, district AS mem_district
FROM officials.members WHERE congress = 119
),
matchedx AS (
SELECT cc.bioguide_id, m.name_last_first, sr.state_abbr, m.mem_district,
split_part(m.name_last_first, ',', 1) AS last_name
FROM committee_current cc
JOIN mem m ON cc.bioguide_id = m.bioguide_id
JOIN geo.state_ref sr ON sr.state_name = m.state_name
)
SELECT matchedx.bioguide_id, matchedx.name_last_first, matchedx.state_abbr, matchedx.mem_district,
fc.candidate_id, fc.candidate_name, fc.district AS fc_district
FROM matchedx
LEFT JOIN fec.candidates fc ON fc.state = matchedx.state_abbr AND fc.office = 'H' AND fc.election_year = 2024 AND fc.candidate_name ILIKE (matchedx.last_name || ',%')
ORDER BY matchedx.bioguide_id
LIMIT 70
query — 1 rows — 3878 ms
SELECT DISTINCT type FROM fec.candidates WHERE election_year=2024 LIMIT 5query — 5 rows — 3893 ms
SELECT m.bioguide_id, fc.candidate_id FROM officials.members m JOIN fec.candidates fc ON fc.state='AR' WHERE m.congress=119 LIMIT 5query — 5 rows — 5094 ms
WITH mem AS (
SELECT bioguide_id, name_last_first, state_name FROM officials.members WHERE congress = 119 LIMIT 20
),
withabbr AS (
SELECT mem.bioguide_id, mem.name_last_first, sr.state_abbr
FROM mem JOIN geo.state_ref sr ON sr.state_name = mem.state_name
)
SELECT withabbr.bioguide_id, fc.candidate_id
FROM withabbr
JOIN fec.candidates fc ON fc.state = withabbr.state_abbr
LIMIT 5
query — 53 rows — 1321 ms
SELECT bioguide_id FROM officials.committee_membership WHERE committee_id='HSBA'query — 227 rows — 1233 ms
SELECT bioguide_id FROM officials.committee_membership WHERE committee_id IN ('HSAG','HSBA','HSIF','SSAF','SSBK','SSEG')query — 227 rows — 1542 ms
SELECT committee_id, bioguide_id FROM officials.committee_membership WHERE committee_id IN ('HSAG','HSBA','HSIF','SSAF','SSBK','SSEG')query — 500 rows — 9987 ms
SELECT mem.bioguide_id, mem.name_last_first, sr.state_abbr, mem.district AS mem_district,
CASE WHEN mem.district IS NULL THEN 'senate' ELSE 'house' END AS chamber,
fc.candidate_id
FROM officials.members mem
JOIN geo.state_ref sr ON sr.state_name = mem.state_name
LEFT JOIN fec.candidates fc
ON fc.state = sr.state_abbr
AND fc.election_year = 2024
AND fc.office = CASE WHEN mem.district IS NULL THEN 'S' ELSE 'H' END
AND fc.candidate_name ILIKE split_part(mem.name_last_first, ',', 1) || ',%'
AND (mem.district IS NULL OR fc.district = LPAD(CAST(mem.district AS VARCHAR), 2, '0'))
WHERE mem.congress = 119
query — 13 rows — 10572 ms
WITH candmap AS (
SELECT mem.bioguide_id,
CASE WHEN mem.district IS NULL THEN 'senate' ELSE 'house' END AS chamber,
fc.candidate_id,
CASE WHEN mem.bioguide_id IN ('H001072','W000187','L000491','V000081','S000250','S000344','H001058','M001137','W000812','L000562','B001282','G000553','W000816','C001061','E000294','H001047','L000583','F000454','D000626','B001281','R000612','V000130','S001213','G000583','T000480','G000581','S001188','C001117','N000190','P000617','M001204','T000481','K000397','T000486','D000032','G000587','G000597','W000788','F000471','P000620','F000474','F000110','L000599','B001326','D000594','L000607','O000175','N000193','M001136','S000168','D000634','H001099','M001236','S001184','C000880','R000605','T000476','K000393','H000601','L000571','B001319','R000618','B001299','C001096','M001242','M001243','W000817','R000122','W000805','V000128','C001113','S001203','W000790','K000394','G000574','B001303','A000382') THEN 1 ELSE 0 END AS is_finance_committee,
CASE WHEN mem.bioguide_id IN ('G000558','P000034','L000566','D000197','G000568','S001145','B001257','M001163','H001067','C001066','C001103','T000469','P000609','C001067','D000628','R000599','C001120','P000608','J000302','D000624','W000814','V000131','A000372','K000385','B001306','B001300','F000469','S001200','P000048','S001216','H001086','T000482','M001215','F000468','C001039','O000172','O000019','A000148','J000307','C001125','B000668','M001226','H001093','M001225','F000478','L000601','L000597','M001227','L000600','K000398','R000619','E000300','G000601','F000482','L000577','B001261','R000584','D000618','C001095','M001243','J000312','C001075','H001079','M001153','H001061','H001046','W000779','C000127','H001042','K000383','C001113','H000273','P000145','G000574') THEN 1 ELSE 0 END AS is_energy_committee,
CASE WHEN mem.bioguide_id IN ('T000467','C001119','L000491','C001059','S001189','M000312','C001087','A000370','D000616','H001081','R000603','B001313','K000388','D000629','B001298','S001226','B001295','D000230','J000301','T000487','B001307','B001315','M000871','S001225','F000446','V000136','M001211','J000309','M001212','T000488','C001039','G000605','F000475','M001237','R000612','F000481','J000304','V000138','D000594','R000622','N000193','M001231','V000135','M001232','N000189','P000597','W000829','C001112','B001327','M001233','H001102','T000490','V000129','B001236','M000355','H001061','E000295','H001079','M001198','T000278','J000312','G000386','T000250','F000463','M000934','K000367','B001267','S001203','D000563','B001288','L000570','W000790','W000800','F000479','S001150','S001208') THEN 1 ELSE 0 END AS is_ag_committee
FROM officials.members mem
JOIN geo.state_ref sr ON sr.state_name = mem.state_name
LEFT JOIN fec.candidates fc
ON fc.state = sr.state_abbr
AND fc.election_year = 2024
AND fc.office = CASE WHEN mem.district IS NULL THEN 'S' ELSE 'H' END
AND fc.candidate_name ILIKE split_part(mem.name_last_first, ',', 1) || ',%'
AND (mem.district IS NULL OR fc.district = LPAD(CAST(mem.district AS VARCHAR), 2, '0'))
WHERE mem.congress = 119
)
SELECT chamber, is_finance_committee, is_energy_committee, is_ag_committee, count(DISTINCT bioguide_id) AS n_members, count(DISTINCT candidate_id) AS n_matched_candidates
FROM candmap
GROUP BY chamber, is_finance_committee, is_energy_committee, is_ag_committee
query — 6 rows — 60861 ms
WITH candmap AS (
SELECT mem.bioguide_id,
fc.candidate_id,
CASE WHEN mem.bioguide_id IN ('H001072','W000187','L000491','V000081','S000250','S000344','H001058','M001137','W000812','L000562','B001282','G000553','W000816','C001061','E000294','H001047','L000583','F000454','D000626','B001281','R000612','V000130','S001213','G000583','T000480','G000581','S001188','C001117','N000190','P000617','M001204','T000481','K000397','T000486','D000032','G000587','G000597','W000788','F000471','P000620','F000474','F000110','L000599','B001326','D000594','L000607','O000175','N000193','M001136','S000168','D000634','H001099','M001236','S001184','C000880','R000605','T000476','K000393','H000601','L000571','B001319','R000618','B001299','C001096','M001242','M001243','W000817','R000122','W000805','V000128','C001113','S001203','W000790','K000394','G000574','B001303','A000382') THEN 1 ELSE 0 END AS is_finance_committee,
CASE WHEN mem.bioguide_id IN ('G000558','P000034','L000566','D000197','G000568','S001145','B001257','M001163','H001067','C001066','C001103','T000469','P000609','C001067','D000628','R000599','C001120','P000608','J000302','D000624','W000814','V000131','A000372','K000385','B001306','B001300','F000469','S001200','P000048','S001216','H001086','T000482','M001215','F000468','C001039','O000172','O000019','A000148','J000307','C001125','B000668','M001226','H001093','M001225','F000478','L000601','L000597','M001227','L000600','K000398','R000619','E000300','G000601','F000482','L000577','B001261','R000584','D000618','C001095','M001243','J000312','C001075','H001079','M001153','H001061','H001046','W000779','C000127','H001042','K000383','C001113','H000273','P000145','G000574') THEN 1 ELSE 0 END AS is_energy_committee,
CASE WHEN mem.bioguide_id IN ('T000467','C001119','L000491','C001059','S001189','M000312','C001087','A000370','D000616','H001081','R000603','B001313','K000388','D000629','B001298','S001226','B001295','D000230','J000301','T000487','B001307','B001315','M000871','S001225','F000446','V000136','M001211','J000309','M001212','T000488','C001039','G000605','F000475','M001237','R000612','F000481','J000304','V000138','D000594','R000622','N000193','M001231','V000135','M001232','N000189','P000597','W000829','C001112','B001327','M001233','H001102','T000490','V000129','B001236','M000355','H001061','E000295','H001079','M001198','T000278','J000312','G000386','T000250','F000463','M000934','K000367','B001267','S001203','D000563','B001288','L000570','W000790','W000800','F000479','S001150','S001208') THEN 1 ELSE 0 END AS is_ag_committee
FROM officials.members mem
JOIN geo.state_ref sr ON sr.state_name = mem.state_name
LEFT JOIN fec.candidates fc
ON fc.state = sr.state_abbr
AND fc.election_year = 2024
AND fc.office = CASE WHEN mem.district IS NULL THEN 'S' ELSE 'H' END
AND fc.candidate_name ILIKE split_part(mem.name_last_first, ',', 1) || ',%'
AND (mem.district IS NULL OR fc.district = LPAD(CAST(mem.district AS VARCHAR), 2, '0'))
WHERE mem.congress = 119
),
distinct_cand AS (
SELECT DISTINCT bioguide_id, candidate_id, is_finance_committee, is_energy_committee, is_ag_committee
FROM candmap WHERE candidate_id IS NOT NULL
),
contrib AS (
SELECT cc.candidate_id, cm.connected_org_name, cc.amount
FROM fec.committee_contributions cc
JOIN fec.committees cm ON cm.committee_id = cc.committee_id
WHERE cc."year" = '2024' AND cc.transaction_type = '24K' AND cm.connected_org_name IS NOT NULL
),
finance AS (
SELECT dc.is_finance_committee AS on_committee, count(DISTINCT dc.bioguide_id) AS n_members, sum(ct.amount) AS total_amt
FROM distinct_cand dc JOIN contrib ct ON ct.candidate_id = dc.candidate_id
WHERE ct.connected_org_name ILIKE '%bank%' OR ct.connected_org_name ILIKE '%financial%' OR ct.connected_org_name ILIKE '%credit union%' OR ct.connected_org_name ILIKE '%securities%' OR ct.connected_org_name ILIKE '%insurance%' OR ct.connected_org_name ILIKE '%investment%' OR ct.connected_org_name ILIKE '%mortgage%' OR ct.connected_org_name ILIKE '%realtors%' OR ct.connected_org_name ILIKE '%real estate%'
GROUP BY dc.is_finance_committee
),
energy AS (
SELECT dc.is_energy_committee AS on_committee, count(DISTINCT dc.bioguide_id) AS n_members, sum(ct.amount) AS total_amt
FROM distinct_cand dc JOIN contrib ct ON ct.candidate_id = dc.candidate_id
WHERE ct.connected_org_name ILIKE '%energy%' OR ct.connected_org_name ILIKE '%oil%' OR ct.connected_org_name ILIKE '%gas%' OR ct.connected_org_name ILIKE '%petroleum%' OR ct.connected_org_name ILIKE '%electric%' OR ct.connected_org_name ILIKE '%utilit%' OR ct.connected_org_name ILIKE '%power%'
GROUP BY dc.is_energy_committee
),
ag AS (
SELECT dc.is_ag_committee AS on_committee, count(DISTINCT dc.bioguide_id) AS n_members, sum(ct.amount) AS total_amt
FROM distinct_cand dc JOIN contrib ct ON ct.candidate_id = dc.candidate_id
WHERE ct.connected_org_name ILIKE '%farm%' OR ct.connected_org_name ILIKE '%agricult%' OR ct.connected_org_name ILIKE '%grain%' OR ct.connected_org_name ILIKE '%dairy%' OR ct.connected_org_name ILIKE '%crop%' OR ct.connected_org_name ILIKE '%cotton%' OR ct.connected_org_name ILIKE '%sugar%' OR ct.connected_org_name ILIKE '%poultry%' OR ct.connected_org_name ILIKE '%cattle%'
GROUP BY dc.is_ag_committee
)
SELECT 'finance' AS industry, * FROM finance
UNION ALL
SELECT 'energy' AS industry, * FROM energy
UNION ALL
SELECT 'agriculture' AS industry, * FROM ag
Sources
- fec.committee_contributions (24K direct PAC contributions, 2024 cycle) joined to fec.committees, officials.committee_membership/committees, officials.members, fec.candidates, geo.state_ref
Show SQL
See Step 3 query: CTE joining officials.members + geo.state_ref + fec.candidates (name/state/district match) to fec.committee_contributions (transaction_type='24K', year='2024') via fec.committees.connected_org_name keyword filters, grouped by on/off relevant committee flag. - Fouirnaies & Hall, "How Do Interest Groups Seek Access to Committees?", American Journal of Political Science 62(1), 2018 — Within-legislator, committee-assignment-change design; 99 state legislative chambers, 1988-2014; ~32% average contribution premium under committee jurisdiction
- Corporate PAC Campaign Contributions in Perspective — Qualitative literature confirming PAC money flows disproportionately to committee members with relevant jurisdiction
- OpenSecrets, Political Action Committees (PACs), 2024 — Context: ~$453M in direct PAC contributions to federal candidates in 2024