OpenStates Legislation Crawler - 50-State Bill Tracker avatar

OpenStates Legislation Crawler - 50-State Bill Tracker

Under maintenance

Pricing

Pay per event

Go to Apify Store
OpenStates Legislation Crawler - 50-State Bill Tracker

OpenStates Legislation Crawler - 50-State Bill Tracker

Under maintenance

Track state legislation across all 50 US states via the Open States API. Filter by state, session, subject, keyword, or date. Outputs bill metadata, sponsor details, vote records, and legislative actions -- ideal for AI policy monitoring, compliance tracking, and government intelligence.

Pricing

Pay per event

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

7 days ago

Last modified

Share

OpenStates Legislation Crawler — 50-State Bill Tracker

Track legislation across all 50 US states and territories using the OpenStates API. Returns bill metadata, sponsors, vote summaries, actions, and document versions for any jurisdiction, session, or subject combination. Supports delta mode (updatedSince) for incremental daily polling of changed bills.

What does the OpenStates Legislation Crawler do?

  • Queries the OpenStates GraphQL API for state and territorial legislation across all US jurisdictions
  • Returns bill ID, title, chamber, session, classification, subjects, sponsors, actions, votes, and source document links
  • Supports filtering by jurisdiction, session, subject, keyword query, classification, and last-updated date
  • Delta mode: set updatedSince to retrieve only bills changed since a given date — ideal for daily scheduled runs
  • Rate-limited to respect the free API tier (~30 req/min with 2.2s request delay)

Authentication required. A free OpenStates API key is required. Registration takes under 2 minutes at https://openstates.org/accounts/signup/ — no payment needed for the free tier.

What data does it extract?

FieldDescription
bill_idFull bill identifier (e.g. ocd-bill/...)
jurisdictionJurisdiction name (e.g. California)
jurisdiction_idOpenStates jurisdiction ID
state_abbrTwo-letter state abbreviation
sessionLegislative session identifier
chamberupper (Senate) or lower (House/Assembly)
bill_numberBill number (e.g. SB 123, HB 456)
titleBill title as introduced
classificationBill type: bill, resolution, joint resolution, concurrent resolution, memorial, constitutional amendment
subjectsComma-separated subject tags
first_action_dateDate of first legislative action (ISO 8601)
latest_action_dateDate of most recent action (ISO 8601)
latest_action_descriptionDescription of the most recent action
latest_passage_dateDate of passage if applicable
sponsorsArray of name:classification strings (e.g. Smith, Jane:primary)
primary_sponsorName of the primary sponsor
actionsArray of date|chamber|description strings (e.g. 2025-03-15|upper|Referred to Committee on Finance)
votes_summaryArray of date|chamber|result|yes:N|no:N|absent:N strings
versionsArray of note|date|url strings linking to bill text
source_urlsSource URLs on the state legislature's website
openstates_urlOpenStates page for this bill
created_atRecord creation timestamp in OpenStates
updated_atRecord last-updated timestamp in OpenStates

How to use it

Set your apiKey first. Then filter by jurisdiction (California, Texas, ny, etc.), subject keyword, or classification. For recurring monitoring, use updatedSince with a daily schedule.

FieldTypeDefaultDescription
apiKeystringOpenStates API key (required). Free at openstates.org/accounts/signup/
jurisdictionstringState or territory name or abbreviation (e.g. California, ny, Texas)
sessionstringLegislative session identifier
subjectstringSubject tag filter
querystringFull-text keyword search across bill titles and text
classificationstringbill, resolution, concurrent resolution, joint resolution, memorial, constitutional amendment
updatedSincestringISO 8601 date — returns only bills updated after this date (delta mode)
sortOrderstringSort order for results
includeVotesbooleantrueInclude votes_summary array in output
includeActionsbooleantrueInclude actions array in output
includeVersionsbooleantrueInclude versions document links in output
maxItemsinteger100Maximum bills to return

Running on a Schedule (Delta Mode)

To monitor bill activity without re-fetching the full corpus daily:

  1. Set updatedSince to yesterday's date (e.g. 2025-03-14)
  2. Set your jurisdiction and any subject filters
  3. Schedule the actor to run daily on Apify
  4. Each run returns only bills modified since the prior run date

This pattern keeps daily runs small (typically a few hundred records) while maintaining a complete picture of active legislation when combined with your historical baseline dataset.

Use cases

  • Legislative monitoring and alerting — Track bills matching specific keywords (query) or subjects across one or more states; trigger alerts when latest_action_description changes or latest_passage_date is populated.
  • Policy analysis and research — Analyze legislative activity patterns by classification, session, and sponsor across jurisdictions to identify policy trends and multi-state legislative coordination.
  • Regulatory compliance tracking — Monitor bills in specific subject areas (healthcare, financial services, privacy) across all states simultaneously using subject filters and delta polling.
  • Journalism and transparency — Pull sponsor data and vote summaries for investigative stories; link source_urls to the original state legislature records for verification.
  • Civic technology and advocacy — Power constituent-facing bill tracking tools with structured, normalized data that spans all 50 states without scraping 50 different legislative websites.

FAQ

How do I parse the pipe-delimited action and vote fields? Actions are returned as strings in the format date|chamber|description, e.g. 2025-03-15|upper|Referred to Committee on Finance. Split on | to get three components. Vote summaries follow date|chamber|result|yes:N|no:N|absent:N — parse the count suffix by splitting on :.

What jurisdictions are available? OpenStates covers all 50 US states plus DC, Puerto Rico, Guam, the US Virgin Islands, and several other territories. Pass the full jurisdiction name (e.g. California) or a two-letter abbreviation (e.g. ca) in the jurisdiction field.

How many bills can the free API tier return? The free OpenStates API tier allows up to approximately 30 requests per minute. The actor enforces a 2.2-second delay between requests. For large full-corpus pulls (e.g. all California bills), expect multi-hour run times. Delta mode significantly reduces this for ongoing monitoring workflows.

Results are available for export in JSON, CSV, and Excel formats from the Apify dataset tab.