Campaign Finance Reform and Small-Donor Civic Engagement
Data Analysis | Brennan Center for Justice Application
Author
Gauri Adarsh
Published
March 20, 2026
Overview
Voter apathy is not, in my experience, the product of indifference - rather, it is often the product of exclusion. This past quarter, I ran a presidential election at Northwestern, and watched as students, especially those from communities who had been ravaged by institutional negligence, struggled to conjure up passion for political processes. Even in a record turnout election, we reached only 22% of the undergraduate student body.
It was against this backdrop that while applying for the Brennan Center’s Legal Department Internship, I became intrigued with New York State’s voluntary small-donor public financing system. Designed in the post Citizens United v. FEC landscape, it aims to amplify the political voice of ordinary donors. This asks, implicitly, for candidates engage with constituents of all wealth classes, not just the top 1%, for them to get funding to support their race.
But does the data reflect the promises of the system? I decided to find out, as I find that evidence-based advocacy is the most durable kind.
Data
I used data from the New York State Board of Elections to do a preliminary investigation into whether small donor public financing had achieved its goals of broader civic engagement. Contribution data from 2022 serves as the pre-reform period, while data from 2024 represents the post-reform period.
I first looked at the distribution of donations from $5-$250, comparing pre-campaign reform (which happened late in 2022) to post-campaign reform. With small donor public financing, we want to try and strengthen the power of smaller donors so the 1% does not have such a hold on campaign finance.
Figure 1 reveals a modest but meaningful rightward shift in donation density, concentrated in the $30–$90 range. This is encouraging: it suggests that donors are not just entering the matchable range, but giving at amounts closer to the upper bound where their contributions and the public match carry greater weight.
Table 1 tells a nuanced story. Total donations fell from approximately 265,000 pre-reform to 164,000 post-reform, but the composition shifted decisively. The share of small donations rose from 82% to 88.8%, while the median donation increased from $27 to $40 and the mean fell sharply from $494 to $259. This divergence between mean and median is precisely what a functioning small-donor program should produce: it signals that the top of the distribution is pulling less weight, and that a broader base of contributors is becoming more active.
Where Is Campaign Money Coming From?
Code
money_summary <- state_data |>group_by(period) |>summarise(total_money =sum(amount),small_money =sum(amount[matchable_donation]),pct_small_money = small_money / total_money)money_summary |>mutate(total_money = scales::comma(total_money),small_money = scales::comma(small_money),pct_small_money = scales::percent(pct_small_money, accuracy =0.1)) |>rename("Total money"= total_money,"Small-donor money"= small_money,"% from small donors"= pct_small_money) |>kable(caption ="Share of Campaign Money from Matchable Donations")
Table 2: Share of Campaign Money from Matchable Donations
Share of Campaign Money from Matchable Donations
period
Total money
Small-donor money
% from small donors
post
42,512,444
8,836,582
20.8%
pre
131,276,135
12,266,408
9.3%
Table 2 makes the structural shift even clearer. Total campaign receipts contracted from $131 million to $42 million: yet the share attributable to small donations more than doubled, rising from 9.3% to 20.8%. In a post-Citizens United environment where structural incentives heavily favor large contributors, this represents a meaningful rebalancing. Campaigns appear to be recalibrating their fundraising toward the matchable donor pool, a good sign for the program.
Is the Shift Widespread or Localized?
Code
zip_small <- state_data |>filter(!is.na(zip), zip !="") |>mutate(zip5 =str_sub(zip, 1, 5)) |>group_by(period, zip5) |>summarise(pct_small =mean(matchable_donation), n =n(), .groups ="drop") |>filter(n >50)zip_small_change <- zip_small |>select(period, zip5, pct_small) |>pivot_wider(names_from = period, values_from = pct_small, values_fill =0) |>mutate(change = post - pre) |>filter(change >-0.5, change <1)ggplot(zip_small_change, aes(x = change)) +geom_histogram(data = zip_small_change |>filter(change <0),bins =30,fill ="#4A4A4A", color ="black") +geom_histogram(data = zip_small_change |>filter(change >=0),bins =30,fill ="#FF474C",color ="black") +geom_vline(xintercept =0, linetype ="dashed", linewidth =1) +scale_x_continuous(labels = scales::percent) +labs(title ="Distribution of Changes in Small-Donor Share Across NY ZIP Codes",x ="Change in % Small Donations (Post - Pre)",y ="Number of ZIP Codes") +theme_minimal() +theme(text =element_text(family ="Helvetica"),plot.title =element_text(face ="bold", size =14),axis.title =element_text(size =14),axis.text =element_text(size =12),panel.grid.minor =element_blank()) +labs(title ="Distribution of Changes in Small-Donor Share Across NY ZIP Codes",subtitle ="Majority of ZIP codes experienced increases in small-donor participation")
Figure 2
A ZIP-code-level analysis reveals a clear rightward distribution in Figure 2: the majority of New York ZIP codes experienced positive increases in small-donor participation. This is a critical finding. The concern with targeted reform programs is often that they energize already-engaged communities while leaving others behind. The geographic distribution here suggests something different: there seems to be a broad-based structural shift rather than a localized one. While the magnitude of change varies, the direction is consistent across the state.
Donation Volume by Size Category
Code
# Number of donations by sizestate_data |>mutate(size_group =case_when( amount <25~"Under $25", amount <100~"$25–$99", amount <=250~"$100–$250",TRUE~"Over $250"),size_group =factor(size_group, levels =c("Under $25", "$25–$99", "$100–$250", "Over $250")), period =factor(period, levels =c("pre", "post"))) |>count(period, size_group) |>group_by(period) |>mutate(pct = n/sum(n)) |>ggplot(aes(x = size_group, y = pct, fill = period)) +geom_col(position ="dodge", color ="black", linewidth =0.4) +labs(title ="Number of Donations by Size Category",x ="Donation Size",y ="Share of Total Donations") +theme_minimal() +scale_y_continuous(labels = scales::percent) +scale_fill_manual(values =c("post"="red","pre"="black")) +theme(text =element_text(family ="Helvetica"),plot.title =element_text(face ="bold", size =16),axis.title =element_text(size =14),axis.text =element_text(size =12),legend.position ="right",panel.grid.minor =element_blank())
Disaggregating donations by size within the matchable range reveals the incentive structure at work. The $25–$99 and $100–$250 categories both grew as a share of total donations, while contributions above $250 declined. Donors, it appears, are responding to the match, giving in amounts where their contributions are amplified and where campaigns have reason to seek them out.
Limitations and Next Steps
Two things I can’t claim here –
The first is straightforward: 2022 was a midterm, 2024 was a presidential election year. A lot of things, therefore, will look different, and 2026 data (once it is finalized) will be a better proxy for post-reform.
The second is the limitation that actually bothers me. Even if small-donor participation increased in aggregate, I still don’t know who those donors are. The program exists because ordinary people, especially those from communities that have been systematically excluded from political power, deserve to have campaigns compete for their attention. Whether that’s actually happening would require linking this data to income levels, racial composition, prior voting history, etc.. I would hope to run that analysis next.
Conclusion
Working on this analysis made me even more curious about the mechanics of small donor public financing and how policy design can shape civic participation. While this was a preliminary exploration, it was exciting to see patterns that suggest small donors may be playing a larger role in campaign finance after the reform. If nothing else, it reassured me that staring at large campaign finance datasets for fun might actually be a productive use of time!
More broadly, working on this project reinforced why I’m so drawn to the Brennan Center’s work. I’m fascinated by the ways institutional design can shape political participation, and campaign finance reform feels like a particularly powerful lever for strengthening democratic engagement. If I were lucky enough to work with the Brennan Center’s legal department this summer, I would be thrilled to keep asking questions like these.