US State Legislators Contacts & Districts Scraper avatar

US State Legislators Contacts & Districts Scraper

Pricing

from $17.00 / 1,000 results

Go to Apify Store
US State Legislators Contacts & Districts Scraper

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Share

US State Legislators Contacts & Districts Scraper

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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
maxLegislatorsintegerno10Maximum legislators to collect.
statestringnocaTwo-letter US state or territory code, for example ca, tx, ny, fl, pr. One state per run.
chamberenumnoallKeep only one chamber: upper (Senate) or lower (House / Assembly). all returns both.
partystringno(empty)Keep only legislators whose party contains this text, for example Democratic, Republican, Independent.
includeCommitteesbooleannotrueAttach 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.

FieldTypeDescription
namestringFull display name.
givenNamestringFirst name.
familyNamestringLast name.
partystringPolitical party.
chamberstringChamber: upper, lower, or legislature.
chamberTitlestringTitle for the chamber, for example Senator, Representative.
districtstringDistrict number or name.
currentRoleobjectCurrent role: title, chamber, district, startDate, jurisdiction.
roleHistoryobject[]Past and present roles with chamber, title, district, startDate, endDate, jurisdiction.
committeesobject[]Committees the member sits on: name, classification, chamber, role. Empty when includeCommittees is off or none are recorded.
committeeCountintegerNumber of committee memberships.
statestringTwo-letter state code (uppercase).
genderstringReported gender, or null.
birthDatestringBirth date (YYYY-MM-DD), or null.
emailstringOfficial email, or null.
capitolPhonestringCapitol office phone, or null.
capitolFaxstringCapitol office fax, or null.
capitolAddressstringCapitol office street address, or null.
districtPhonestringDistrict office phone, or null.
districtFaxstringDistrict office fax, or null.
districtAddressstringDistrict office street address, or null.
websitestringPrimary official website, or null.
linksstring[]All official website links.
socialLinksstring[]Social media / professional profile links.
openstatesUrlstringOpenStates person profile URL.
imagestringOfficial portrait image URL, or null.
otherNamesstring[]Alternate names and spellings.
sourcesstring[]Source URLs OpenStates used for this person.
idstringOpenStates OCD person ID (unique).
sourcestringAlways OpenStates People.
observedAtstringISO 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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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 (result event). 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 error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on 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.

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.