---
title: "Returns Lobbying Disclosure Act (LDA) filings — quarterly LD-2 reports filed by registered lobbyist firms with the Senate Office of Public Records"
method: GET
path: "/v1/lobbying-filings"
---

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

`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`

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.

## Query parameters

- `registrant_name` string
- `client_name` string
- `filing_year` integer
- `filing_period` 'first_quarter' | 'second_quarter' | 'third_quarter' | 'fourth_quarter' | 'mid_year' | 'year_end'
- `general_issue_codes` string
- `government_entity` string
- `min_income` number
- `since` string
- `until` string
- `sort_by` 'dt_posted' | 'filing_year' | 'income'
- `sort_order` 'desc' | 'asc'
- `limit` integer

## Response `200`

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

## Other responses

- `400`: Invalid parameter.
- `401`: Missing or invalid API key.
- `402`: This tool requires a higher plan (upgrade_required). Retrying will not help.
- `429`: Tier rate/quota limit reached (rate_limited). Retry-After points at the reset.

---

[API](https://skmtc.dev/keyvex/apis/keyvex-api.md) · [All operations](https://skmtc.dev/keyvex/apis/keyvex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/keyvex/apis/keyvex-api/revisions/01c0210c19cd?raw)
