# LDA Lobbying Disclosure Scraper (`nexgendata/lda-lobbying-disclosure-scraper`) Actor

Scrape federal Lobbying Disclosure Act filings — registrant + client, year/period, income/expenses (USD), lobbying activities (issue codes + descriptions), named lobbyists, government entities contacted. OpenSecrets feed for journalism, corporate affairs, advocacy, compliance.

- **URL**: https://apify.com/nexgendata/lda-lobbying-disclosure-scraper.md
- **Developed by:** [Stephan Corbeil](https://apify.com/nexgendata) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 lobbying filings

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

## 🏛️ LDA Lobbying Disclosure Scraper — Federal Lobbying Filings

**Pull every quarterly Lobbying Disclosure Act filing — direct from the Senate's official LDA database. No paywall, no scraping the front-end, no API key needed.**

Under the Lobbying Disclosure Act (LDA), every registered lobbyist must file quarterly reports identifying their clients, the issues they lobbied on, the specific lobbyists who did the work, the government entities they contacted, and the income earned (or expenses incurred). This Actor wraps `lda.senate.gov/api/v1/filings/` and ships clean rows for journalists, corporate-affairs teams, advocacy groups, and compliance officers.

**An OpenSecrets / LobbyView data feed** — same source as the OpenSecrets website, structured for your stack.

### What you get (per filing)

- `filing_uuid`, `filing_type`, `filing_year`, `filing_period_display`
- `registrant_name`, `registrant_id`, `registrant_description`, `registrant_address`
- `client_name`, `client_id`, `client_general_description`, `client_state`, `client_country`
- `income`, `expenses`, `expenses_method` — USD reported by the lobbyist
- `lobbying_activities[]` — array, each with:
  - `general_issue_code` + `_display` (e.g. TAX, HCR, DEF)
  - `description` — the specific lobbying activity narrative
  - `lobbyists[]` — first/last name, covered position, "new" flag
  - `government_entities[]` — House, Senate, exec branch agencies contacted
- `issue_codes[]` — flat list of codes touched by the filing
- `lobbyist_names[]` — flat list of named lobbyists across all activities
- `government_entities[]` — flat list of agencies contacted
- `foreign_entities[]` — when applicable
- `filing_document_url`, `filing_url`, `dt_posted`

### Six high-leverage use cases

1. **Reporter beat: "what is X lobbying on?"** — set `clientName: "BlackRock"` and pull every LDA filing on behalf of any BlackRock entity, with full issue narratives.
2. **Competitive intel: track competitor lobbying** — corporate-affairs at Pharma A want to see every Pharma B filing on biosimilar policy.
3. **Advocacy group monitoring** — set `issueArea: "TAX"` to monitor every K-Street tax-policy filing this quarter.
4. **Compliance: my registrant filed?** — set `registrantName` to your firm and confirm filings are posted with correct amounts before the deadline.
5. **Academic research** — pull the full historical corpus (records go back to 2008) for econometric analysis of lobbying ROI.
6. **Government-affairs SaaS** — embed this dataset to enrich your CRM with named lobbyists and the specific government entities they touch.

### JSON quick start

```json
{
  "filingYear": 2024,
  "filingPeriod": "first_quarter",
  "clientName": "Amazon",
  "maxFilings": 25
}
````

POST to `https://api.apify.com/v2/acts/nexgendata~lda-lobbying-disclosure-scraper/runs?token=YOUR_TOKEN`.

### Python SDK example

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("nexgendata/lda-lobbying-disclosure-scraper").call(
    run_input={
        "filingYear": 2024,
        "filingPeriod": "first_quarter",
        "issueArea": "TAX",
        "maxFilings": 100,
    }
)
total_income = sum(
    float(item["income"] or 0)
    for item in client.dataset(run["defaultDatasetId"]).iterate_items()
)
print(f"Total reported income on TAX-issue filings: ${total_income:,.0f}")
```

### cURL one-liner

```bash
curl -X POST "https://api.apify.com/v2/acts/nexgendata~lda-lobbying-disclosure-scraper/runs?token=$APIFY_TOKEN" \
  -H "content-type: application/json" \
  -d '{"filingYear":2024,"filingPeriod":"first_quarter","clientName":"Amazon","maxFilings":25}'
```

### Pipe the output anywhere

- **Zapier** — `Apify → New Items in Dataset → Slack`. Daily LDA digest in seconds.
- **Make.com** — Apify trigger → Airtable / Google Sheets / Notion
- **n8n** — Apify run → enrichment → CRM update
- **DBT / Snowflake / BigQuery** — quarterly pull → fct\_lobbying\_filings table

### Pricing — pay only for what you get

| Event | Cost |
|---|---|
| Actor start | $0.00005 (one-time per run, scaled by GB-RAM) |
| Each LDA filing | **$0.10** |

A quarterly pull of every filing for a single client (~10 filings) is ~$1. The complete Q1 2024 universe (~25,000 filings) is ~$2,500. Compare to LobbyView Pro ($5K+/yr), Bloomberg Government ($10K+/yr), or Quorum ($24K+/yr starting price).

**Cost calculator:** `filings × $0.10 + $0.00005 × memoryGB`. No subscription, no minimum.

### FAQ

**Q. Why are some `income` values null?**
A. Lobbyists report EITHER income (LD-2) OR expenses (LD-2 method B), not both. The schema preserves the null on the side that doesn't apply.

**Q. What's the difference between a registrant and a client?**
A. Registrant = the lobbying firm or in-house lobbying entity that's federally registered. Client = the entity paying the registrant to lobby on their behalf. A K-Street firm registered as `BROWNSTEIN HYATT FARBER SCHRECK` may have hundreds of clients in one quarter.

**Q. Can I get the lobbyists' covered government positions?**
A. Yes — `lobbying_activities[].lobbyists[].covered_position` is populated when the lobbyist previously held a covered government role (e.g. Senate staff). This is the "revolving door" signal.

**Q. What about LD-203 contribution reports?**
A. Use `filingPeriod: "mid_year"` or `"year_end"` to pull LD-203 filings (semi-annual political-contribution reports).

**Q. Are foreign-government clients included?**
A. Yes — when applicable, `foreign_entities[]` is populated. For full FARA disclosures (registered foreign agents), use the DOJ's separate FARA database.

### Related actors from the same author

- **[FEC Independent Expenditures Scraper](https://apify.com/nexgendata/fec-independent-expenditures-scraper)** — campaign-finance Schedule E filings, $0.008/expenditure.
- **[USAspending Federal Awards Scraper](https://apify.com/nexgendata/usaspending-federal-awards-scraper)** — federal contracts/grants, $0.08/award. Companion follow-the-money dataset.
- **[Government Contracts Search](https://apify.com/nexgendata/government-contracts-search)** — SAM.gov contract-opportunity feed for GovTech sales.

### Try the full nexgendata fleet

[Browse 170+ scrapers](https://apify.com/nexgendata?fpr=2ayu9b) — SEC EDGAR, government contracts, ATS jobs, FEC, court records, real estate, MCP servers and more. Get $5 free Apify credit when you sign up via that link.

***

Built and maintained by the [nexgendata](https://apify.com/nexgendata) team. Bug reports & feature requests welcome via Apify Console messaging.

# Actor input Schema

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

Calendar year of the LDA filing (e.g. 2024). Federal lobbying disclosures are filed quarterly + mid-year for separate reporting tracks. Records exist back to 2008.

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

Which reporting period to pull. Q1 / Q2 / Q3 / Q4 are quarterly LDA filings. Mid-year / Year-end track separately for LD-203 contribution reports. Aliases: Q1=first\_quarter, Q2=second\_quarter, Q3=third\_quarter, Q4=fourth\_quarter, MidYear=mid\_year, YearEnd=year\_end.

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

Filter to filings where the registrant (lobbying firm) name contains this string. Case-insensitive partial match. Example: 'Brownstein' matches 'Brownstein Hyatt Farber Schreck'.

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

Filter to filings where the client (the entity hiring the lobbyist) name contains this string. Example: 'Amazon' matches every filing on behalf of Amazon's various entities.

## `issueArea` (type: `string`):

Filter on free-text mentioned within the filing's specific-lobbying-issues field. Common LDA issue codes you can search by: TAX, HCR (healthcare), DEF (defense), ENV (environment), TRD (trade), TEL (telecom), IMM (immigration).

## `maxFilings` (type: `integer`):

Maximum number of filings to return (1–5000). Each filing is one dataset row with full activities + lobbyists + government-contacts arrays.

## Actor input object example

```json
{
  "filingYear": 2024,
  "filingPeriod": "first_quarter",
  "maxFilings": 10
}
```

# 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 = {
    "filingYear": 2024,
    "filingPeriod": "first_quarter",
    "registrantName": "",
    "clientName": "",
    "issueArea": "",
    "maxFilings": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/lda-lobbying-disclosure-scraper").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 = {
    "filingYear": 2024,
    "filingPeriod": "first_quarter",
    "registrantName": "",
    "clientName": "",
    "issueArea": "",
    "maxFilings": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/lda-lobbying-disclosure-scraper").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 '{
  "filingYear": 2024,
  "filingPeriod": "first_quarter",
  "registrantName": "",
  "clientName": "",
  "issueArea": "",
  "maxFilings": 10
}' |
apify call nexgendata/lda-lobbying-disclosure-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LDA Lobbying Disclosure Scraper",
        "description": "Scrape federal Lobbying Disclosure Act filings — registrant + client, year/period, income/expenses (USD), lobbying activities (issue codes + descriptions), named lobbyists, government entities contacted. OpenSecrets feed for journalism, corporate affairs, advocacy, compliance.",
        "version": "0.0",
        "x-build-id": "hpLt74YL2rGiwmTXd"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~lda-lobbying-disclosure-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-lda-lobbying-disclosure-scraper",
                "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/nexgendata~lda-lobbying-disclosure-scraper/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-lda-lobbying-disclosure-scraper",
                "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/nexgendata~lda-lobbying-disclosure-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-lda-lobbying-disclosure-scraper",
                "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": [
                    "filingYear"
                ],
                "properties": {
                    "filingYear": {
                        "title": "Filing year",
                        "minimum": 2008,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Calendar year of the LDA filing (e.g. 2024). Federal lobbying disclosures are filed quarterly + mid-year for separate reporting tracks. Records exist back to 2008.",
                        "default": 2024
                    },
                    "filingPeriod": {
                        "title": "Filing period",
                        "enum": [
                            "first_quarter",
                            "second_quarter",
                            "third_quarter",
                            "fourth_quarter",
                            "mid_year",
                            "year_end",
                            "mid_year_termination",
                            "year_end_termination"
                        ],
                        "type": "string",
                        "description": "Which reporting period to pull. Q1 / Q2 / Q3 / Q4 are quarterly LDA filings. Mid-year / Year-end track separately for LD-203 contribution reports. Aliases: Q1=first_quarter, Q2=second_quarter, Q3=third_quarter, Q4=fourth_quarter, MidYear=mid_year, YearEnd=year_end.",
                        "default": "first_quarter"
                    },
                    "registrantName": {
                        "title": "Registrant name (optional partial match)",
                        "type": "string",
                        "description": "Filter to filings where the registrant (lobbying firm) name contains this string. Case-insensitive partial match. Example: 'Brownstein' matches 'Brownstein Hyatt Farber Schreck'."
                    },
                    "clientName": {
                        "title": "Client name (optional partial match)",
                        "type": "string",
                        "description": "Filter to filings where the client (the entity hiring the lobbyist) name contains this string. Example: 'Amazon' matches every filing on behalf of Amazon's various entities."
                    },
                    "issueArea": {
                        "title": "Issue area / specific issue keyword (optional)",
                        "type": "string",
                        "description": "Filter on free-text mentioned within the filing's specific-lobbying-issues field. Common LDA issue codes you can search by: TAX, HCR (healthcare), DEF (defense), ENV (environment), TRD (trade), TEL (telecom), IMM (immigration)."
                    },
                    "maxFilings": {
                        "title": "Max filings",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of filings to return (1–5000). Each filing is one dataset row with full activities + lobbyists + government-contacts arrays.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
