lda_search_filings
Search US Senate Lobbying Disclosure Act filings to find who lobbies which federal agency on which issue and how much they are paid. Filter by registrant, client, lobbyist, year, or issue.
Instructions
Search US Senate LDA (Lobbying Disclosure Act) filings — who is paid HOW MUCH to lobby WHICH federal agency on WHICH issue (lda.senate.gov/api/v1/filings, KEYLESS — anonymous access works; an optional free LDA_API_KEY only raises the rate limit). All inputs optional: registrantName (the lobbying firm/in-house filer), clientName (who it's for), lobbyistName, filingYear (4-digit), filingType (short code, e.g. 'Q1'/'RR'/'YE'), agency (NOTE: /filings/ has NO server-side agency filter — the LDA API silently ignores it, so it is reported in _meta.filtersDropped and NOT applied; government entities are nested per activity in lobbyingActivities[].governmentEntities), issue (specific lobbying issues text), page (1-based, default 1), pageSize (1..25, default 25). Returns { filings:[{ filingUuid, filingType, filingYear, filingPeriod, incomeUsd, expensesUsd, registrant, client, lobbyingActivities:[{ issueCode, description, governmentEntities:[names] }], documentUrl, postedDate, terminationDate }] } + honest _meta. HONESTY: totalAvailable is the API's REAL total match count (the corpus is ~1.95M filings) — NOT the rows on this page; pagination is page-based (pass the next page number when hasMore). incomeUsd/expensesUsd are parsed from the null-or-decimal-string income/expenses — null (not reported) ⇒ null, NEVER 0 (a genuine 0 stays 0); a filing reports EITHER income OR expenses, so the other is typically null. Missing lobbying_activities/government_entities ⇒ empty arrays (never fabricated). A genuine no-match (results:[]) ⇒ honest empty (returned:0); a 400 (bad filter) ⇒ invalid_input surfacing the API's message; a 429 ⇒ rate_limited THROWS (Retry-After honored, never routed around); a 5xx/timeout ⇒ upstream_unavailable THROWS; a 200 non-JSON / non-array results / non-number count ⇒ schema_drift. The optional key rides ONLY in the Authorization: Token header (never the URL/_meta).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number (default 1). Page with the next page number from _meta.notes / when _meta.pagination.hasMore. | |
| issue | No | Filter by the specific lobbying issues text (maps to filing_specific_lobbying_issues), e.g. 'appropriations'. | |
| agency | No | NOTE: the keyless /filings/ endpoint has NO server-side government-entity filter — the LDA API silently ignores it, so this value is NOT applied (reported in _meta.filtersDropped, never as a narrowed total). Government entities are nested per lobbying activity (each filing's lobbyingActivities[].governmentEntities); to find who lobbied an agency, narrow by registrantName/clientName/issue and inspect those nested entities. Retained for discoverability of the limitation. | |
| pageSize | No | Filings per page, 1..25 (the LDA API caps at 25), default 25. | |
| clientName | No | Filter by the client name (who the lobbying is FOR), e.g. 'Google'. Substring match, upstream-validated. | |
| filingType | No | Filter by the filing type short code (e.g. 'Q1' Q1 report, 'RR' registration, 'YE' year-end). A bad code ⇒ upstream HTTP 400 ⇒ invalid_input (surfaced). | |
| filingYear | No | Filter by filing year, a 4-digit year (e.g. '2024'). Validated ^\d{4}$. | |
| lobbyistName | No | Filter by an individual lobbyist's name. Substring match, upstream-validated. | |
| registrantName | No | Filter by the registrant (the lobbying firm / in-house filer) name, e.g. 'Akin Gump'. Substring match, upstream-validated. |