# FARA Foreign Agents Scraper (`maximedupre/fara-filings`) Actor

Collect active FARA registrations from the DOJ public database for research and screening. Get registrant names, registration numbers, and available addresses, dates, foreign principals, and document links.

- **URL**: https://apify.com/maximedupre/fara-filings.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $17.10 / 1,000 registrations

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

### 🔎 Review active FARA registrations from the DOJ

For journalists, researchers, and screening teams, FARA Foreign Agents Scraper collects active registrations from the official DOJ public database. Get registrant names and registration numbers, plus available addresses, dates, foreign principals, and document links in one dataset for review and export.

- Find active registrants and their registration numbers with **[FARA Registration Search](https://apify.com/maximedupre/fara-filings/examples/fara-registration-search)**.
- Collect a **[FARA List](https://apify.com/maximedupre/fara-filings/examples/fara-list)** of active registrations for research.
- Review available links to **[FARA Documents](https://apify.com/maximedupre/fara-filings/examples/fara-documents)** tied to each registration.
- Review disclosed **[FARA Foreign Principals](https://apify.com/maximedupre/fara-filings/examples/fara-foreign-principals)** and their countries when available.
- Collect source-published **[FARA Registrant Addresses](https://apify.com/maximedupre/fara-filings/examples/fara-registrant-addresses)** for your review.

#### 📋 Registration details and document links

Each dataset row covers one active FARA registration. It includes the registrant name and official registration number. Postal addresses and registration dates appear when the DOJ provides them. Nested lists hold available foreign-principal names and countries, and document URLs with filing dates.

These are public source records for research and screening. The Actor does not make legal compliance decisions, track changes, or send alerts. It returns document links rather than downloading files or extracting their text.

#### ▶️ Collect active FARA registrations

1. Open the Actor's **Input** tab.
2. Add a foreign-principal country filter if you want a narrower set.
3. Set **Maximum records** for a smaller run, or leave it empty to collect all available matching records until the source is exhausted.
4. Click **Start**.
5. Open **Registration records** when the run ends to review or export the dataset.

You do not need to supply DOJ credentials. Each run uses one country filter and one record limit.

#### ⚙️ Input

Both fields are optional.

| Field | Type | What it does |
| --- | --- | --- |
| `country` | string | Keeps records whose foreign-principal country contains this text. Matching ignores upper and lower case. For example, `United` matches `United Kingdom` and `United States`. Leave empty to include all countries. |
| `maxItems` | integer | Stops after this many matching registration records. The smallest value is 1, and the form starts with 10. Leave empty to return all available matching records until the source is exhausted. There is no fixed upper limit in the input schema. |

**Example input**

This is the public input from the successful default-input run:

```json
{
  "maxItems": 10
}
```

#### 🧾 Output

The run output has a `records` link to the dataset's **Active registrations** view. Each saved registration uses the same row shape. Optional fields may be absent, and `foreignPrincipals` or `documents` may be empty when no details are available.

| Field | Type | What it does |
| --- | --- | --- |
| `registrationNumber` | string | Official DOJ registration number used to identify the registration. |
| `registrantName` | string | Registrant name published by the DOJ. |
| `address` | string | Registrant postal address, when available. |
| `registrationDate` | string | Registration date as published by the DOJ, when available. |
| `foreignPrincipals` | object\[] | Disclosed foreign principals for this registration. May be empty. |
| `foreignPrincipals[].name` | string | Name of the foreign principal. |
| `foreignPrincipals[].country` | string | Foreign-principal country, when available. |
| `documents` | object\[] | Links to official documents tied to this registration. May be empty. |
| `documents[].url` | string | Official source URL for the document. |
| `documents[].filingDate` | string | Document filing date as published by the DOJ, when available. |

**Example registration**

This complete row comes from a successful run of the current beta build. Source names, dates, and links are kept as returned.

```json
{
  "registrationNumber": "7762",
  "registrantName": "Poynton, Aaron",
  "address": "1408 Stockton Road, Joppa, MD, 21085",
  "registrationDate": "08/26/2026",
  "foreignPrincipals": [
    {
      "name": "PATRICE MAJONDO-MWAMBA",
      "country": "CONGO DEMOCRATIC REPUBLIC OF THE"
    }
  ],
  "documents": [
    {
      "url": "https://efile.fara.gov/docs/7762-Exhibit-AB-20260826-7.pdf",
      "filingDate": "2026-08-26T00:00:00"
    },
    {
      "url": "https://efile.fara.gov/docs/7762-Registration-Statement-20260826-1.pdf",
      "filingDate": "2026-08-26T00:00:00"
    }
  ]
}
```

#### 💳 Pricing

You pay per active FARA registration saved to your dataset. A registration can include several foreign principals or document links; the charge is for the registration, not each nested entry. No registration event is charged when no registration is saved.

Check the Actor's current pricing for your Apify plan. Set `maxItems` to limit the number of matching registrations collected.

#### 🔌 Integrations

Read the saved dataset through the Apify API, or export it from Apify for your research tools and spreadsheets. This video shows an Apify integration workflow:

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Why did my country filter return no records?

The filter looks for your text within the foreign-principal country. It ignores upper and lower case, but it does not turn country codes or other names into matches. Try the source's country name, or leave `country` empty to include all countries.

##### Why are some details or document links missing?

The Actor returns details available in the public source. An optional field may be absent, and a list may be empty. A missing value is not proof that no principal or document exists.

##### Does a FARA filings search include past or terminated registrations?

No. This Actor collects the current active registration set. It does not collect historical or terminated registrations.

##### Can I filter by a registrant's name?

The input form has a foreign-principal country filter. To find a registrant by name, collect the active records and search `registrantName` in the saved dataset.

##### Does the Actor download or read FARA documents?

It returns official document URLs and available filing dates. It does not download, mirror, or extract document content.

##### Can I collect all available active registrations?

Yes. Leave `maxItems` empty to return all available matching records until the source is exhausted. Also leave `country` empty to include all countries.

##### What is FARA registration data useful for?

FARA stands for the Foreign Agents Registration Act. This Actor returns active registration records from the DOJ public database for foreign-agent research and screening. The records do not decide whether a person or organization meets a legal duty.

### 📝 Changelog

**v0.0** (04-10-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~fara-filings/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [FEC Campaign Finance Scraper](https://apify.com/maximedupre/fec-campaign-finance-scraper): Research campaign contributions and spending alongside foreign-agent disclosures.
- [Sanctions & Watchlist Screening — Risk-Scored Decisions](https://apify.com/maximedupre/sanctions-screening): Screen people or organizations against sanctions lists as a separate review step.
- [SAM.gov Exclusions](https://apify.com/maximedupre/sam-gov-exclusions): Check vendors against federal exclusion records during due diligence.
- [CourtListener Scraper](https://apify.com/maximedupre/courtlistener): Search public case law and federal dockets for further research on a person or organization.
- [LDA Lobbying Disclosure Scraper](https://apify.com/nexgendata/lda-lobbying-disclosure-scraper): Collect federal lobbying disclosures with clients, lobbyists, issues, and spending data.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `country` (type: `string`):

Keep records whose foreign-principal country contains this text. Matching ignores upper and lower case. For example, United matches United Kingdom and United States. Leave blank to include all countries.

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

Stop after collecting this many matching registration records. Leave blank to collect all available matching records until the source is exhausted.

## Actor input object example

```json
{
  "maxItems": 10
}
```

# Actor output Schema

## `records` (type: `string`):

View and export the collected active registration records.

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/fara-filings").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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/fara-filings").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 '{
  "maxItems": 10
}' |
apify call maximedupre/fara-filings --silent --output-dataset

```

## MCP server setup

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

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/bSHpXFGDocFlBOu7Y/builds/cTFeFuSlTtyUuPzjJ/openapi.json
