FEC Scraper
Spider read fec.gov in 145 ms without a browser and returned 98 lines of clean markdown, including sections like "Your web browser is not supported", "Protecting the integrity of the campaign finance process" and "News and announcements".
## Your web browser is not supportedThis site uses features that are not supported by this browser. For a better experience, please switch to a modern browser.## Protecting the integrity of the campaign finance process* ## Search all campaign finance dataResearch federal election data and its relevance across the country.* ## Help for candidates and committeesHelp for individuals and groups who are active in federal elections.Explore relevant statutes, regulations, Commission actions and court cases.## News and announcementsFEC to host September 16 Independent Expenditures and Pre-Election Communications Webinar (2026)Can my campaign accept LLC contributions?Statistical Summary of 15-Month Campaign Activity of the 2025-2026 Election Cycle## Events and deadlinesUnderstand ways to support federal candidatesLearn more about using the FEC's campaign finance dataFind election results and voting information## Who is raising and spending the mostLearn how much individual candidates have raised and spent for presidential, Senate and House elections.* Browse top raising candidates# CommissionersCommissioner Acting as Chair The same call, in code.
The capture above came back as markdown. These examples add a key, so you get browser rendering, proxies, and concurrency on fec.gov.
import { SpiderBrowser } from "spider-browser";
const spider = new SpiderBrowser({
apiKey: process.env.SPIDER_API_KEY!,
});
await spider.connect();
const page = spider.page!;
await page.goto("https://www.fec.gov/data/candidates/senate/?is_active_candidate=true");
// No selectors, no schema. Spider reads the page and names the fields.
const data = await page.scrape();
console.log(data);
await spider.close(); import { SpiderBrowser } from "spider-browser";
const spider = new SpiderBrowser({
apiKey: process.env.SPIDER_API_KEY!,
});
await spider.connect();
const page = spider.page!;
await page.goto("https://www.fec.gov/data/candidates/senate/?is_active_candidate=true");
await page.content();
const data = await page.extractFields({
name: "table tbody tr td:first-child a",
party: "table tbody tr td:nth-child(2)",
state: "table tbody tr td:nth-child(3)",
receipts: "table tbody tr td:nth-child(5)",
});
console.log(data);
await spider.close(); Ready for volume? Get an API key →
Fields you can pull.
Spider names these from the page. The capture above came back as markdown; the same
call with return_format: "json" returns them as keys.
What fec.gov costs to scrape.
The capture above cost $0.000073 to fetch. Pricing is $1 per GB of pre-transformation bandwidth plus $0.001 per CPU minute, so a page like this one lands at a fraction of a cent. Failed requests are billed at $0.
- Free balance on signup
- No card required to test
- Balance never expires
Run it keyless, no account
More Government & Legal scrapers.
SEC EDGAR Government Scraper
Extract SEC filings, company financial reports, insider trading data, and regulatory submissions from EDGAR.
USPTO Scraper
Extract patent applications, trademark filings, examiner data, and prosecution history from USPTO.
Congress.gov Scraper
Extract bill text, voting records, committee reports, and legislative history from Congress.gov.
Start scraping fec.gov.
You already have the call. A key raises the rate limit and turns on browser rendering, proxies, and concurrency. Balance never expires, and top-ups go through secure checkout.