# US Lobbying Disclosure Scraper - Lobbyists, Clients & Leads (`scrapesage/us-lobbying-disclosure-scraper`) Actor

Scrape the official US Senate Lobbying Disclosure (LDA) database: filings with the lobbying firm, client, lobbyists, issues, agencies lobbied and reported $ — plus lobbying-firm leads (contact, phone, address), client company leads, lobbyists and contributions. Lead score + monitor mode.

- **URL**: https://apify.com/scrapesage/us-lobbying-disclosure-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$7.00 / 1,000 lobbying disclosure records

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## US Lobbying Disclosure Scraper — Lobbyists, Clients, Filings & Leads (Senate LDA)

Extract **complete US federal lobbying data** straight from the official **[Senate Lobbying Disclosure Act (LDA) database](https://lda.senate.gov/)** — every **lobbying filing** with the **registrant (lobbying firm)**, the **client paying for the lobbying**, the **named lobbyists**, the **issue areas**, the **government agencies lobbied** and the **reported income/expenses** — plus ready-to-use **B2B lead lists** of lobbying firms (with contact name, phone and address), client companies, individual lobbyists, and reported **political contributions**.

No login, no cookies, no browser — fast, reliable JSON extraction with a **0–100 lead score** on every record and a built-in **monitor mode** to pull only new filings.

### Why this lobbying scraper?

Most "lobbying disclosure" scrapers return a thin search result — a registrant name and a filing date. This actor reads the LDA API directly and ships the **richest dataset in the category**: it joins the firm, the client, the lobbyists (including their former government positions), the specific issues and agencies, and the dollar amounts into one dense record — and it exposes the **registrant, client, lobbyist and contributions** entities as their own clean lead lists.

| Data | Typical LDA scrapers | This actor |
|---|---|---|
| Lobbying **firm + client + lobbyists** in one row | partial | ✅ |
| Reported **income / expenses** ($) | ❌ | ✅ |
| **Issue areas** + **government entities lobbied** | ❌ | ✅ |
| Lobbyists' **former government positions** (revolving-door intel) | ❌ | ✅ |
| Firm **contact name + phone + full address** (lead data) | ❌ | ✅ |
| **Client (company) lead** list — who is spending on lobbying | ❌ | ✅ |
| **Foreign-interest** flag + foreign entities | ❌ | ✅ |
| Political **contributions** (LD-203) with PACs & amounts | rarely | ✅ |
| **Lead score** (0–100) on every record | ❌ | ✅ |
| **Monitor mode** — only new / changed filings | ❌ | ✅ |
| API key required | sometimes | ❌ keyless (optional key for speed) |

### Use cases

- **B2B lead generation** — lobbying firms and the companies/associations that hire them are high-budget buyers. Export them with contact, phone, address, issues and spend, then feed your CRM or outreach. Perfect prospect lists for **government-affairs SaaS, compliance, legal, PR, CRM and data vendors**.
- **Influence & policy intelligence** — see exactly who is lobbying on a given issue (health, tax, defense, energy, AI/tech…) and which agencies and chambers they target.
- **Compliance, AML & due diligence** — surface **foreign-interest** lobbying, conviction disclosures and revolving-door hires for KYC/risk screening.
- **Competitive & market research** — track a competitor's lobbying spend, firms, lobbyists and issue mix over time.
- **Journalism & watchdog research** — follow the money: registrants, clients, lobbyists, issues and political contributions, all in one structured feed.
- **Sales & account targeting** — find which lobbying firms represent which clients, and which clients spend the most — then prioritize accounts by reported spend.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **US Lobbying Disclosure Scraper**, pick **What to scrape** (Filings by default), and add any filters — year, client/firm name, state, issue area, government entity, minimum spend, or *posted after* for fresh filings.
3. Click **Start** and watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "searchType": "filings",
    "filingYear": 2024,
    "issueAreaCodes": ["DEF", "TAX"],
    "minReportedSpend": 100000,
    "sortBy": "spendHigh",
    "maxResults": 500
}
````

- **searchType** *(default `filings`)* — `filings` (firm + client + lobbyists + issues + $; the richest), `registrants` (lobbying-firm leads), `clients` (company leads that hire lobbyists), `lobbyists` (individual people), or `contributions` (reported political contributions).
- **filingYear / filingPeriod / filingTypes** — narrow filings/contributions by year, reporting period, and type (e.g. `RR` registration, `Q1`–`Q4` reports).
- **registrantName / clientName / lobbyistName** — text search on the firm, the client, or a lobbyist (server-side, fast).
- **states / countries** — 2-letter codes; matches the client or registrant location. Combine **countries** with **foreignOnly** to surface foreign-funded lobbying.
- **issueAreaCodes** — keep filings that lobbied on specific issues (e.g. `HCR` health, `TAX`, `DEF` defense, `TRD` trade, `ENG` energy, `FIN` finance). See the full code list below.
- **governmentEntityContains** — keep filings that lobbied a given agency/chamber (e.g. `senate`, `FDA`, `defense`).
- **postedAfter** — ISO date; only filings/contributions posted after it (great for fresh-filing feeds).
- **minReportedSpend / registrationsOnly / foreignOnly / withPhoneOnly / minLeadScore** — quality and intent filters.
- **sortBy** *(default `leadScore`)* — `leadScore`, `spendHigh`, `recent`, or `name`.
- **maxResults** *(default 500)* — cap on returned records.
- **monitorMode / monitorKey** — only return records new or changed since the last run (see below).
- **apiKey** *(optional)* — a free [LDA API key](https://lda.senate.gov/api/register/) raises rate limits for very large pulls. Not required.
- **proxyConfiguration** — Apify Proxy (datacenter) is on by default and IPs are rotated to spread requests across the API's rate limit.

#### Issue-area codes (most common)

`ACC` Accounting · `ADV` Advertising · `AER` Aerospace · `AGR` Agriculture · `AUT` Automotive · `AVI` Aviation · `BAN` Banking · `BUD` Budget/Appropriations · `CAW` Clean Air & Water · `CHM` Chemicals · `CIV` Civil Rights · `CPI` Copyright/Patent/Trademark · `CPT` Computer Industry · `DEF` Defense · `DOC` District of Columbia · `EDU` Education · `ENG` Energy/Nuclear · `ENV` Environment · `FAM` Family Issues · `FIN` Financial Institutions · `FOO` Food Industry · `FOR` Foreign Relations · `GAM` Gaming/Gambling · `HCR` Health Issues · `HOM` Homeland Security · `HOU` Housing · `IMM` Immigration · `INS` Insurance · `LBR` Labor/Antitrust · `MED` Medical/Disease Research · `MMM` Media · `NAT` Natural Resources · `PHA` Pharmacy · `RRR` Railroads · `SCI` Science/Technology · `TAX` Taxation · `TEC` Telecommunications · `TOB` Tobacco · `TOR` Torts · `TRA` Transportation · `TRD` Trade · `TRU` Trucking · `UTI` Utilities · `VET` Veterans.

### Output

By default you get **one dense table of lobbying filings** — each row joins the firm, client, lobbyists, issues, agencies and dollars. Switch `searchType` for clean **registrant**, **client**, **lobbyist** or **contribution** lead tables. Use the **Leads**, **Lobbying activity** and **Contacts** dataset views to refocus the same data.

A filing record (`recordType: "filing"`):

```json
{
    "recordType": "filing",
    "primaryName": "Google Client Services LLC",
    "filingType": "Q1",
    "filingTypeDisplay": "1st Quarter - Report",
    "filingYear": 2024,
    "isRegistration": false,
    "datePosted": "2024-04-22T15:31:43-04:00",
    "filingUrl": "https://lda.senate.gov/filings/public/filing/.../print/",
    "registrantName": "Google Client Services LLC",
    "registrantContactName": "Anne Wall",
    "registrantPhone": "(415) 903-2800",
    "fullAddress": "25 Massachusetts Avenue, NW, Washington, DC, 20001",
    "clientName": "Google Client Services LLC",
    "clientState": "DC",
    "isSelfFiler": true,
    "lobbyists": ["Frannie Lasala", "Edward An", "Anne Wall"],
    "lobbyistCount": 6,
    "coveredPositions": ["Deputy Assistant to the President for Legislative Affairs, The White House"],
    "issueAreaCodes": ["ADV", "CPI", "TAX"],
    "issueAreas": ["Advertising", "Copyright/Patent/Trademark", "Taxation"],
    "governmentEntities": ["SENATE", "HOUSE OF REPRESENTATIVES", "White House Office"],
    "income": null,
    "expenses": 3080000,
    "reportedSpend": 3080000,
    "spendType": "expenses",
    "isForeign": false,
    "state": "DC",
    "leadScore": 80,
    "leadSignals": ["Big spender — $3,080,000", "6 lobbyists", "Former government official lobbyist"]
}
```

A **registrant** record adds firm `description`, `houseRegistrantId` and `dtUpdated`; a **client** record adds `generalDescription`, `effectiveDate`, `isGovernmentEntity` and the firm representing it; a **lobbyist** record carries the person's name, prefix/suffix and their registrant; a **contribution** record carries `contributionItems`, `pacs`, `totalContributions` and the filer's contact + address. With `includeRawFields` on (default) every record also includes the full raw LDA object under `sourceFields`.

#### What to expect (field coverage)

LDA data is filer-entered, so a few fields are populated only when the filer provided them. Verified across thousands of filings:

| Field | Coverage |
|---|---|
| Registrant name, client name, filing type/year/period | ✅ ~100% |
| Issue areas, government entities, lobbyists | ✅ ~98% of reports |
| Registrant contact name | ✅ ~95% |
| Registrant phone & address | ✅ ~90% |
| Reported income/expenses ($) | ✅ on quarterly reports; registrations carry no amount |
| Lobbyists' former government positions | ✅ when disclosed |
| Foreign entities / contributions items | ✅ when present (blank otherwise) |

A blank field means the filer didn't report it — never that scraping failed. Nothing is dropped, so you always get the richest record available.

### Monitor mode — only new filings

Turn on **monitorMode** and the actor remembers every record it has emitted (in a named key-value store) and returns **only new or changed records** on the next run — ideal for a fresh-filings feed into your CRM or Slack.

This is **independent of and complementary to [Apify Schedules](https://docs.apify.com/platform/schedules)**: a Schedule decides *when* the actor runs (e.g. every morning); monitor mode decides *which* records come back (only the new ones). Use a distinct `monitorKey` per saved search so they keep separate memory. You can also use **postedAfter** for a stateless date-based feed.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly to capture new filings as they post.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/us-lobbying-disclosure-scraper').call({
    searchType: 'filings',
    filingYear: 2024,
    issueAreaCodes: ['HCR'],
    minReportedSpend: 100000,
    sortBy: 'spendHigh',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} lobbying filings`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new lobbying leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search adds new filings.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "list the top 50 lobbying spenders on healthcare in 2024 with their firms and lobbyists" and let it run the scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **government, political-money & B2B-intelligence stack**:

- **[FEC Campaign Finance Scraper](https://apify.com/scrapesage/fec-campaign-finance-scraper)** — donors, PACs, committees & candidate fundraising.
- **[USASpending Scraper](https://apify.com/scrapesage/usaspending-scraper)** — federal contract & grant award recipients.
- **[SAM.gov Scraper](https://apify.com/scrapesage/sam-gov-scraper)** — federal contractor registrations & opportunities.
- **[US Federal Grants Scraper](https://apify.com/scrapesage/us-federal-grants-scraper)** — grant opportunities & funding leads.
- **[GSA eLibrary Scraper](https://apify.com/scrapesage/gsa-elibrary-scraper)** — GSA Schedule contractors & contract vehicles.
- **[SBIR & STTR Award Leads Scraper](https://apify.com/scrapesage/sbir-sttr-award-leads-scraper)** — federal R\&D award recipients with PI contacts.
- **[SEC Form D Funding Scraper](https://apify.com/scrapesage/sec-form-d-funding-scraper)** — private-placement & startup-funding leads.
- **[Nonprofit 990 Scraper](https://apify.com/scrapesage/nonprofit-990-scraper)** — nonprofits, officers & financials.
- **[Customs Broker & Freight Forwarder Leads Scraper](https://apify.com/scrapesage/customs-broker-forwarder-leads)** — licensed trade-intermediary B2B leads.

### Tips

- **Start with `filings`** — it's the richest table (firm + client + lobbyists + issues + agencies + $). Switch to `registrants`/`clients` when you want a clean, deduplicated lead list of just the firms or the companies.
- **Target big spenders**: set `minReportedSpend` and `sortBy: "spendHigh"`. Reported $ is ranked across the records scanned in the run — narrow by year/issue and raise `maxResults` (or add an API key) to scan deeper.
- **Fresh-engagement leads**: set `registrationsOnly: true` to catch a firm newly taking on a client.
- **Issue targeting**: combine `issueAreaCodes` with `governmentEntityContains` to find, say, everyone lobbying the FDA on health issues.
- **Big pulls**: add a free [LDA API key](https://lda.senate.gov/api/register/) for higher rate limits; without one the actor rotates proxy IPs and backs off automatically.

### FAQ

**Where does the data come from?** The official US Senate Lobbying Disclosure Act database API (`lda.senate.gov/api`), which publishes registrations and quarterly activity reports filed under the LDA, plus LD-203 contribution reports.

**Does it need an API key or login?** No. The actor is keyless and rotates proxy IPs to respect the API's rate limit. An optional free LDA API key simply raises the limit for very large pulls.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I get only new filings each day?** Turn on **monitorMode** (optionally with a `monitorKey`) and create a daily [Schedule](https://docs.apify.com/platform/schedules) — you'll get only filings new since the previous run. Or use `postedAfter` for a stateless date cutoff.

**What's the difference between a registrant and a client?** The **registrant** is the lobbying firm (or an in-house lobbying organization) that files; the **client** is the company, association or government that the lobbying is done *for*. When a company lobbies for itself the two match and `isSelfFiler` is true.

**A field is empty — why?** Some filers don't report a phone, some registrations carry no dollar amount, and some reports list no contributions. Fields are blank only when the filer didn't disclose them — never because the scraper skipped them.

**Is this legal?** This actor collects publicly available government disclosure data. You're responsible for using it in compliance with applicable laws and the Senate LDA terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `searchType` (type: `string`):

Which part of the Senate LDA database to pull. <b>Filings</b> (default) is the richest: each filing joins the lobbying firm, the client (who is paying), the named lobbyists, the issue areas, the government entities lobbied and the reported income/expenses. <b>Registrants</b> = lobbying-firm leads (with contact + phone + address). <b>Clients</b> = company / organization leads that hire lobbyists. <b>Lobbyists</b> = individual lobbyist people. <b>Contributions</b> = political contributions reported by lobbyists / registrants.

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

Filing year to pull (e.g. 2024). Applies to Filings and Contributions. Leave empty for the most recent filings across all years (sorted newest-first).

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

Optional reporting period (Filings / Contributions only).

## `filingTypes` (type: `array`):

Optional list of LDA filing-type codes to keep (Filings only). Common: <code>RR</code> registration, <code>Q1</code>/<code>Q2</code>/<code>Q3</code>/<code>Q4</code> quarterly reports, <code>RA</code> registration amendment. Leave empty for all.

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

Optional — only filings / registrants whose registrant (lobbying firm) name matches this text (e.g. <code>akin gump</code>, <code>brownstein</code>).

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

Optional — only filings / clients whose client (the company / organization paying for lobbying) name matches this text (e.g. <code>google</code>, <code>pharma</code>).

## `lobbyistName` (type: `string`):

Optional — only records mentioning a lobbyist whose name matches this text (e.g. <code>smith</code>).

## `states` (type: `array`):

Optional list of 2-letter US state codes (e.g. <code>DC</code>, <code>CA</code>, <code>NY</code>). Matches the client or registrant state on filings, or the entity state on registrants / clients / lobbyists / contributions.

## `countries` (type: `array`):

Optional list of 2-letter country codes (e.g. <code>US</code>, <code>JP</code>, <code>GB</code>). Matches the client or registrant country. Combine with <b>Foreign interests only</b> to surface foreign-funded lobbying.

## `issueAreaCodes` (type: `array`):

Optional list of 3-letter LDA general issue-area codes to keep (matched against each filing's lobbying activities). Examples: <code>HCR</code> Health Issues, <code>TAX</code> Taxation, <code>DEF</code> Defense, <code>TRD</code> Trade, <code>ENG</code> Energy/Nuclear, <code>FIN</code> Finance, <code>TEC</code> Science/Technology, <code>IMM</code> Immigration, <code>BUD</code> Budget/Appropriations. See the README for the full list.

## `governmentEntityContains` (type: `string`):

Optional — keep only filings that lobbied a government entity whose name matches this text (e.g. <code>senate</code>, <code>FDA</code>, <code>defense</code>, <code>EPA</code>).

## `postedAfter` (type: `string`):

Optional ISO date (e.g. <code>2024-06-01</code>). Keep only filings / contributions posted after this date — ideal for pulling fresh filings. Maps to the LDA <code>filing\_dt\_posted\_after</code> filter.

## `minReportedSpend` (type: `integer`):

Optional — keep only filings whose reported lobbying income (firm) or expenses (in-house) is at least this many US dollars. Great for targeting big spenders.

## `registrationsOnly` (type: `boolean`):

Keep only new registration filings (filing type RR) — i.e. a lobbying firm newly taking on a client, the freshest engagement signal.

## `foreignOnly` (type: `boolean`):

Keep only records tied to a non-US client / registrant or that list a foreign entity — useful for foreign-influence and compliance research.

## `withPhoneOnly` (type: `boolean`):

Keep only records that have a contact phone number.

## `nameQuery` (type: `string`):

Optional generic text match across the registrant, client and lobbyist names of a record.

## `minLeadScore` (type: `integer`):

Keep only records with a derived lead score (0-100) at or above this value.

## `maxResults` (type: `integer`):

Maximum number of records to return (after filtering). Each emitted record is one paid result.

## `sortBy` (type: `string`):

How to rank the returned records.

## `deduplicateResults` (type: `boolean`):

Drop duplicate records (same filing / entity id) within a run.

## `includeRawFields` (type: `boolean`):

Attach the raw LDA API object to every record under <code>sourceFields</code> for maximum data fidelity.

## `monitorMode` (type: `boolean`):

Remember records emitted on previous runs (in a key-value store) and only output records that are new or have changed since last time. Perfect with a Schedule for a fresh-filings feed. This is independent of (and complementary to) Apify Schedules — Schedules decide WHEN the actor runs; monitor mode decides WHICH records are returned.

## `monitorKey` (type: `string`):

Name for the monitor state store, so different searches keep separate memory (e.g. <code>pharma-clients</code>). Defaults to <code>default</code>.

## `apiKey` (type: `string`):

Optional free Senate LDA API key for much higher rate limits. Register at https://lda.senate.gov/api/register/ and paste the key here. Without a key the actor still works (it rotates proxy IPs and backs off on rate limits), just more slowly for very large pulls.

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

Proxy settings. Apify Proxy (datacenter) is used by default and IPs are rotated to spread requests across the LDA API rate limit.

## Actor input object example

```json
{
  "searchType": "filings",
  "filingYear": 2024,
  "filingPeriod": "",
  "filingTypes": [],
  "states": [],
  "countries": [],
  "issueAreaCodes": [],
  "registrationsOnly": false,
  "foreignOnly": false,
  "withPhoneOnly": false,
  "maxResults": 500,
  "sortBy": "leadScore",
  "deduplicateResults": true,
  "includeRawFields": true,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped lobbying-disclosure records in the default dataset (filings, registrant firms, clients, lobbyists or contributions), each with firmographics, contacts, issues, reported spend and a lead score.

# 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,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/us-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,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/us-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,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapesage/us-lobbying-disclosure-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "US Lobbying Disclosure Scraper - Lobbyists, Clients & Leads",
        "description": "Scrape the official US Senate Lobbying Disclosure (LDA) database: filings with the lobbying firm, client, lobbyists, issues, agencies lobbied and reported $ — plus lobbying-firm leads (contact, phone, address), client company leads, lobbyists and contributions. Lead score + monitor mode.",
        "version": "0.1",
        "x-build-id": "2TI94Dop1CaBrVujd"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~us-lobbying-disclosure-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-us-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/scrapesage~us-lobbying-disclosure-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-us-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/scrapesage~us-lobbying-disclosure-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-us-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",
                "properties": {
                    "searchType": {
                        "title": "What to scrape",
                        "enum": [
                            "filings",
                            "registrants",
                            "clients",
                            "lobbyists",
                            "contributions"
                        ],
                        "type": "string",
                        "description": "Which part of the Senate LDA database to pull. <b>Filings</b> (default) is the richest: each filing joins the lobbying firm, the client (who is paying), the named lobbyists, the issue areas, the government entities lobbied and the reported income/expenses. <b>Registrants</b> = lobbying-firm leads (with contact + phone + address). <b>Clients</b> = company / organization leads that hire lobbyists. <b>Lobbyists</b> = individual lobbyist people. <b>Contributions</b> = political contributions reported by lobbyists / registrants.",
                        "default": "filings"
                    },
                    "filingYear": {
                        "title": "Filing year",
                        "minimum": 1999,
                        "maximum": 2100,
                        "type": "integer",
                        "description": "Filing year to pull (e.g. 2024). Applies to Filings and Contributions. Leave empty for the most recent filings across all years (sorted newest-first)."
                    },
                    "filingPeriod": {
                        "title": "Filing period",
                        "enum": [
                            "",
                            "first_quarter",
                            "second_quarter",
                            "third_quarter",
                            "fourth_quarter",
                            "year_end",
                            "mid_year"
                        ],
                        "type": "string",
                        "description": "Optional reporting period (Filings / Contributions only).",
                        "default": ""
                    },
                    "filingTypes": {
                        "title": "Filing types",
                        "type": "array",
                        "description": "Optional list of LDA filing-type codes to keep (Filings only). Common: <code>RR</code> registration, <code>Q1</code>/<code>Q2</code>/<code>Q3</code>/<code>Q4</code> quarterly reports, <code>RA</code> registration amendment. Leave empty for all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "registrantName": {
                        "title": "Lobbying firm (registrant) name contains",
                        "type": "string",
                        "description": "Optional — only filings / registrants whose registrant (lobbying firm) name matches this text (e.g. <code>akin gump</code>, <code>brownstein</code>)."
                    },
                    "clientName": {
                        "title": "Client name contains",
                        "type": "string",
                        "description": "Optional — only filings / clients whose client (the company / organization paying for lobbying) name matches this text (e.g. <code>google</code>, <code>pharma</code>)."
                    },
                    "lobbyistName": {
                        "title": "Lobbyist name contains",
                        "type": "string",
                        "description": "Optional — only records mentioning a lobbyist whose name matches this text (e.g. <code>smith</code>)."
                    },
                    "states": {
                        "title": "States",
                        "type": "array",
                        "description": "Optional list of 2-letter US state codes (e.g. <code>DC</code>, <code>CA</code>, <code>NY</code>). Matches the client or registrant state on filings, or the entity state on registrants / clients / lobbyists / contributions.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "countries": {
                        "title": "Countries",
                        "type": "array",
                        "description": "Optional list of 2-letter country codes (e.g. <code>US</code>, <code>JP</code>, <code>GB</code>). Matches the client or registrant country. Combine with <b>Foreign interests only</b> to surface foreign-funded lobbying.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "issueAreaCodes": {
                        "title": "Issue areas (Filings only)",
                        "type": "array",
                        "description": "Optional list of 3-letter LDA general issue-area codes to keep (matched against each filing's lobbying activities). Examples: <code>HCR</code> Health Issues, <code>TAX</code> Taxation, <code>DEF</code> Defense, <code>TRD</code> Trade, <code>ENG</code> Energy/Nuclear, <code>FIN</code> Finance, <code>TEC</code> Science/Technology, <code>IMM</code> Immigration, <code>BUD</code> Budget/Appropriations. See the README for the full list.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "governmentEntityContains": {
                        "title": "Government entity lobbied contains (Filings only)",
                        "type": "string",
                        "description": "Optional — keep only filings that lobbied a government entity whose name matches this text (e.g. <code>senate</code>, <code>FDA</code>, <code>defense</code>, <code>EPA</code>)."
                    },
                    "postedAfter": {
                        "title": "Posted after (date)",
                        "type": "string",
                        "description": "Optional ISO date (e.g. <code>2024-06-01</code>). Keep only filings / contributions posted after this date — ideal for pulling fresh filings. Maps to the LDA <code>filing_dt_posted_after</code> filter."
                    },
                    "minReportedSpend": {
                        "title": "Minimum reported $ (Filings only)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional — keep only filings whose reported lobbying income (firm) or expenses (in-house) is at least this many US dollars. Great for targeting big spenders."
                    },
                    "registrationsOnly": {
                        "title": "New registrations only (Filings only)",
                        "type": "boolean",
                        "description": "Keep only new registration filings (filing type RR) — i.e. a lobbying firm newly taking on a client, the freshest engagement signal.",
                        "default": false
                    },
                    "foreignOnly": {
                        "title": "Foreign interests only",
                        "type": "boolean",
                        "description": "Keep only records tied to a non-US client / registrant or that list a foreign entity — useful for foreign-influence and compliance research.",
                        "default": false
                    },
                    "withPhoneOnly": {
                        "title": "With phone number only",
                        "type": "boolean",
                        "description": "Keep only records that have a contact phone number.",
                        "default": false
                    },
                    "nameQuery": {
                        "title": "Name contains (any)",
                        "type": "string",
                        "description": "Optional generic text match across the registrant, client and lobbyist names of a record."
                    },
                    "minLeadScore": {
                        "title": "Minimum lead score",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Keep only records with a derived lead score (0-100) at or above this value."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of records to return (after filtering). Each emitted record is one paid result.",
                        "default": 500
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "leadScore",
                            "spendHigh",
                            "recent",
                            "name"
                        ],
                        "type": "string",
                        "description": "How to rank the returned records.",
                        "default": "leadScore"
                    },
                    "deduplicateResults": {
                        "title": "Deduplicate results",
                        "type": "boolean",
                        "description": "Drop duplicate records (same filing / entity id) within a run.",
                        "default": true
                    },
                    "includeRawFields": {
                        "title": "Include raw source fields",
                        "type": "boolean",
                        "description": "Attach the raw LDA API object to every record under <code>sourceFields</code> for maximum data fidelity.",
                        "default": true
                    },
                    "monitorMode": {
                        "title": "Monitor mode (only new / changed)",
                        "type": "boolean",
                        "description": "Remember records emitted on previous runs (in a key-value store) and only output records that are new or have changed since last time. Perfect with a Schedule for a fresh-filings feed. This is independent of (and complementary to) Apify Schedules — Schedules decide WHEN the actor runs; monitor mode decides WHICH records are returned.",
                        "default": false
                    },
                    "monitorKey": {
                        "title": "Monitor key",
                        "type": "string",
                        "description": "Name for the monitor state store, so different searches keep separate memory (e.g. <code>pharma-clients</code>). Defaults to <code>default</code>."
                    },
                    "apiKey": {
                        "title": "LDA API key (optional)",
                        "type": "string",
                        "description": "Optional free Senate LDA API key for much higher rate limits. Register at https://lda.senate.gov/api/register/ and paste the key here. Without a key the actor still works (it rotates proxy IPs and backs off on rate limits), just more slowly for very large pulls."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Apify Proxy (datacenter) is used by default and IPs are rotated to spread requests across the LDA API rate limit.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
