https://benthic.io/ngopen/usp_cl/ – U.S. legislators, executives, committees & district offices
The core theme of this database, created using the wonderful congress-legislators dataset made available by the @unitedstates project, is political structure.
At a glance
| Collection | NGOpen |
| Endpoint | /ngopen/usp_cl/ |
| OpenAPI | usp_cl.json |
| Manifest | ngopen/usp_cl |
| Provenance | migrated 2026-08-11, commit 66f585560f |
| Relations | 12 |
| Columns | 172 |
| Updated | Weekly |
| Licence | CC0 |
| Source | github.com (upstream) |
| Pipeline | ngopen-pipelines/pipelines/usp_cl/README.md |
Tables
legislators
Current and historical members of the U.S. Congress. One row per person. Links to terms, social media, district offices, and committee membership via bioguide_id.
| Column | Type | Description |
|---|---|---|
bioguide_id |
varchar(10) | Primary key. Biographical Directory ID |
thomas_id |
varchar(10) | THOMAS/LIS ID (legacy) |
lis_id |
varchar(10) | LIS ID (Senate) |
govtrack_id |
integer | GovTrack ID |
opensecrets_id |
varchar(20) | OpenSecrets ID |
votesmart_id |
integer | Vote Smart ID |
cspan_id |
integer | C-SPAN ID |
wikipedia_page |
varchar(255) | Wikipedia page title |
ballotpedia_page |
varchar(255) | Ballotpedia page |
maplight_id |
integer | MapLight ID |
house_history_id |
bigint | House History ID |
icpsr_id |
integer | ICPSR ID |
wikidata_id |
varchar(20) | Wikidata ID |
google_entity_id |
varchar(100) | Google Knowledge Graph ID |
pictorial_id |
integer | Congress pictorial ID |
fec_ids |
text[] | FEC candidate IDs (array) |
bioguide_previous |
text[] | Previous bioguide IDs (array) |
first_name |
varchar(100) | First name |
middle_name |
varchar(100) | Middle name |
last_name |
varchar(100) | Last name |
suffix |
varchar(20) | Name suffix (Jr., Sr., etc.) |
nickname |
varchar(100) | Nickname |
official_full |
varchar(255) | Official full name |
birthday |
date | Date of birth |
gender |
char(1) | Gender (M/F) |
is_current |
boolean | TRUE if currently serving |
first_term_start |
date | Date of first term start |
last_term_end |
date | Date of most recent term end |
created_at |
timestamp | Record creation time |
Example queries
# Get all current members
curl "https://benthic.io/ngopen/usp_cl/legislators?is_current=is.true&select=bioguide_id,official_full,last_name,first_name&order=last_name&limit=200"
# Look up a specific legislator
curl "https://benthic.io/ngopen/usp_cl/legislators?bioguide_id=eq.P000197&select=official_full,birthday,gender,govtrack_id"
# Search by name
curl "https://benthic.io/ngopen/usp_cl/legislators?official_full=ilike.*schumer*&select=bioguide_id,official_full,is_current"
# Count current members by gender
curl "https://benthic.io/ngopen/usp_cl/legislators?select=gender,count&is_current=is.true&groupby=gender"
legislator_terms
Service terms for members of Congress. One row per term. Links to legislators via bioguide_id.
| Column | Type | Description |
|---|---|---|
term_id |
integer | Primary key |
bioguide_id |
varchar(10) | FK to legislators |
congress_start |
varchar(3) | Starting Congress number |
congress_end |
varchar(3) | Ending Congress number |
term_start |
date | Term start date |
term_end |
date | Term end date |
term_type |
varchar(10) | rep, sen, or prez |
state |
char(2) | State abbreviation |
district |
integer | Congressional district number |
class |
integer | Senate class (1, 2, or 3) |
state_rank |
varchar(10) | Senate rank (junior/senior) |
party |
varchar(50) | Political party |
url |
varchar(500) | Official website URL |
address |
text | Office address |
phone |
varchar(50) | Office phone |
fax |
varchar(50) | Office fax |
contact_form |
varchar(500) | Contact form URL |
office |
varchar(255) | Office location |
rss_url |
varchar(500) | RSS feed URL |
how |
varchar(50) | How the term ended (appointment, election, etc.) |
end_type |
varchar(50) | End type |
created_at |
timestamp | Record creation time |
Example queries
# Get all terms for a legislator
curl "https://benthic.io/ngopen/usp_cl/legislator_terms?bioguide_id=eq.P000197&order=term_start"
# Get all current Senate terms
curl "https://benthic.io/ngopen/usp_cl/legislator_terms?term_type=eq.sen&term_end=gte.2026-01-01&select=bioguide_id,state,state_rank,party&order=state"
# Get representatives for a state
curl "https://benthic.io/ngopen/usp_cl/legislator_terms?state=eq.CA&term_type=eq.rep&term_end=gte.2026-01-01&select=bioguide_id,district,party&order=district"
# Get all terms in a specific Congress (118th = 2023-2025)
curl "https://benthic.io/ngopen/usp_cl/legislator_terms?congress_start=eq.118&select=bioguide_id,term_type,state,district,party&limit=600"
# Count members by party for current terms
curl "https://benthic.io/ngopen/usp_cl/legislator_terms?select=party,count&term_end=gte.2026-01-01&groupby=party"
legislator_social_media
Social media accounts for legislators. One row per legislator. Links to legislators via bioguide_id.
| Column | Type | Description |
|---|---|---|
social_id |
integer | Primary key |
bioguide_id |
varchar(10) | FK to legislators |
twitter |
varchar(100) | Twitter/X handle |
twitter_id |
varchar(50) | Twitter/X numeric ID |
facebook |
varchar(100) | Facebook page |
facebook_id |
bigint | Facebook numeric ID |
youtube |
varchar(100) | YouTube channel |
youtube_id |
varchar(100) | YouTube channel ID |
instagram |
varchar(100) | Instagram handle |
instagram_id |
bigint | Instagram numeric ID |
created_at |
timestamp | Record creation time |
Example queries
# Get social media for a legislator
curl "https://benthic.io/ngopen/usp_cl/legislator_social_media?bioguide_id=eq.P000197&select=twitter,facebook,youtube,instagram"
# Find legislators with Instagram
curl "https://benthic.io/ngopen/usp_cl/legislator_social_media?instagram=not.is.null&select=bioguide_id,twitter,instagram&limit=100"
legislator_other_names
Alternate and former names for legislators. One row per name variant. Links to legislators via bioguide_id.
| Column | Type | Description |
|---|---|---|
name_id |
integer | Primary key |
bioguide_id |
varchar(10) | FK to legislators |
first_name |
varchar(100) | Alternate first name |
middle_name |
varchar(100) | Alternate middle name |
last_name |
varchar(100) | Alternate last name |
suffix |
varchar(20) | Name suffix |
start_date |
date | Name usage start date |
end_date |
date | Name usage end date |
created_at |
timestamp | Record creation time |
district_offices
Geocoded district office locations for members of Congress. One row per office. Links to legislators via bioguide_id.
| Column | Type | Description |
|---|---|---|
office_id |
integer | Primary key |
bioguide_id |
varchar(10) | FK to legislators |
office_key |
varchar(100) | Unique office key |
address |
text | Street address |
suite |
varchar(255) | Suite number |
building |
varchar(255) | Building name |
city |
varchar(100) | City |
state |
char(2) | State |
zip |
varchar(20) | ZIP code |
latitude |
double precision | Geocoded latitude |
longitude |
double precision | Geocoded longitude |
geom_point |
geometry(Point, 4326) | PostGIS point geometry (auto-populated from lat/lon) |
phone |
varchar(50) | Office phone |
fax |
varchar(50) | Office fax |
hours |
text | Office hours |
created_at |
timestamp | Record creation time |
Example queries
# Get district offices for a legislator
curl "https://benthic.io/ngopen/usp_cl/district_offices?bioguide_id=eq.P000197&select=address,city,state,zip,phone,latitude,longitude"
# Get all geocoded offices in a state
curl "https://benthic.io/ngopen/usp_cl/district_offices?state=eq.TX&latitude=not.is.null&select=bioguide_id,city,latitude,longitude&limit=50"
# Find offices near a coordinate
curl "https://benthic.io/ngopen/usp_cl/district_offices?latitude=gte.38.0&latitude=lte.39.0&longitude=gte.-77.0&longitude=lte.-76.0&latitude=not.is.null"
executives
Presidents and executive branch officials. One row per person. Links to executive_terms via bioguide_id.
| Column | Type | Description |
|---|---|---|
bioguide_id |
varchar(10) | Primary key |
govtrack_id |
integer | GovTrack ID |
icpsr_prez_id |
integer | ICPSR president ID |
first_name |
varchar(100) | First name |
middle_name |
varchar(100) | Middle name |
last_name |
varchar(100) | Last name |
suffix |
varchar(20) | Name suffix |
birthday |
date | Date of birth |
gender |
char(1) | Gender |
created_at |
timestamp | Record creation time |
Example queries
# List all presidents
curl "https://benthic.io/ngopen/usp_cl/executives?select=bioguide_id,last_name,first_name,birthday&order=last_name"
executive_terms
Terms of office for presidents. Links to executives via bioguide_id.
| Column | Type | Description |
|---|---|---|
term_id |
integer | Primary key |
bioguide_id |
varchar(10) | FK to executives |
term_type |
varchar(20) | Term type (e.g. prez) |
start_date |
date | Term start date |
end_date |
date | Term end date |
party |
varchar(50) | Political party |
how |
varchar(50) | How obtained (election, succession) |
created_at |
timestamp | Record creation time |
Example queries
# Get presidential terms
curl "https://benthic.io/ngopen/usp_cl/executive_terms?select=bioguide_id,term_type,start_date,end_date,party&order=start_date.desc"
committees
Congressional committees (standing, select, joint). One row per committee.
| Column | Type | Description |
|---|---|---|
committee_id |
integer | Primary key |
thomas_id |
varchar(20) | THOMAS committee ID |
house_committee_id |
varchar(10) | House committee ID |
senate_committee_id |
varchar(10) | Senate committee ID |
committee_type |
varchar(20) | Committee type (house, senate, joint) |
name |
varchar(255) | Committee name |
url |
varchar(500) | Committee website |
minority_url |
varchar(500) | Minority party website |
address |
text | Committee address |
phone |
varchar(50) | Committee phone |
jurisdiction |
text | Committee jurisdiction description |
rss_url |
varchar(500) | RSS feed URL |
youtube_id |
varchar(50) | YouTube channel ID |
congresses |
integer[] | Congress numbers when active (array) |
is_current |
boolean | TRUE if currently active |
created_at |
timestamp | Record creation time |
Example queries
# Get all current committees
curl "https://benthic.io/ngopen/usp_cl/committees?is_current=is.true&select=committee_id,name,committee_type&order=committee_type,name"
# Get Senate committees
curl "https://benthic.io/ngopen/usp_cl/committees?committee_type=eq.senate&is_current=is.true&select=name,url,phone"
# Search committees by name
curl "https://benthic.io/ngopen/usp_cl/committees?name=ilike.*appropriations*&select=committee_id,name,committee_type"
subcommittees
Subcommittees under congressional committees. Links to committees via committee_id.
| Column | Type | Description |
|---|---|---|
subcommittee_id |
integer | Primary key |
committee_id |
integer | FK to committees |
thomas_id |
varchar(10) | THOMAS subcommittee ID |
name |
varchar(255) | Subcommittee name |
address |
text | Subcommittee address |
phone |
varchar(50) | Subcommittee phone |
congresses |
integer[] | Congress numbers when active (array) |
created_at |
timestamp | Record creation time |
Example queries
# Get subcommittees for a committee
curl "https://benthic.io/ngopen/usp_cl/subcommittees?committee_id=eq.26&select=subcommittee_id,name"
committee_membership
Legislator assignments to committees and subcommittees. One row per assignment.
| Column | Type | Description |
|---|---|---|
membership_id |
integer | Primary key |
committee_thomas_id |
varchar(20) | THOMAS committee/subcommittee ID |
bioguide_id |
varchar(10) | Legislator bioguide ID |
legislator_name |
varchar(255) | Legislator name |
party |
varchar(20) | Political party |
rank |
integer | Seniority rank |
title |
varchar(100) | Title (Chair, Ranking Member, etc.) |
created_at |
timestamp | Record creation time |
Example queries
# Get committee members for a committee
curl "https://benthic.io/ngopen/usp_cl/committee_membership?committee_thomas_id=eq.SFIN&select=legislator_name,party,rank,title&order=rank"
# Get all committee assignments for a legislator
curl "https://benthic.io/ngopen/usp_cl/committee_membership?bioguide_id=eq.P000197&select=committee_thomas_id,party,rank,title"
# Get chairs of committees
curl "https://benthic.io/ngopen/usp_cl/committee_membership?title=ilike.*chair*&select=legislator_name,committee_thomas_id,title&limit=50"
Joining tables (embedding)
PostgREST supports resource embedding via foreign key relationships:
# Get a legislator with all their terms
curl "https://benthic.io/ngopen/usp_cl/legislators?select=official_full,legislator_terms(term_type,state,district,party)&bioguide_id=eq.P000197"
# Get a legislator with social media
curl "https://benthic.io/ngopen/usp_cl/legislators?select=official_full,legislator_social_media(twitter,facebook,instagram)&bioguide_id=eq.P000197"
# Get a legislator with district offices
curl "https://benthic.io/ngopen/usp_cl/legislators?select=official_full,district_offices(city,state,phone,latitude,longitude)&bioguide_id=eq.P000197"
# Get a committee with its subcommittees
curl "https://benthic.io/ngopen/usp_cl/committees?select=name,subcommittees(name)&committee_id=eq.26"
# Get current senators with their terms embedded
curl "https://benthic.io/ngopen/usp_cl/legislators?select=official_full,legislator_terms!inner(state,state_rank,party)&legislator_terms.term_type=eq.sen&legislator_terms.term_end=gte.2026-01-01&is_current=is.true&order=official_full"
PostgREST query reference
Filtering
| Operator | Syntax | Example |
|---|---|---|
| Equals | ?col=value |
?state=eq.CA |
| Not equal | ?col=neq.value |
?party=neq.Democrat |
| Greater than | ?col=gt.value |
?term_end=gt.2025-01-01 |
| Less than | ?col=lt.value |
?birthday=lt.1960-01-01 |
| Greater/eq | ?col=gte.value |
?term_end=gte.2026-01-01 |
| Less/eq | ?col=lte.value |
?term_end=lte.2025-12-31 |
| ILIKE | ?col=ilike.PATTERN |
?official_full=ilike.%25john%25 |
| IS null | ?col=is.null |
?end_type=is.null |
| IS NOT null | ?col=not.is.null |
?twitter=not.is.null |
| IN | ?col=in.(val1,val2) |
?state=in.(CA,NY,TX) |
Selecting columns
?select=bioguide_id,official_full,state,party
Ordering
?order=last_name.asc
?order=term_start.desc
Pagination
?limit=100&offset=200
Counting
Prefer: count=exact
Grouping / aggregation
?select=party,count&groupby=party
Key relationships
All tables link via bioguide_id or committee_id/thomas_id:
legislators.bioguide_id= primary person identifierlegislator_terms.bioguide_id->legislators.bioguide_idlegislator_social_media.bioguide_id->legislators.bioguide_idlegislator_other_names.bioguide_id->legislators.bioguide_iddistrict_offices.bioguide_id->legislators.bioguide_idexecutive_terms.bioguide_id->executives.bioguide_idsubcommittees.committee_id->committees.committee_idcommittee_membership.bioguide_id->legislators.bioguide_id(logical, no FK constraint)committee_membership.committee_thomas_id->committees.thomas_id(logical, no FK constraint)
Cross-dataset: legislator_terms.state + district matches up_cdmaps.congressional_districts for spatial district boundaries. Note that congressional_districts geometry is stored in EPSG:3857 (Web Mercator) while geocoded points across datasets are EPSG:4326 — apply a reprojection (e.g. ST_Transform) when joining geometries directly.
Views
mv_current_lawmakers
Pre-joined profile of all currently serving legislators with their active term, social media accounts, office count, and committee count.
| Column | Type | Description |
|---|---|---|
bioguide_id |
varchar(10) | Primary key |
official_full |
varchar(255) | Full name |
first_name |
varchar(100) | First name |
last_name |
varchar(100) | Last name |
gender |
char(1) | Gender |
birthday |
date | Date of birth |
state |
char(2) | State |
district |
integer | Congressional district (null for senators) |
term_type |
varchar(10) | rep or sen |
party |
varchar(50) | Political party |
term_start |
date | Term start date |
term_end |
date | Term end date |
senate_class |
integer | Senate class (1, 2, or 3) |
state_rank |
varchar(10) | junior or senior |
office_phone |
varchar(50) | Office phone |
contact_form |
varchar(500) | Contact form URL |
twitter |
varchar(100) | Twitter/X handle |
facebook |
varchar(100) | Facebook page |
instagram |
varchar(100) | Instagram handle |
youtube |
varchar(100) | YouTube channel |
office_count |
bigint | Number of district offices |
committee_count |
bigint | Number of committee assignments |
Example queries
# All current senators
curl "https://benthic.io/ngopen/usp_cl/mv_current_lawmakers?term_type=eq.sen&select=official_full,state,party,senate_class&order=state"
# Representatives by party
curl "https://benthic.io/ngopen/usp_cl/mv_current_lawmakers?term_type=eq.rep&party=eq.Republican&select=official_full,state,district&order=state,district&limit=50"
# Legislators with most committee assignments
curl "https://benthic.io/ngopen/usp_cl/mv_current_lawmakers?select=official_full,committee_count,office_count&order=committee_count.desc&limit=25"
mv_committee_power
Committee membership with legislator district information. Shows who sits on which committees, their role, and which district they represent.
| Column | Type | Description |
|---|---|---|
committee_id |
integer | Committee ID |
thomas_id |
varchar(20) | THOMAS committee ID |
committee_name |
varchar(255) | Committee name |
committee_type |
varchar(20) | house, senate, or joint |
is_current |
boolean | Currently active |
bioguide_id |
varchar(10) | Legislator bioguide ID |
legislator_name |
varchar(255) | Legislator name |
party |
varchar(20) | Political party |
rank |
integer | Seniority rank |
title |
varchar(100) | Title (Chair, Ranking Member, etc.) |
state |
char(2) | Legislator’s state |
district |
integer | Legislator’s district |
term_end |
date | Term end date |
Example queries
# All Appropriations Committee members
curl "https://benthic.io/ngopen/usp_cl/mv_committee_power?thomas_id=eq.SAPP&select=legislator_name,party,rank,title,state,district&order=rank"
# Committee chairs
curl "https://benthic.io/ngopen/usp_cl/mv_committee_power?title=ilike.*chair*&select=legislator_name,committee_name,state,district&limit=50"
# Members from a state on a specific committee
curl "https://benthic.io/ngopen/usp_cl/mv_committee_power?thomas_id=eq.SFIN&state=eq.CA&select=legislator_name,title"
Data sources
| Source | Description | Update frequency |
|---|---|---|
| unitedstates/congress-legislators | Eight YAML documents: legislators, terms, social media, other names, district offices, committees, subcommittees, committee membership, and executive officials | Continuous (git) |
| Photon | Geocoding for district office addresses | On rebuild |
All data originates from publicly available sources. The upstream project is community-maintained and CC0-licensed; the pipeline records the exact commit each build was produced from, so a refresh is reproducible.
The source is a git checkout rather than an archive, so 00_acquire
fast-forwards and pins the revision. Districts resolve to boundaries by
state + district in up_cdmaps, not by geometry.
Related
- Swagger explorer — interactive API browser for
/ngopen/usp_cl - Signed manifest — every relation, column, and licence, signed with the publisher’s Ed25519 key
- Pipeline README — how this dataset is actually built
- BDP specification — what the manifest signature proves, and how to verify it offline
- Documentation map — every dataset on benthic.io and where its documentation lives
- APIs overview — join paths between datasets and worked cross-collection queries
- Also in NGOpen: USAspending, SAM Entity Registry, IRS Nonprofits, Congressional District Maps
- In Parts: NHTSA vPIC Vehicle Information
