lobby provides access to the US Senate’s Lobbying Disclosure Act API.
Installation
You can install the development version of lobby like so:
pak::pak('christopherkenny/lobby')
Example
To get filings, simply use the lob_list_filings() function to list all
filings that match your criteria. For example, to get all filings for
Harvard University in 2025:
library(lobby) lob_list_filings(client_name = 'Harvard University', filing_year = 2025) #> # A tibble: 6 × 30 #> url filing_uuid filing_type filing_type_display filing_year filing_period #> <chr> <chr> <chr> <chr> <int> <chr> #> 1 https:/… 0463abad-8… Q1 1st Quarter - Repo… 2025 first_quarter #> 2 https:/… fbe714ff-3… Q1 1st Quarter - Repo… 2025 first_quarter #> 3 https:/… 785c0620-7… Q2 2nd Quarter - Repo… 2025 second_quart… #> 4 https:/… 761c6e5a-f… Q2 2nd Quarter - Repo… 2025 second_quart… #> 5 https:/… 937d9dc1-c… Q3 3rd Quarter - Repo… 2025 third_quarter #> 6 https:/… b9247859-4… Q3 3rd Quarter - Repo… 2025 third_quarter #> # ℹ 24 more variables: filing_period_display <chr>, filing_document_url <chr>, #> # filing_document_content_type <chr>, income <chr>, expenses <chr>, #> # expenses_method <chr>, expenses_method_display <chr>, posted_by_name <chr>, #> # dt_posted <chr>, termination_date <lgl>, registrant_country <chr>, #> # registrant_ppb_country <lgl>, registrant_address_1 <chr>, #> # registrant_address_2 <lgl>, registrant_different_address <lgl>, #> # registrant_city <chr>, registrant_state <chr>, registrant_zip <chr>, …
You can also request the next set using the lob_request_next()
function. Here, we also artificially shorten the results to 3 per page.
lob_list_filings( client_name = 'Harvard University', filing_year = 2025, page_size = 3 ) |> lob_request_next() #> # A tibble: 6 × 30 #> url filing_uuid filing_type filing_type_display filing_year filing_period #> <chr> <chr> <chr> <chr> <int> <chr> #> 1 https:/… 0463abad-8… Q1 1st Quarter - Repo… 2025 first_quarter #> 2 https:/… fbe714ff-3… Q1 1st Quarter - Repo… 2025 first_quarter #> 3 https:/… 785c0620-7… Q2 2nd Quarter - Repo… 2025 second_quart… #> 4 https:/… 761c6e5a-f… Q2 2nd Quarter - Repo… 2025 second_quart… #> 5 https:/… 937d9dc1-c… Q3 3rd Quarter - Repo… 2025 third_quarter #> 6 https:/… b9247859-4… Q3 3rd Quarter - Repo… 2025 third_quarter #> # ℹ 24 more variables: filing_period_display <chr>, filing_document_url <chr>, #> # filing_document_content_type <chr>, income <chr>, expenses <chr>, #> # expenses_method <chr>, expenses_method_display <chr>, posted_by_name <chr>, #> # dt_posted <chr>, termination_date <lgl>, registrant_country <chr>, #> # registrant_ppb_country <lgl>, registrant_address_1 <chr>, #> # registrant_address_2 <lgl>, registrant_different_address <lgl>, #> # registrant_city <chr>, registrant_state <chr>, registrant_zip <chr>, …
To get more details, you can retrieve a specific filing by its UUID
using lob_retrieve_filing():
lob_retrieve_filing(filing_uuid = '0463abad-89e8-4d9d-b72c-a0b8aa66c6b0') #> # A tibble: 1 × 30 #> url filing_uuid filing_type filing_type_display filing_year filing_period #> <chr> <chr> <chr> <chr> <int> <chr> #> 1 https:/… 0463abad-8… Q1 1st Quarter - Repo… 2025 first_quarter #> # ℹ 24 more variables: filing_period_display <chr>, filing_document_url <chr>, #> # filing_document_content_type <chr>, income <lgl>, expenses <chr>, #> # expenses_method <chr>, expenses_method_display <chr>, posted_by_name <chr>, #> # dt_posted <chr>, termination_date <lgl>, registrant_country <chr>, #> # registrant_ppb_country <lgl>, registrant_address_1 <chr>, #> # registrant_address_2 <lgl>, registrant_different_address <lgl>, #> # registrant_city <chr>, registrant_state <chr>, registrant_zip <chr>, …
Similar endpoints exist for clients, lobbyists, registrants, and
contributions. You can look up constants that can used for filtering
using the lob_constants_*() functions.
Authentication
To sign up for an API key, visit the US Senate’s Lobbying Disclosure Act API sign-up website.
Once you have your key, you can set it in your environment as
USSLDA_KEY. You can:
- Add this directly to your
.Renvironfile with a line like so
USSLDA_KEY='yourkey'
If doing this, I recommend using usethis::edit_r_environ() to ensure
that you open the correct .Renviron file.
-
Set this in you current R session with
Sys.setenv(USSLDA_KEY='yourkey'). -
Set this using the
lobby::set_lobby_key()function. To save this for future sessions, run withinstall = TRUE.