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.
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"
Views
Embedding examples
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.
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"
