# Lobbying Disclosure Scraper - Senate LDA Filings (`jungle_synthesizer/lobbying-disclosure-crawler`) Actor

Scrape US federal lobbying disclosure filings from the Senate LDA database. Extract registrants, clients, lobbyists, activities, issue areas, and government entities. Filter by year, period, issue, registrant, or client.

- **URL**: https://apify.com/jungle\_synthesizer/lobbying-disclosure-crawler.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Senate LDA Lobbying Disclosure Scraper

Extract US federal lobbying disclosure filings from the [Senate Lobbying Disclosure Act database](https://lda.senate.gov/api/v1/filings/). Covers roughly 1.94 million filings from 1999 to present — registrants, clients, lobbyists, issue areas, government entities contacted, foreign entities, and reported income and expenses.

### Lobbying Disclosure Crawler Features

- Extracts every filing field the Senate LDA publishes — registrant contact info, client details, lobbying activities, issue codes, and financials
- Flattens nested structures into scalar fields and clean string arrays, so you can pipe the output straight into a spreadsheet or database
- Filters by year, period, filing type, registrant name, client name, client state, issue area code, specific-issue text search, or date-posted range
- Returns deduplicated lobbyist rosters and government-entity contact lists across all activities in a filing
- Pure JSON API — no HTML scraping, no browser, no proxies, no authentication
- Pay-per-event pricing at about $0.001 per filing
- Honors the Senate's rate conventions with a 250ms courtesy delay between pages

### Who Uses Senate LDA Lobbying Data?

- **Political intelligence firms** — track new registrations and issue-area trends for clients monitoring specific legislation
- **Compliance teams** — screen vendors and counterparties against the canonical federal lobbying registry before contracts close
- **Investigative journalists** — follow the money from foreign entities, affiliated orgs, and quarterly expense reports across years
- **Policy researchers** — build issue-area datasets spanning decades of filings without paying for commercial aggregators
- **Advocacy and public-interest orgs** — surface which firms represent which clients on which issues, with source links back to the original filings

### How the Senate LDA Crawler Works

1. You pick at least one narrowing filter — a filing year, a registrant name, a client name, a state, an issue code, or a date window.
2. The crawler queries the Senate LDA API at `lda.senate.gov/api/v1/filings/`, paginating through the standard DRF envelope until it reaches your `maxItems` cap or the last page.
3. Each raw filing is flattened: registrant and client objects collapse into scalar fields, lobbying activities turn into a formatted string array, and nested lobbyists get deduplicated across activities.
4. Results save to your Apify dataset with a stable schema, one row per filing.

### Input

#### Basic: pull 2024 Q1 filings

```json
{
  "filingYear": 2024,
  "filingPeriod": "first_quarter",
  "maxItems": 100
}
````

#### Search by client name

```json
{
  "clientName": "GOOGLE",
  "maxItems": 50
}
```

#### Registrations only, filtered by year

```json
{
  "filingYear": 2024,
  "filingType": "RR",
  "maxItems": 200
}
```

#### Issue-area slice (all Health filings from a given year)

```json
{
  "filingYear": 2024,
  "issueAreaCode": "HCR",
  "maxItems": 500
}
```

#### Date window on when filings were posted

```json
{
  "datePostedFrom": "2024-01-01",
  "datePostedTo": "2024-03-31",
  "maxItems": 1000
}
```

#### Input Parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| filingYear | integer | `2024` | Calendar year the filing reports on. Leave empty if using a different narrowing filter. Valid range: 1999-present. |
| filingPeriod | string | `""` | Reporting period. One of `first_quarter`, `second_quarter`, `third_quarter`, `fourth_quarter`, `mid_year`, `year_end`, `undetermined`, or empty for all periods. |
| filingType | string | `""` | Filing type code. `RR` = new registration, `Q1`–`Q4` = quarterly reports, `1A`–`4A` = amendments, `1T`–`4T` = terminations. Empty returns all types. |
| registrantName | string | `""` | Case-insensitive contains match on the lobbying firm name. |
| clientName | string | `""` | Case-insensitive contains match on the client organization name. |
| clientState | string | `""` | Two-letter US state code filtering the client's state. |
| issueAreaCode | string | `""` | Three-letter general issue area code (e.g., `HCR`, `BUD`, `TEC`, `DEF`, `TAX`). |
| specificIssueSearch | string | `""` | Full-text search on the "specific lobbying issues" description. |
| datePostedFrom | string | `""` | Return filings posted on or after this date (YYYY-MM-DD). |
| datePostedTo | string | `""` | Return filings posted on or before this date (YYYY-MM-DD). |
| maxItems | integer | `100` | Maximum number of filings to return. The API serves 25 per page, so small values finish in one or two requests. |
| proxyConfiguration | object | `{ useApifyProxy: false }` | Proxy settings. The Senate LDA API is public and does not require proxies. |

At least one narrowing filter is required. Running the full corpus unfiltered is blocked — that would be about 78,000 pages and nobody's day goes well after that.

### Lobbying Disclosure Crawler Output Fields

#### Example Output

```json
{
  "filing_uuid": "467e4a97-6351-4902-8ffa-dd51632e156b",
  "filing_type": "Q1",
  "filing_type_display": "1st Quarter - Report",
  "filing_year": 2024,
  "filing_period": "first_quarter",
  "filing_period_display": "1st Quarter (Jan 1 - Mar 31)",
  "filing_document_url": "https://lda.senate.gov/filings/public/filing/467e4a97-6351-4902-8ffa-dd51632e156b/print/",
  "dt_posted": "2024-01-02T13:14:26-05:00",
  "effective_date": "2023-08-01",
  "termination_date": "",
  "posted_by_name": "Sean Farrell",
  "income": 30000,
  "income_amount": "30000.00",
  "expenses": null,
  "expense_amount": "",
  "expenses_method": "",
  "registrant_id": 401107792,
  "registrant_name": "EAST CAPITOL ADVISORS LLC",
  "registrant_description": "",
  "registrant_address": "921 H Street, NE, #252",
  "registrant_city": "Washington",
  "registrant_state": "District of Columbia",
  "registrant_zip": "20002",
  "registrant_country": "United States of America",
  "registrant_contact_name": "SEAN FARRELL",
  "registrant_contact_phone": "+1 202-944-0520",
  "registrant_house_id": 56170,
  "client_id": 56764,
  "client_name": "CTIA - THE WIRELESS ASSOCIATION",
  "client_description": "CTIA is the trade association of the cellular/wireless industry.",
  "client_state": "District of Columbia",
  "client_country": "United States of America",
  "client_ppb_state": "District of Columbia",
  "client_ppb_country": "United States of America",
  "client_self_select": false,
  "client_is_government_entity": false,
  "lobbyists": [
    "SEAN FARRELL"
  ],
  "lobbying_activities": [
    "TEC - Telecommunications: H.R.3949, End Cells in Cells Act, a bill to increase criminal penalties for contraband cell phones in prisons and jails."
  ],
  "government_entities": [
    "HOUSE OF REPRESENTATIVES"
  ],
  "issue_area_codes": [
    "TEC"
  ],
  "foreign_entities": [],
  "affiliated_organizations": [],
  "conviction_disclosures": [],
  "api_url": "https://lda.senate.gov/api/v1/filings/467e4a97-6351-4902-8ffa-dd51632e156b/",
  "document_url": "https://lda.senate.gov/filings/public/filing/467e4a97-6351-4902-8ffa-dd51632e156b/print/"
}
```

#### Output Field Reference

| Field | Type | Description |
|-------|------|-------------|
| filing\_uuid | string | Unique UUID of the filing |
| filing\_type | string | Filing type code (RR, Q1, Q2, Q3, Q4, MM, YE, 1A, 2T, etc.) |
| filing\_type\_display | string | Human-readable filing type (e.g., "Registration", "1st Quarter - Report") |
| filing\_year | integer | Calendar year the filing reports on |
| filing\_period | string | Reporting period code |
| filing\_period\_display | string | Human-readable reporting period |
| filing\_document\_url | string | Filer-submitted document URL |
| dt\_posted | string | When the filing was posted to the LDA database (ISO 8601) |
| effective\_date | string | Effective date of the client-registrant relationship (ISO 8601) |
| termination\_date | string | When the relationship was terminated, if applicable |
| posted\_by\_name | string | Name of the person who submitted the filing |
| income | number | Reported lobbying income in USD, or null |
| income\_amount | string | Raw decimal string for precision-sensitive downstream systems |
| expenses | number | Reported lobbying expenses in USD, or null |
| expense\_amount | string | Raw decimal string for expenses |
| expenses\_method | string | Method used to calculate expenses (a, b, or c) |
| registrant\_id | integer | Internal ID of the registrant |
| registrant\_name | string | Registrant (lobbying firm) name |
| registrant\_description | string | Registrant's self-description of its business |
| registrant\_address | string | Registrant street address (line 1 + line 2, comma-joined) |
| registrant\_city | string | Registrant city |
| registrant\_state | string | Registrant state/region name |
| registrant\_zip | string | Registrant postal code |
| registrant\_country | string | Registrant country (display name) |
| registrant\_contact\_name | string | Registrant primary contact name |
| registrant\_contact\_phone | string | Registrant primary contact phone |
| registrant\_house\_id | integer | Registrant's ID in the companion House system, if available |
| client\_id | integer | Internal ID of the client organization |
| client\_name | string | Client organization name |
| client\_description | string | Client's self-description / general business |
| client\_state | string | Client state/region name |
| client\_country | string | Client country (display name) |
| client\_ppb\_state | string | Client's principal place of business state |
| client\_ppb\_country | string | Client's principal place of business country |
| client\_self\_select | boolean | True if the client self-registered (vs. represented by a firm) |
| client\_is\_government\_entity | boolean | True if the client is itself a government entity |
| lobbyists | string\[] | Deduplicated list of lobbyists, each as `First Last (covered_position) [NEW]` |
| lobbying\_activities | string\[] | Formatted activity records: `<code> - <display>: <description>` |
| government\_entities | string\[] | Deduplicated list of government entities contacted across all activities |
| issue\_area\_codes | string\[] | Unique general issue area codes covered by this filing |
| foreign\_entities | string\[] | Foreign entities with a financial interest, with country, ownership, and contribution where available |
| affiliated\_organizations | string\[] | Affiliated organizations that contribute to the lobbying, with city/state/country |
| conviction\_disclosures | string\[] | Conviction disclosures: `Name - offense - date` |
| api\_url | string | Absolute URL to this filing's own Senate LDA API record |
| document\_url | string | Public Senate LDA viewer URL for the filing document |

### FAQ

#### How do I scrape Senate lobbying disclosures?

Pick a narrowing filter — filing year, client name, registrant name, issue area code, or a date range — and run the actor. The full Senate LDA API is exposed via standard fields, and the output comes back as flat JSON ready for a dataset, CSV, or database.

#### How many lobbying filings does the Senate LDA Crawler cover?

About 1.94 million filings from 1999 through today, with roughly 97,000 new filings per year. The actor streams straight from the canonical Senate source, so new filings show up as they're posted.

#### What filters work on the Senate LDA API?

The actor supports filingYear, filingPeriod, filingType, registrantName, clientName, clientState, issueAreaCode, specificIssueSearch, datePostedFrom, and datePostedTo. Combine them as needed — the API applies AND-semantics. At least one filter is required to prevent accidental full-corpus runs.

#### Do I need proxies or an API key?

No. The Senate LDA API is public, unauthenticated, and free. Proxies are disabled by default.

#### How much does it cost to run?

About $0.10 to start plus roughly $0.001 per filing returned. Pulling a thousand filings lands near $1.10. A full year slice (about 97,000 filings) lands near $97.

#### What's the deal with the lda.gov deprecation notice?

The Senate-hosted API at `lda.senate.gov` carries a deprecation header naming `lda.gov/api/v1/` as the successor, with a sunset of 2026-06-30. The successor host isn't open to the public yet. The crawler uses the working Senate host today, and the migration is a one-line change once the new host goes live.

#### How fast does the crawler run?

The Senate API returns 25 records per page. Small queries (10–100 filings) complete in under 10 seconds. A thousand filings takes a few minutes with the 250ms polite delay between pages.

### Need More Features?

Need custom fields, additional filters, or a different data source? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use the Senate LDA Lobbying Disclosure Crawler?

- **Canonical source** — Reads the Senate's own JSON API, so output tracks whatever the filer reported, not an aggregator's interpretation.
- **Priced per record** — About $0.001 per filing. A thousand filings costs a little over a dollar, which is what you might call "reasonable."
- **Clean output schema** — Nested activities, lobbyists, and government entities get flattened and deduplicated into scalar fields and string arrays. No post-processing required before you load it into a warehouse.
- **No proxy overhead** — Public US government API with no anti-bot measures, so your run cost is just compute and records.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

## `filingYear` (type: `integer`):

Return filings from this calendar year (1999-present). Leave empty to search across all years - use with a narrow filter to avoid huge result sets.

## `filingPeriod` (type: `string`):

Quarter or reporting period. Pre-2008 filings use mid\_year / year\_end. Leave empty for all periods.

## `filingType` (type: `string`):

Type of filing. RR = new registration, Q1-Q4 = quarterly report, 1A-4A = amendment, 1T-4T = termination. Leave empty for all types.

## `registrantName` (type: `string`):

Filter by lobbying firm / registrant name (case-insensitive contains match). Examples: AKIN GUMP, BROWNSTEIN.

## `clientName` (type: `string`):

Filter by client organization name (case-insensitive contains match). Examples: GOOGLE, PFIZER, AMAZON.

## `clientState` (type: `string`):

Filter by client's state of operation (2-letter US state code). Leave empty for all states.

## `issueAreaCode` (type: `string`):

Filter by general issue area code (3-letter). Examples: HCR (Health), BUD (Budget), TEC (Telecommunications), DEF (Defense), TAX (Taxation).

## `specificIssueSearch` (type: `string`):

Full-text search on the 'specific lobbying issues' description. Examples: climate, section 230, CHIPS Act.

## `datePostedFrom` (type: `string`):

Return filings posted on or after this date (YYYY-MM-DD). Leave empty for no lower bound.

## `datePostedTo` (type: `string`):

Return filings posted on or before this date (YYYY-MM-DD). Leave empty for no upper bound.

## `maxItems` (type: `integer`):

Maximum number of filings to return. The API returns 25 per page, so small values finish in one or two requests. Large runs can take a while - the full 2024 calendar year is ~97k filings.

## `proxyConfiguration` (type: `object`):

Select proxies. The Senate LDA API is public and does not require proxies.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "filingYear": 2024,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "filingYear": 2024,
    "filingPeriod": "",
    "filingType": "",
    "registrantName": "",
    "clientName": "",
    "clientState": "",
    "issueAreaCode": "",
    "specificIssueSearch": "",
    "datePostedFrom": "",
    "datePostedTo": "",
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/lobbying-disclosure-crawler").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "filingYear": 2024,
    "filingPeriod": "",
    "filingType": "",
    "registrantName": "",
    "clientName": "",
    "clientState": "",
    "issueAreaCode": "",
    "specificIssueSearch": "",
    "datePostedFrom": "",
    "datePostedTo": "",
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/lobbying-disclosure-crawler").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "filingYear": 2024,
  "filingPeriod": "",
  "filingType": "",
  "registrantName": "",
  "clientName": "",
  "clientState": "",
  "issueAreaCode": "",
  "specificIssueSearch": "",
  "datePostedFrom": "",
  "datePostedTo": "",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call jungle_synthesizer/lobbying-disclosure-crawler --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jungle_synthesizer/lobbying-disclosure-crawler",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Lobbying Disclosure Scraper - Senate LDA Filings",
        "description": "Scrape US federal lobbying disclosure filings from the Senate LDA database. Extract registrants, clients, lobbyists, activities, issue areas, and government entities. Filter by year, period, issue, registrant, or client.",
        "version": "1.0",
        "x-build-id": "MK66OCfPwoaomkYfa"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~lobbying-disclosure-crawler/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-lobbying-disclosure-crawler",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~lobbying-disclosure-crawler/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-lobbying-disclosure-crawler",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~lobbying-disclosure-crawler/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-lobbying-disclosure-crawler",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "sp_intended_usage",
                    "sp_improvement_suggestions"
                ],
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "filingYear": {
                        "title": "Filing Year",
                        "type": "integer",
                        "description": "Return filings from this calendar year (1999-present). Leave empty to search across all years - use with a narrow filter to avoid huge result sets."
                    },
                    "filingPeriod": {
                        "title": "Filing Period",
                        "enum": [
                            "",
                            "first_quarter",
                            "second_quarter",
                            "third_quarter",
                            "fourth_quarter",
                            "mid_year",
                            "year_end",
                            "undetermined"
                        ],
                        "type": "string",
                        "description": "Quarter or reporting period. Pre-2008 filings use mid_year / year_end. Leave empty for all periods."
                    },
                    "filingType": {
                        "title": "Filing Type",
                        "enum": [
                            "",
                            "RR",
                            "RA",
                            "Q1",
                            "Q2",
                            "Q3",
                            "Q4",
                            "1A",
                            "2A",
                            "3A",
                            "4A",
                            "1T",
                            "2T",
                            "3T",
                            "4T",
                            "MM",
                            "YE"
                        ],
                        "type": "string",
                        "description": "Type of filing. RR = new registration, Q1-Q4 = quarterly report, 1A-4A = amendment, 1T-4T = termination. Leave empty for all types."
                    },
                    "registrantName": {
                        "title": "Registrant Name",
                        "type": "string",
                        "description": "Filter by lobbying firm / registrant name (case-insensitive contains match). Examples: AKIN GUMP, BROWNSTEIN."
                    },
                    "clientName": {
                        "title": "Client Name",
                        "type": "string",
                        "description": "Filter by client organization name (case-insensitive contains match). Examples: GOOGLE, PFIZER, AMAZON."
                    },
                    "clientState": {
                        "title": "Client State",
                        "enum": [
                            "",
                            "AL",
                            "AK",
                            "AZ",
                            "AR",
                            "CA",
                            "CO",
                            "CT",
                            "DE",
                            "DC",
                            "FL",
                            "GA",
                            "HI",
                            "ID",
                            "IL",
                            "IN",
                            "IA",
                            "KS",
                            "KY",
                            "LA",
                            "ME",
                            "MD",
                            "MA",
                            "MI",
                            "MN",
                            "MS",
                            "MO",
                            "MT",
                            "NE",
                            "NV",
                            "NH",
                            "NJ",
                            "NM",
                            "NY",
                            "NC",
                            "ND",
                            "OH",
                            "OK",
                            "OR",
                            "PA",
                            "RI",
                            "SC",
                            "SD",
                            "TN",
                            "TX",
                            "UT",
                            "VT",
                            "VA",
                            "WA",
                            "WV",
                            "WI",
                            "WY",
                            "PR"
                        ],
                        "type": "string",
                        "description": "Filter by client's state of operation (2-letter US state code). Leave empty for all states."
                    },
                    "issueAreaCode": {
                        "title": "Issue Area Code",
                        "enum": [
                            "",
                            "ACC",
                            "ADV",
                            "AER",
                            "AGR",
                            "ALC",
                            "ANI",
                            "APP",
                            "ART",
                            "AUT",
                            "AVI",
                            "BAN",
                            "BNK",
                            "BEV",
                            "BUD",
                            "CIV",
                            "CHM",
                            "CAW",
                            "CDT",
                            "COM",
                            "CPI",
                            "CON",
                            "CSP",
                            "CPT",
                            "DEF",
                            "DIS",
                            "DOC",
                            "ECN",
                            "EDU",
                            "ENG",
                            "ENV",
                            "FAM",
                            "FIN",
                            "FIR",
                            "FOO",
                            "FOR",
                            "FUE",
                            "GAM",
                            "GOV",
                            "HCR",
                            "HOM",
                            "HOU",
                            "IMM",
                            "IND",
                            "INS",
                            "INT",
                            "LBR",
                            "LAW",
                            "MAN",
                            "MAR",
                            "MED",
                            "MIA",
                            "MON",
                            "NAT",
                            "PHA",
                            "POS",
                            "RRR",
                            "REL",
                            "RES",
                            "RET",
                            "ROD",
                            "SCI",
                            "SMB",
                            "SPO",
                            "TAR",
                            "TAX",
                            "TEC",
                            "TOB",
                            "TOR",
                            "TOU",
                            "TRA",
                            "TRU",
                            "TRD",
                            "URB",
                            "UNM",
                            "UTI",
                            "VET",
                            "WAS",
                            "WEL"
                        ],
                        "type": "string",
                        "description": "Filter by general issue area code (3-letter). Examples: HCR (Health), BUD (Budget), TEC (Telecommunications), DEF (Defense), TAX (Taxation)."
                    },
                    "specificIssueSearch": {
                        "title": "Specific Issue Text Search",
                        "type": "string",
                        "description": "Full-text search on the 'specific lobbying issues' description. Examples: climate, section 230, CHIPS Act."
                    },
                    "datePostedFrom": {
                        "title": "Posted Date From",
                        "type": "string",
                        "description": "Return filings posted on or after this date (YYYY-MM-DD). Leave empty for no lower bound."
                    },
                    "datePostedTo": {
                        "title": "Posted Date To",
                        "type": "string",
                        "description": "Return filings posted on or before this date (YYYY-MM-DD). Leave empty for no upper bound."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of filings to return. The API returns 25 per page, so small values finish in one or two requests. Large runs can take a while - the full 2024 calendar year is ~97k filings.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxies. The Senate LDA API is public and does not require proxies."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
