Returns Lobbying Disclosure Act (LDA) filings — quarterly LD-2 reports filed by registered lobbyist firms with the Senate Office of Public Records

Returns Lobbying Disclosure Act (LDA) filings — quarterly LD-2 reports filed by registered lobbyist firms with the Senate Office of Public Records. Each record covers one (registrant, client, quarter) tuple, listing income paid, issues lobbied on, and government entities contacted. Use this when the user asks about: who's paying lobbyists, what issues a company is lobbying on, which senators or agencies a firm is contacting, lobbying spend by industry or sector, or to cross lobbying activity against congressional trades or federal contracts for political-influence analysis. Each filing has a lobbying_activities array (one entry per issue area worked on) plus three flattened summary arrays at top level: - general_issue_codes: 3-char codes (DEF, HEA, TRA, ENV, FIN, ...) - government_entities: agencies/branches contacted - lobbyist_names: lobbyists who worked the issue Top-level arrays support indexed queries; the nested array carries issue-level descriptions and lobbyist position info. general_issue_codes filter is OR-semantic — pass an array, match any filing containing AT LEAST ONE of those codes (max 30, per Firestore array-contains-any). Examples: ['DEF'] for defense, ['HEA','MMM'] for health + Medicare/Medicaid, ['TAX','FIN'] for tax + financial services. Income vs expenses (IMPORTANT for ranking by spend): the LDA mandates a hard split. Third-party lobbying firms report income (what the client paid them); in-house corporate lobbying departments report expenses (what they spent). The two fields are mutually exclusive — any given filing has one or the other, not both. In practice ~30% of filings have income, ~70% have expenses, with a small population reporting neither (administrative registrations). So sort_by=income ranks the third-party-firm subset; for an actual top-spenders leaderboard, agents should fetch both populations and sum income + expenses per filing client-side. v1.1 polish will add a derived total_lobbying_spend field that does this sum server-side for indexed queries. client_is_government is true when the client is a government body (US states often hire lobbyists). Activity descriptions are truncated at 5000 chars during ingestion to stay under Firestore's per-doc cap; agents can fetch the full filing via filing_document_url for the unbounded prose.

get/v1/lobbying-filings

Request

  • Base URL: https://api.keyvex.com
  • URL: https://api.keyvex.com/v1/lobbying-filings
  • Auth: API key in header x-api-key

Query parameters

registrant_namestring

Substring match against the lobbying firm's name (case-insensitive). E.g., 'Akin Gump', 'Brownstein'.

client_namestring

Substring match against the paying client's name (case-insensitive). E.g., 'Pfizer', 'Lockheed Martin', 'STATE OF CALIFORNIA'.

filing_yearinteger

Calendar year of the reporting period (NOT the filing date).

filing_period'first_quarter' | 'second_quarter' | 'third_quarter' | 'fourth_quarter' | 'mid_year' | 'year_end'

Reporting period within filing_year. Quarters for LD-2; mid_year/year_end for LD-203 contributions windows.

general_issue_codesstring

Array of 3-char issue codes (OR semantics). E.g., ['DEF'] for defense, ['HEA','MMM'] for health+Medicare. Max 30 codes per query. (comma-separated)

government_entitystring

Substring match against any government entity contacted. E.g., 'SENATE', 'Treasury', 'FDA', 'Defense, Dept of'.

min_incomenumber

Filter to filings with income >= this amount (USD). Use to focus on big-dollar lobbying spend.

sincestring

ISO date (YYYY-MM-DD). Only records on or after this date, using sort_by as the date field.

untilstring

ISO date (YYYY-MM-DD). Only records on or before this date.

sort_by'dt_posted' | 'filing_year' | 'income'

Field used for ordering and for since/until filters. Default: dt_posted (when the filing was submitted).

sort_order'desc' | 'asc'

Default: desc (most recent / largest first).

limitinteger

Maximum records to return. Default 50, max 500.

Response

JSON envelope: { results: [...], count, has_more }.

Changes

No recorded changes to this operation across all 1 revision of this API.