# Federal Lobbying Disclosures & Foreign Agent Registrations (`lepidata/lobbying-disclosures`) Actor

Export federal lobbying registrations and quarterly reports (client, firm, income or expenses, issue codes, specific issues, agencies lobbied) and foreign agent registrations with their foreign principals and countries, from US government public data. Unofficial.

- **URL**: https://apify.com/lepidata/lobbying-disclosures.md
- **Developed by:** [Lepi Data](https://apify.com/lepidata) (community)
- **Categories:** Business, News
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 filing or registration records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Federal Lobbying Disclosures & Foreign Agent Registrations

*Unofficial tool. Not affiliated with, endorsed by, or sponsored by the U.S. Senate, the U.S. House of Representatives, the U.S. Department of Justice, or any government agency. No government seals or logos are used.*

Export federal lobbying registrations and quarterly activity reports, and foreign agent registrations with the foreign governments, parties and companies they represent. It's for government-affairs and public-policy teams, ESG and compliance analysts, journalists, researchers and govtech developers.

**Input (filings):** client or lobbying-firm names, words in the specific issues (a bill number works), filing years, period, filing type, client state, minimum reported amount, posted-date range.

**Input (foreign agents):** registrant or foreign principal name words, countries represented, registration numbers, active or terminated.

**Output (filings):** one row per filing: type, year, period, posted date, income (outside firms) or expenses (self-filers) as filed, registrant, client, issue area codes, a derived count of lobbyists listed, foreign entities, affiliated organisations and the official document link. With `includeActivities`: issue areas, specific issues and the government entities lobbied.

**Output (foreign agents):** one row per registration: number, registrant name, registration and termination dates, status, organisation or individual, city and state (organisations only), and every foreign principal with country and dates.

Senate Office of Public Records cannot vouch for the data or analyses derived from these data after the data have been retrieved from LDA.gov.

**Confirm on the official disclosure sites** before relying on a record. Each row carries `retrieved_at`. Filed values are passed through as filed; fields ending in `_derived` are computed by this tool.

### Input

- `mode`: `filings` (default) or `foreign_agents`
- Filings: `clients`, `registrants` (up to 20 each), `issueText`, `years` (up to 5), `period`, `filingType`, `clientState`, `minAmountUsd`, `postedAfter`, `postedBefore`, `includeActivities`, `sortBy` (`newest` or `default`)
- Foreign agents: `nameContains`, `countries`, `registrationNumbers`, `status` (`active` default, `terminated`, `any`)
- `maxResults` (filings up to 7,500 per run)

### Output fields

`type`, `filing_uuid`, `filing_type`, `filing_type_display`, `filing_year`, `filing_period`, `posted_at`, `income_usd`, `expenses_usd`, `termination_date`, `registrant`, `client`, `issue_codes`, `lobbyist_count_derived`, `activities`, `foreign_entities`, `affiliated_organizations`, `document_url`, `registration_number`, `registrant_name`, `business_name`, `registration_date`, `active`, `registrant_type`, `city`, `state`, `foreign_principals`, `retrieved_at`, `lda_citation`, `confirm_at`

**Privacy.** Organisation-level data. No lobbyist names or covered positions, no filer or contact names, phone numbers, street addresses or ZIP codes, no political contribution reports and no search by person. Self-filing individual registrants in lobbying filings have their name withheld (`registrant.name` is null, `registrant.individual` is true, the id is kept), and the `registrants` filter never returns them. A foreign agent registrant counts as an organisation only when its name carries an entity marker (LLC, Inc., P.A., Ltd. and similar); all others are treated as individuals, with city and state withheld, and `nameContains` never matches them. The short-form (individual agents) file is never read. Free-text fields have email addresses and phone numbers removed. You are responsible for your own CAN-SPAM, TCPA and do-not-call compliance when contacting anyone found here.

**Opt-out.** Removal requests: support@lepidata.com (handled within 30 days).
Send the registrant id or registration number; removed records are dropped from every run.

Free status rows (not charged): `no-results`, `invalid-input`, `source-error`, `free-plan-limit`, `charge-limit-reached`.

**Example:** `{"mode":"filings","issueText":"H.R. 5256","years":["2025"],"includeActivities":true,"maxResults":200}`

### Not legal advice

Not legal advice. A filing shows what was reported, not a finding of wrongdoing.

### Data source and compliance

- Source credit: US government public data. Lobbying filings come from the public LDA.gov API (no key), one request every 4.5 seconds, at most 300 requests per run, a declared User-Agent with a contact address. Foreign agent data comes from the two public FARA bulk CSV files (2 downloads per run, 3 seconds apart).
- Unofficial data: confirm on the official disclosure sites.
- Free-plan accounts get up to 100 results per run.

**Pricing.** Pay per result: $0.10 per 1,000 records ($0.0001 each), the same price on every plan, no start fee. Free status rows are never charged.

# Actor input Schema

## `mode` (type: `string`):

Lobbying registrations and reports, or foreign agent registrations.

## `clients` (type: `array`):

Client organisation names, up to 20 (partial match by the source).

## `registrants` (type: `array`):

Lobbying firm or self-filing organisation names, up to 20 (filings by individual registrants are not returned for this filter).

## `issueText` (type: `string`):

Words in the filed specific lobbying issues, e.g. a bill number.

## `years` (type: `array`):

Up to 5, e.g. 2025.

## `period` (type: `string`):

Reporting period.

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

e.g. RR (registration), Q1-Q4 (quarterly report), 1A (amendment), 1T (termination).

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

2-letter US state.

## `minAmountUsd` (type: `integer`):

Minimum income or expenses reported.

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

YYYY-MM-DD.

## `postedBefore` (type: `string`):

YYYY-MM-DD.

## `includeActivities` (type: `boolean`):

Add issue areas, specific issues and government entities lobbied. Lobbyist names are never included.

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

newest = most recently posted first.

## `nameContains` (type: `array`):

Organisation registrant, business or foreign principal name words (individual registrants are never matched).

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

Country represented, as written in the source, e.g. JAPAN.

## `registrationNumbers` (type: `array`):

Registration numbers.

## `status` (type: `string`):

Registration status.

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

Paid rows cap for this run (filings: up to 7,500).

## Actor input object example

```json
{
  "mode": "filings",
  "clients": [
    "Pfizer"
  ],
  "years": [
    "2025"
  ],
  "period": "any",
  "includeActivities": false,
  "sortBy": "newest",
  "status": "active",
  "maxResults": 500
}
```

# Actor output Schema

## `items` (type: `string`):

All rows from this run.

# 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 = {
    "clients": [
        "Pfizer"
    ],
    "years": [
        "2025"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lepidata/lobbying-disclosures").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 = {
    "clients": ["Pfizer"],
    "years": ["2025"],
}

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

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

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

```

## CLI example

```bash
echo '{
  "clients": [
    "Pfizer"
  ],
  "years": [
    "2025"
  ]
}' |
apify call lepidata/lobbying-disclosures --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lepidata/lobbying-disclosures"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eXjoxBWUXLRNTnpRv/builds/lBzQMiEzHN7kKXrhH/openapi.json
