US State Legislators Contacts & Districts Scraper
Pricing
from $17.00 / 1,000 results
US State Legislators Contacts & Districts Scraper
Scrape current US state legislators (senators and representatives) with name, party, chamber, district and full contact details: email, capitol and district phone and address, official website, social links and photo. Filter by state, chamber and party. Export to JSON, CSV or Excel.
Pricing
from $17.00 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
US State Legislators Contacts & Districts Scraper
Here is one real result, with every field the actor returns. The committees array is trimmed to 4 of its 11 real entries for readability; every value shown is real:
{"name": "Akilah Weber Pierson","givenName": "Akilah","familyName": "Weber Pierson","party": "Democratic","chamber": "upper","chamberTitle": "Senator","district": "39","currentRole": {"title": "Senator","chamber": "upper","district": "39","startDate": "Mon Dec 02 2024 00:00:00 GMT+0000 (Coordinated Universal Time)","jurisdiction": "ocd-jurisdiction/country:us/state:ca/government"},"roleHistory": [{"chamber": "upper", "title": "Senator", "district": "39", "startDate": "2024-12-02", "endDate": null, "jurisdiction": "ocd-jurisdiction/country:us/state:ca/government"},{"chamber": "lower", "title": "Representative", "district": "79", "startDate": "2021-04-19", "endDate": "2024-12-01", "jurisdiction": "ocd-jurisdiction/country:us/state:ca/government"}],"committees": [{"name": "Fisheries and Aquaculture", "classification": "committee", "chamber": "legislature", "role": "member"},{"name": "Budget and Fiscal Review", "classification": "committee", "chamber": "upper", "role": "member"},{"name": "Health", "classification": "committee", "chamber": "upper", "role": "chair"},{"name": "Social Determinants of Health Select", "classification": "committee", "chamber": "upper", "role": "chair"}],"committeeCount": 11,"state": "CA","gender": "Female","birthDate": "1978-07-02","email": "senator.weber@senate.ca.gov","capitolPhone": "916-651-4039","capitolFax": null,"capitolAddress": "1021 O St. Suite 7310, Sacramento, CA 95814","districtPhone": "619-688-6700","districtFax": null,"districtAddress": "7575 Metropolitan Drive Suite 100, San Diego, CA 92108","website": "https://a79.asmdc.org/","links": ["https://a79.asmdc.org/", "https://sd39.senate.ca.gov/"],"socialLinks": ["https://www.linkedin.com/in/akilah-weber-3164404"],"openstatesUrl": "https://openstates.org/person/akilah-weber-pierson-6c2a35d5-c04c-44d0-8bd9-92a625e2b525/","image": "https://sd39.senate.ca.gov/sites/sd39.senate.ca.gov/files/website/sd39_bio_portrait.jpg","otherNames": ["A. Weber", "A. Weber Pierson", "A.F. Weber", "A.F. Weber Pierson", "Akilah Faizah Weber", "Akilah Weber", "Akilah Weber, M.D.", "Weber Pierson", "Weber Pierson, A.", "Weber, A."],"sources": ["https://a79.asmdc.org", "https://a79.asmdc.org/", "https://ballotpedia.org/Akilah_Weber", "https://en.wikipedia.org/wiki/Akilah_Weber", "https://justfacts.votesmart.org/candidate/biography/195832/akilah-weber", "https://sd39.senate.ca.gov", "https://sd39.senate.ca.gov/biography", "https://www.assembly.ca.gov/assemblymembers", "https://www.linkedin.com/in/akilah-weber-3164404"],"id": "ocd-person/6c2a35d5-c04c-44d0-8bd9-92a625e2b525","source": "OpenStates People","observedAt": "2026-08-10T14:29:10.531Z"}
The most complete US state legislator scraper available. It returns every contact and district detail the OpenStates People dataset holds for each current legislator, including capitol and district phone, fax and street address, email, official website, social links, full role history, party and chamber, plus the committees each member sits on and the role they hold there (chair, vice chair, member).
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor pulls the current legislators for one US state or territory from the open OpenStates People dataset, applies the chamber and party filters you pass, optionally attaches each member's committee memberships and role, and writes one normalized record per legislator to the run's dataset. Each record carries full contact details (email, capitol and district phone, fax and address), the district and chamber, party, role history, official website and social links, and cross-reference sources. Missing source values are returned as null.
Coverage is all 50 states plus territories (DC, PR and others). Run one state per run.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 California legislators with committee memberships.
{"maxLegislators": 10,"state": "ca","chamber": "all","includeCommittees": true}
Set chamber to upper for the Senate only or lower for the House / Assembly. Add party to keep one party. Every input field except state is optional.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxLegislators | integer | no | 10 | Maximum legislators to collect. |
state | string | no | ca | Two-letter US state or territory code, for example ca, tx, ny, fl, pr. One state per run. |
chamber | enum | no | all | Keep only one chamber: upper (Senate) or lower (House / Assembly). all returns both. |
party | string | no | (empty) | Keep only legislators whose party contains this text, for example Democratic, Republican, Independent. |
includeCommittees | boolean | no | true | Attach the committees each legislator sits on and the role they hold there (chair, vice chair, member). |
Output reference
One dataset item per legislator. Types: string, integer, boolean, string[], object, object array, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
name | string | Full display name. |
givenName | string | First name. |
familyName | string | Last name. |
party | string | Political party. |
chamber | string | Chamber: upper, lower, or legislature. |
chamberTitle | string | Title for the chamber, for example Senator, Representative. |
district | string | District number or name. |
currentRole | object | Current role: title, chamber, district, startDate, jurisdiction. |
roleHistory | object[] | Past and present roles with chamber, title, district, startDate, endDate, jurisdiction. |
committees | object[] | Committees the member sits on: name, classification, chamber, role. Empty when includeCommittees is off or none are recorded. |
committeeCount | integer | Number of committee memberships. |
state | string | Two-letter state code (uppercase). |
gender | string | Reported gender, or null. |
birthDate | string | Birth date (YYYY-MM-DD), or null. |
email | string | Official email, or null. |
capitolPhone | string | Capitol office phone, or null. |
capitolFax | string | Capitol office fax, or null. |
capitolAddress | string | Capitol office street address, or null. |
districtPhone | string | District office phone, or null. |
districtFax | string | District office fax, or null. |
districtAddress | string | District office street address, or null. |
website | string | Primary official website, or null. |
links | string[] | All official website links. |
socialLinks | string[] | Social media / professional profile links. |
openstatesUrl | string | OpenStates person profile URL. |
image | string | Official portrait image URL, or null. |
otherNames | string[] | Alternate names and spellings. |
sources | string[] | Source URLs OpenStates used for this person. |
id | string | OpenStates OCD person ID (unique). |
source | string | Always OpenStates People. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
Note: currentRole.startDate is passed through as recorded by the source (it may be an ISO date or a full timestamp string). The roleHistory entries use normalized YYYY-MM-DD dates.
Example output record
See the hero record at the top of this page. It is a real California state senator (OCD id ocd-person/6c2a35d5-...) pulled from a live run (input {"state":"ca","chamber":"all","includeCommittees":true,"maxLegislators":10}), with the committee list trimmed for readability; every value shown is real.
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~openstates-legislators-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"state":"tx","chamber":"upper","party":"Republican","maxLegislators":50}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~openstates-legislators-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"state":"ny","includeCommittees":true,"maxLegislators":250}'
Apify CLI:
apify call scrapers_lat/openstates-legislators-scraper \--input '{"state":"ca","chamber":"all"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per legislator returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 legislators per run. Upgrade for higher
maxLegislators.
FAQ and troubleshooting
A run returned 0 records. Why?
The state code was invalid, or the chamber / party filter matched nobody. Check the two-letter state code and loosen the filters. Zero-result runs are not charged.
How do I get a full state roster?
Set maxLegislators high enough to cover the chamber (for example 250 for a large lower house) and leave chamber as all.
Do records include contact details?
Yes. Each legislator carries capitol and district phone, fax and street address, plus email and official website where the source has them. Missing values are null.
Can I get committee assignments?
Yes, with includeCommittees on (the default). Each committee entry names the committee, its chamber, and the member's role (chair, vice chair, member).
Is this an official OpenStates tool? No. This actor is independent and has no affiliation with OpenStates or Plural. It reads only data that is publicly available in the open OpenStates People dataset.
Related scrapers
- FEC Campaign Finance Scraper: US federal campaign contributions.
- Federal Register Document Scraper: US Federal Register documents.
- USAspending Federal Award Scraper: US federal prime awards.
- Grants.gov Opportunity Scraper: US federal grant opportunities.
- Google Maps Business Leads Scraper: business contact leads from Google Maps.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with OpenStates or Plural. Accesses only publicly available OpenStates People data.
