FastDemocracy Legislative Bill Tracker
Pricing
from $3.00 / 1,000 results
FastDemocracy Legislative Bill Tracker
Track legislation across the US Congress and all 50 states. Search bills by keyword, browse by state or legislative session, and pull full bill detail - sponsors, votes, actions, and bill text links. Sourced from the free public FastDemocracy bill-tracking site.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Track legislation across the US Congress and all 50 states (plus DC, Puerto Rico, and several major cities). Search bills by keyword, browse a jurisdiction's current bills, browse a specific legislative session, or pull full bill detail — sponsors, chamber, status timeline, roll-call votes, action history, and bill text/document links. Sourced from the free public FastDemocracy bill-tracking site — no login, no API key.
Data source (and why not LegiScan)
This actor was originally scoped to scrape legiscan.com. During implementation, legiscan.com (and, for the same reason, congress.gov) were confirmed to sit behind an unsolvable Cloudflare Turnstile "Just a moment..." challenge on every page, including the homepage — verified from:
- A residential ISP IP using plain
curl,curl_cffi(chrome131 impersonation), Playwright headless withplaywright-stealth, and Camoufox withhumanize=True— all blocked. - Anthropic's own hosted fetch infrastructure — blocked.
- Apify's cloud, via a real
apify call— blocked both with a direct connection and through the free AUTO proxy group (Playwright + stealth, confirmed via two live cloud runs).
Per the project's Zero-Cost Cloud Reliability policy, a target that fails on Apify's free datacenter IPs even through AUTO proxy — with no residential-proxy option available — must be replaced rather than fought. FastDemocracy covers the same category (public legislative/regulatory data), the same jurisdictional scope (Congress + 50 states) as LegiScan, is fully server-rendered (no JS challenge), and its robots.txt is permissive (Disallow: /members/ and /readme.html only) — unlike legiscan.com/congress.gov, which explicitly blocklist AI crawlers site-wide.
What this actor does
- Five modes:
search,byState,bySession,billDetail,legislators - 60 jurisdictions: US Congress, all 50 states, DC, Puerto Rico, and 5 major cities (Chicago, Saint Louis, Baltimore, Denver, NYC) — plus two aggregate scopes (
congress50,states) for cross-jurisdiction keyword search - Rich bill detail: status timeline (Introduced → Passed chamber → Became Law), full sponsor list with party/district, complete action history, roll-call votes with yes/no/other counts and named voters, every bill text version, committee analyses/documents, and official state-legislature source links
- Legislator directory:
legislatorsmode browses every current member of a jurisdiction's legislature (name, party, chamber, district, photo) — the easiest way to find asponsorIdfor the other modes, filterable by chamber, party, and name - Empty fields are omitted
Output per record
Search / browse records (recordType: "legislativeBillSummary"):
jurisdiction,jurisdictionName,session,chamber(upper/lower),chamberFullbillId(e.g.SB 28,HR 9449),fdId,titlesponsors[](name,legislatorId,legislatorUrl),primarySponsor,sponsorCountlastActionText,lastActionDate,lastActionChamberlatestBillTextUrl,latestBillTextLabelbillUrl,sourceUrl,recordType,scrapedAt
Bill detail records (recordType: "legislativeBill", mode=billDetail):
- All of the above, plus:
billType(e.g. "California Senate Bill"),statusTimeline[](stage,date,reached),currentStagesponsors[]withrole,party,districtactions[](date,chamber,description),actionCountvotes[](date,chamber,motion,yesCount,noCount,otherCount,yesVoters[],noVoters[],otherVoters[]),voteCountbillTexts[](label,url,format),billTextCountdocuments[](label,url),documentCountsources[]— official state-legislature / congress.gov links
Legislator directory records (recordType: "legislator", mode=legislators):
jurisdiction,jurisdictionName,sessionlegislatorId(e.g.CAL000276,USL000427),fullName,firstName,lastNameparty,chamber(upper/lower),chamberFull,districtphotoUrl,legislatorUrl,sourceUrl,recordType,scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | select | search | search / byState / bySession / billDetail / legislators |
jurisdiction | select | US | US Congress, a specific state/city, or an aggregate (congress50, states — search mode only) |
keyword | string | climate | Free-text search; required for mode=search |
session | string | – | Legislative session (e.g. 2025-2026, or 119 for Congress); required for mode=bySession; optional for mode=legislators (blank = current) |
sponsorId | string | – | Restrict to bills sponsored by this legislator ID (e.g. CAL000226) |
firstSponsorOnly | boolean | false | Only match when sponsorId is the primary sponsor |
chamber | select | Any | upper (Senate) / lower (House/Assembly) — applies to bills or, mode=legislators, members |
partyQuery | string | – | Substring match on party (mode=legislators), e.g. Democratic |
legislatorNameQuery | string | – | Substring match on legislator full name (mode=legislators) |
billUrls | array | – | Full bill detail URLs (mode=billDetail) |
maxItems | integer | 50 | Hard cap (1–1000) |
proxyConfiguration | proxy | {useApifyProxy: true} | Optional fallback if FastDemocracy ever blocks the direct connection |
Example: search Congress + all states for a topic
{"mode": "search","jurisdiction": "congress50","keyword": "artificial intelligence","maxItems": 100}
Example: browse California's current bills
{"mode": "byState","jurisdiction": "CA","maxItems": 50}
Example: browse a specific session
{"mode": "bySession","jurisdiction": "CA","session": "2025-2026","keyword": "housing"}
Example: full bill detail
{"mode": "billDetail","billUrls": ["https://fastdemocracy.com/bill-search/ca/2025-2026/bills/CAB00033323/"]}
Example: browse a state's legislator directory
{"mode": "legislators","jurisdiction": "CA","chamber": "upper","partyQuery": "Democratic"}
Use cases
- Advocacy & lobbying — track bills by topic or sponsor across every state at once
- Legal/compliance research — monitor regulatory bills relevant to an industry
- Journalism — pull full vote records and sponsor lists for a story
- Civic tech — build state-by-state legislative dashboards
- Academic research — bulk export of legislative activity and roll-call votes
Limitations
- Bill text link formats vary by state.
billTexts[].url/latestBillTextUrlalways point to the official state legislature (or congress.gov) page for that version, and are always accessible (verified200from a clean shell for Texas, New York, California, and US Congress). However, the underlying content-type depends entirely on how each state publishes it — Congress and New York serve the raw file directly (application/pdf), while California'sleginfo.legislature.ca.govserves an HTML viewer page for the same document (its official site does not expose a direct-download PDF endpoint). This is an upstream state-website architecture difference, not a broken or hotlink-blocked URL. - Roll-call votes are only available for chambers/actions that FastDemocracy has recorded a named vote for; voice votes and unrecorded actions won't have a
votesentry. - Session identifiers are state-specific and not independently validated against a master list — an unrecognized
sessionvalue simply returns fewer/no results rather than an error. partyQueryis a substring filter, not a dropdown. Some jurisdictions report fusion/cross-endorsed labels (e.g. New York'sRepublican/Democratic), so an exact-value enum would silently miss real legislators; a contains-match on e.g.Democraticcatches both the plain and fusion labels.photoUrl(mode=legislators): ~96% of sampled photo URLs resolve200 image/*from a clean shell. A small fraction are broken at the source — some state legislature media servers (e.g.webapi.assembly.ca.gov) 404 on individual member photos, independent of anything this actor does. US Congress photos (bioguide.congress.gov) reliably return200 image/jpegon a normalGET(how browsers and downloaders fetch images) but return403on a bareHEADrequest with noUser-Agent— a quirk of that server, not a hotlink block.
FAQ
Does this cover state legislatures or just Congress? Both — pick a specific state/city in jurisdiction, or US for Congress, or the congress50/states aggregates for cross-jurisdiction keyword search.
What's a "session"? Most states use a two-year session like 2025-2026; the US Congress uses a Congress number like 119. Leave blank to use each jurisdiction's current/default session.
How do I get a legislator's ID for sponsorId? Any prior result's sponsors[].legislatorId field, or the last path segment of a legislatorUrl (e.g. CAL000226).
Are the vote records complete? Yes for chambers that publish roll-call votes on FastDemocracy — each vote includes the motion text, yes/no/other counts, and the named voters where available (voice votes without a recorded roll call won't have a votes entry).
Are bill text/document links stable? Yes — they point directly to the official state legislature or congress.gov servers (PDF/HTML), verified accessible without cookies or a Referer header.
How do I find a sponsorId without already having a bill result? Use mode: "legislators" with the target jurisdiction — it returns every current member's legislatorId, name, party, chamber, and district, so you can look one up by name (legislatorNameQuery) before running a sponsor-filtered bill search.