FastDemocracy Legislative Bill Tracker avatar

FastDemocracy Legislative Bill Tracker

Pricing

from $3.00 / 1,000 results

Go to Apify Store
FastDemocracy Legislative Bill Tracker

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

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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 with playwright-stealth, and Camoufox with humanize=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: legislators mode browses every current member of a jurisdiction's legislature (name, party, chamber, district, photo) — the easiest way to find a sponsorId for 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), chamberFull
  • billId (e.g. SB 28, HR 9449), fdId, title
  • sponsors[] (name, legislatorId, legislatorUrl), primarySponsor, sponsorCount
  • lastActionText, lastActionDate, lastActionChamber
  • latestBillTextUrl, latestBillTextLabel
  • billUrl, 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), currentStage
  • sponsors[] with role, party, district
  • actions[] (date, chamber, description), actionCount
  • votes[] (date, chamber, motion, yesCount, noCount, otherCount, yesVoters[], noVoters[], otherVoters[]), voteCount
  • billTexts[] (label, url, format), billTextCount
  • documents[] (label, url), documentCount
  • sources[] — official state-legislature / congress.gov links

Legislator directory records (recordType: "legislator", mode=legislators):

  • jurisdiction, jurisdictionName, session
  • legislatorId (e.g. CAL000276, USL000427), fullName, firstName, lastName
  • party, chamber (upper/lower), chamberFull, district
  • photoUrl, legislatorUrl, sourceUrl, recordType, scrapedAt

Input

FieldTypeDefaultDescription
modeselectsearchsearch / byState / bySession / billDetail / legislators
jurisdictionselectUSUS Congress, a specific state/city, or an aggregate (congress50, states — search mode only)
keywordstringclimateFree-text search; required for mode=search
sessionstringLegislative session (e.g. 2025-2026, or 119 for Congress); required for mode=bySession; optional for mode=legislators (blank = current)
sponsorIdstringRestrict to bills sponsored by this legislator ID (e.g. CAL000226)
firstSponsorOnlybooleanfalseOnly match when sponsorId is the primary sponsor
chamberselectAnyupper (Senate) / lower (House/Assembly) — applies to bills or, mode=legislators, members
partyQuerystringSubstring match on party (mode=legislators), e.g. Democratic
legislatorNameQuerystringSubstring match on legislator full name (mode=legislators)
billUrlsarrayFull bill detail URLs (mode=billDetail)
maxItemsinteger50Hard cap (1–1000)
proxyConfigurationproxy{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 / latestBillTextUrl always point to the official state legislature (or congress.gov) page for that version, and are always accessible (verified 200 from 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's leginfo.legislature.ca.gov serves 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 votes entry.
  • Session identifiers are state-specific and not independently validated against a master list — an unrecognized session value simply returns fewer/no results rather than an error.
  • partyQuery is a substring filter, not a dropdown. Some jurisdictions report fusion/cross-endorsed labels (e.g. New York's Republican/Democratic), so an exact-value enum would silently miss real legislators; a contains-match on e.g. Democratic catches both the plain and fusion labels.
  • photoUrl (mode=legislators): ~96% of sampled photo URLs resolve 200 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 return 200 image/jpeg on a normal GET (how browsers and downloaders fetch images) but return 403 on a bare HEAD request with no User-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.