FARA Foreign Influence Intelligence & Monitoring is an Apify actor on ApifyForge. Monitor U.S. FARA foreign-agent activity, don't just search it. Scored registrant and foreign-principal profiles, diligence-routing decisions, foreign-principal influence replay, and cross-run change detection — what... It costs $0.04 per result-returned. Best for teams who need automated fara foreign influence intelligence & monitoring data extraction and analysis. Not ideal for use cases requiring real-time streaming data or sub-second latency. Maintenance pulse: 90/100. Last verified March 27, 2026. Built by Ryan Clinton (ryanclinton on Apify).

DEVELOPER TOOLSAUTOMATION

FARA Foreign Influence Intelligence & Monitoring

FARA Foreign Influence Intelligence & Monitoring is an Apify actor available on ApifyForge at $0.04 per result-returned. Monitor U.S. FARA foreign-agent activity, don't just search it. Scored registrant and foreign-principal profiles, diligence-routing decisions, foreign-principal influence replay, and cross-run change detection — what changed, who to watch, why now — from official DOJ data.

Best for teams who need automated fara foreign influence intelligence & monitoring data extraction and analysis.

Not ideal for use cases requiring real-time streaming data or sub-second latency.

Try on Apify Store
$0.04per event
Last verified: March 27, 2026
90
Actively maintained
Maintenance Pulse
$0.04
Per event

What to know

  • Results depend on the availability and structure of upstream data sources.
  • Large-scale runs may be subject to platform rate limits.
  • Requires an Apify account — free tier available with limited monthly usage.

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

result-returneds
Estimated cost:$4.00

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
result-returnedCharged per screening result returned.$0.04

Example: 100 events = $4.00 · 1,000 events = $40.00

Documentation

FARA Foreign Influence Intelligence — monitor foreign influence, don't just search it

The moat is memory, not records. Most FARA tools tell you what exists; this one accumulates what changed and tells you what deserves attention today. Point it at the U.S. Department of Justice FARA (Foreign Agents Registration Act) database, name a watchlist, and every scheduled run remembers the last — building a longitudinal picture of foreign-influence activity that a same-day clone of the public records can't reproduce. Each run hands back a ranked attention queue (what changed, why now), so you read the three things that moved, not the three hundred that didn't.

Search the FARA database for foreign agent registrations, then get each registrant scored for descriptive foreign-influence exposure with a diligence-routing recommendation. Look up lobbying firms, PR agencies, and consultants registered as foreign agents, including their foreign principals, filing documents, and registration status. Get structured profiles combining data from three separate FARA API endpoints into a single unified record per registrant.

FARA Foreign Agent Registration Search queries the official efile.fara.gov API to build comprehensive registrant profiles. Each profile includes the registrant's name, address, registration and termination dates, a list of foreign principals (the governments, entities, or persons they represent), links to all filing documents, and an exposure decision (tier, score, recommended action, jurisdiction-nexus flags). Name a watchlist to monitor the same set across runs and get told what changed. The actor handles the FARA API's strict rate limits (5 requests per 10 seconds) automatically with built-in throttling and retry logic.

FARA registration is a lawful, public disclosure regime. The exposure score is descriptive context for a diligence workflow (breadth of foreign principals, nexus to jurisdictions on published U.S. government lists, and how active the representation is) — it is not an allegation of wrongdoing, and the recommended action is diligence routing, never a prohibition.

Built for analysts, compliance teams, journalists, and policy researchers who need not just FARA records, but a structured feed of registrants, foreign principals, filing activity, and diligence-routing signals — with optional cross-run change detection so a scheduled run tells you what moved.

Most FARA tools answer "who is registered?" This one is built to answer the questions that come next: what changed, who to care about, and why now. Name a watchlist (or portfolio) and the actor accumulates memory across runs — it tracks each foreign principal's footprint over time (is the Government of Turkey expanding its U.S. representation?), each agent's momentum (which firms are winning foreign-representation business?), and the filing-activity velocity behind both. The longer you run it on a schedule, the more that accumulated history is worth — and a same-day clone of the public records can't reproduce it.

What do you need to do?

NeedWhat this actor does
Find every agent representing a countrycountry search
Monitor new foreign-influence activityname a watchlist / portfolio
Build compliance / diligence workflowsexposure tier + recommended action
Feed a SIEM / case systemstructured JSON + webhooks
Build an entity graphoutputEntity: relationships (Neo4j/Gephi/Maltego edges)
Analyse a foreign principal across all its agentsoutputEntity: principals
Track filing activity over timeoutputEntity: timeline

Why this over raw DOJ search?

CapabilityDOJ eFile siteBasic scraperThis actor
Unified registrant profilePartialPartialYes
Principal relationships (flat, graph-ready)ManualYesYes
Filing-document signalsManualNoYes
Cross-run change detectionNoRareYes
Foreign-influence exposure routingNoNoYes
Dashboard digestNoNoYes
API / webhook readyNoBasicYes

Why this is different

Most FARA tools tell you what exists. This one tells you what changed.

Most FARA tools give you records. This one accumulates memory.

Most FARA tools answer "Who represents Turkey?" This one answers "Is Turkey expanding its U.S. representation footprint?", with the per-run countHistory, representationTrend, and majorEvents to prove it.

The enduring entities are the foreign principals — the governments, embassies, state-owned enterprises, and sovereign funds that persist while their agents come and go. This actor tracks them longitudinally, so the value compounds the longer you run it on a schedule. That accumulated state is the part a competitor can't backfill after the fact.

Rows in, shortlist out — thousands of filings become the few that changed

Common monitoring tasks

TaskWhere the answer is
What deserves attention today?watchlist.attentionQueue (ranked, with whyNow + changeImportance)
Is a foreign principal expanding its U.S. representation?principalHistory (representationTrend, countHistory, majorEvents)
Which firms are winning foreign-representation business?agentMomentum (trend: expanding / contracting)
Which actors sit at the centre of the representation network?networkSignals + run-level mostRepresentedPrincipals
Is filing activity accelerating?filingSignals.velocityStatus + velocityChangePct
How does a country's representation look right now?countrySummary
Which counterparties should a reviewer look at first?recommendedAction + exposureTier

Attention queue — what deserves review today, ranked with the reason

Ready-to-run examples

One-click task pages, each preset for a common job (open, hit Run):

See all examples →

What data can you extract?

Data PointSourceExample
Registration numberFARA registry6942
Registrant nameRegistration recordPodesta Group, Inc.
Business nameRegistration recordPodesta Group
StatusRegistry lookupActive, Terminated
Registration dateFiling metadata01/15/2010
Termination dateFiling metadata06/30/2017
AddressRegistration record1001 G Street NW, Suite 1000 West
Foreign principalsPrincipals endpointName, country, state, registration date
Filing documentsDocuments endpointType, date, PDF download link
Exposure tierDecision layerLOW / MEDIUM / HIGH / CRITICAL
Exposure scoreDecision layer72 (0-100, descriptive)
Recommended actionDecision layerenhanced-due-diligence / manual-review / monitor / clear
Jurisdiction flagsPublished U.S. listsADVERSARY_NEXUS, STATE_SPONSOR_NEXUS
Adversary countries15 CFR §7.4 list["Russia", "China"]
Change flag (watchlist)Cross-run diffNEW / ESCALATED / CHANGED / UNCHANGED

Why this was escalated — the evidence chain behind a CRITICAL diligence decision

Why use FARA Foreign Agent Registration Search?

The FARA efile website provides basic search, but assembling a complete picture of a registrant requires clicking through multiple pages and endpoints: the registrant list, the foreign principals list, and the documents list. Cross-referencing entities across these datasets manually is tedious and error-prone, especially when researching dozens of registrants or tracking all agents working for a specific country.

This actor combines all three API endpoints into a single query. Search by registrant name, foreign principal, country, or registration number and get back unified profiles with everything in one record.

Built on the Apify platform, FARA Foreign Agent Registration Search gives you:

  • Scheduling -- monitor new registrations weekly or monthly
  • API access -- trigger searches programmatically from Python, JavaScript, or any HTTP client
  • Monitoring -- get notified when runs complete or fail
  • Integrations -- connect to Zapier, Make, Google Sheets, or webhooks

Diligence decision, influence replay, attention queue, jurisdiction nexus

Features

  • Multi-filter search -- search by registrant name, foreign principal name, country, registration number, or new registrations since a specific date
  • Unified profiles -- combines registrant data, foreign principals, and filing documents from 3 separate API endpoints into one record
  • Status filtering -- search active agents, terminated agents, or both
  • Foreign principal lookup -- find which U.S. agents represent a specific foreign government or entity
  • Document links -- includes direct links to registration statements, supplemental statements, and other FARA filings
  • New registration monitoring -- filter for registrants registered after a specific date to track new foreign lobbying activity
  • Rate limit handling -- built-in throttling (2.1 seconds between requests) with automatic retry on 429 responses
  • Direct lookup -- look up a specific registrant by registration number for instant access
  • Foreign-influence exposure scoring -- a descriptive 0-100 exposure score, tier, and diligence-routing recommendation per registrant, with an auditable component breakdown
  • Filing-document signals -- rule-based flags (recent supplemental, informational materials, termination, latest document age) derived from each registrant's filings
  • Relationship & filing output entities -- pivot to one flat row per registrant-principal pair (graph-ready) or per filing document
  • Cross-run change feed -- name a watchlist and a scheduled run reports new registrations, status changes, new/removed principals, new documents, and exposure escalations; diffOnly mode emits only what changed
  • Dashboard digest -- a single run-level record with tier counts, top principal countries, top document types, top agents by principal count, and a ranked review queue
  • Flexible name matching -- contains, exact, or fuzzy (token-set) registrant-name matching

Use cases for searching FARA data

Investigative journalism

Journalists research which U.S. lobbying firms and PR agencies represent foreign governments. Search by country to identify all agents working for a specific nation and review their filing documents.

Policy research and advocacy

Think tanks and policy organizations track foreign lobbying activity around specific legislation. Monitor new registrations and filing documents to understand which foreign interests are active on Capitol Hill.

Compliance and due diligence

Law firms and compliance teams verify whether business partners or counterparties are registered as foreign agents. FARA registration status is a key data point in KYC (Know Your Customer) and anti-corruption due diligence.

Academic research

Political scientists study patterns in foreign lobbying -- which countries hire the most agents, how lobbying spending correlates with policy outcomes, and how the FARA registry has evolved over time.

Competitive intelligence for lobbying firms

Government affairs firms track which competitors are picking up foreign principal contracts and which countries are actively seeking new U.S. representation.

National security analysis

Security analysts monitor registrations linked to adversarial nations to track potential foreign influence operations.

How to search FARA registrations

  1. Choose a search filter -- Enter a registrant name, foreign principal name, country, registration number, or new-since date. At least one filter is required.
  2. Set status filter -- Choose whether to search active agents, terminated agents, or both.
  3. Configure options -- Enable or disable foreign principal and document fetching depending on how much detail you need.
  4. Run the actor -- Click "Start" to begin the search. The actor fetches registrants, filters matches, then enriches each with principals and documents.
  5. Download results -- Once finished, download your data as JSON, CSV, or Excel from the Dataset tab.

Input parameters

ParameterTypeRequiredDefaultDescription
registrantNamestringNo*--Search for registrant/agent by name (case-insensitive substring match).
foreignPrincipalNamestringNo*--Search by foreign principal name (the government, entity, or person represented).
countrystringNo*--Filter by country of foreign principal (e.g., China, Russia, Saudi Arabia).
registrationNumberstringNo*--Look up a specific registrant by FARA registration number.
statusstringNoActiveRegistration status filter: Active, Terminated, or Both.
includeDocumentsbooleanNotrueFetch filing document links for each registrant. Slower due to rate limits.
includePrincipalsbooleanNotrueFetch foreign principals for each registrant.
newSinceDatestringNo*--Only return registrants registered after this date (MM-DD-YYYY format).
maxResultsintegerNo50Maximum number of registrant profiles to return (1-5,000).
matchModestringNocontainsHow registrantName is matched: contains (substring), exact (full-string), or fuzzy (token-set similarity — catches word reorderings and minor variants).
minExposureTierstringNo--Only return registrants at or above this exposure tier (LOW/MEDIUM/HIGH/CRITICAL). Lower-tier registrants are counted in the summary, never dropped silently.
outputProfilestringNostandardDetail per registrant: minimal (decision only), standard (+ risk factors), full (+ raw principal/document arrays).
outputModestringNorecordsrecords = one row per registrant + a run summary. dashboard = a single digest record (counts, tiers, review queue, top countries, top document types, top agents), no per-registrant rows.
outputEntitystringNoregistrantsRow grain: registrants (unified profile), relationships (graph edges sourcetarget/REPRESENTS, Neo4j/Gephi/Maltego-ready), filings (one row per filing document), principals (aggregate by foreign principal — registrant counts, countries, agents), or timeline (one chronological event per filing). Charged per registrant regardless of grain.
watchlistNamestringNo--Name a watchlist to enable cross-run monitoring. Results are diffed against your last run under the same name and tagged with temporalSignals (change flag, reasons, events). Leave blank for a stateless one-off screen.
portfolioNamestringNo--Alias for watchlistName — same cross-run monitoring, friendlier term for portfolio tracking. watchlistName wins if both are set.
watchModestringNofullWithDiffOnly applies with a watchlist: fullWithDiff emits every registrant with its diff; diffOnly emits only registrants that changed since the last run (a clean change feed). The summary always covers the full screened set.
proxyConfigurationobjectYesApify ProxyRequired. The FARA source restricts automated access from shared/datacenter IPs on its per-registrant endpoints, so foreign-principal and document enrichment needs a proxy. Apify Proxy (datacenter) is the default and works; if principals or documents come back empty, switch the proxy group to Residential.

*At least one search filter is required.

Input examples

Search by country:

{
    "country": "China",
    "status": "Active",
    "maxResults": 50
}

Look up a specific registration:

{
    "registrationNumber": "6942"
}

Search by registrant name:

{
    "registrantName": "Mercury",
    "status": "Both",
    "includeDocuments": true,
    "includePrincipals": true
}

Find new registrations:

{
    "newSinceDate": "01-01-2025",
    "maxResults": 100
}

Search by foreign principal:

{
    "foreignPrincipalName": "Embassy",
    "status": "Active",
    "maxResults": 25
}

Input tips

  • Start with principals disabled for speed -- Fetching foreign principals requires additional API calls per registrant. Disable includePrincipals and includeDocuments for faster initial searches, then re-run with full detail on interesting results.
  • Use country filter for broad searches -- Searching by country across active registrants gives you a complete picture of which firms represent a specific nation.
  • Combine name and country -- Use both registrantName and country together to narrow results when searching for a specific firm's work for a particular country.

Output example

Each item in the output dataset represents one FARA registrant profile:

{
    "recordType": "registrant",
    "registrationNumber": "6942",
    "registrantName": "Mercury Public Affairs, LLC",
    "businessName": "Mercury Public Affairs",
    "status": "Active",
    "registrationDate": "03/15/2019",
    "terminationDate": null,
    "address": "1001 G Street NW, Suite 1000 West",
    "city": "Washington",
    "state": "DC",
    "zip": "20001",
    "country": "United States",
    "foreignPrincipals": [
        {
            "name": "Republic of Turkey",
            "country": "TURKEY",
            "state": "",
            "registrationDate": "03/15/2019"
        }
    ],
    "filingDocuments": [
        {
            "type": "Registration Statement",
            "stampedDate": "2019-03-20T00:00:00",
            "documentUrl": "https://efile.fara.gov/docs/6942-Registration-Statement-20190320.pdf"
        }
    ],
    "totalPrincipals": 1,
    "totalDocuments": 2,
    "exposureScore": 33,
    "exposureTier": "MEDIUM",
    "recommendedAction": "monitor",
    "grade": "C",
    "scoreBreakdown": {
        "jurisdictionNexus": 0,
        "principalBreadth": 7,
        "recentActivity": 10,
        "documentActivity": 15,
        "statusSignal": 8,
        "total": 33
    },
    "filingSignals": {
        "hasRecentSupplemental": true,
        "hasInformationalMaterials": true,
        "hasTermination": false,
        "latestDocumentType": "Supplemental Statement",
        "latestDocumentAgeDays": 14,
        "documentCount": 6,
        "documentsLast90Days": 4,
        "documentsPrior90Days": 1,
        "activitySpike": true,
        "dormant": false,
        "actualSupplementals": 3,
        "expectedSupplementals": 4,
        "filingCompleteness": 75
    },
    "riskFactors": [
        "1 distinct foreign-principal country",
        "Filed or registered within the last 12 months"
    ],
    "jurisdictionFlags": [],
    "principalCountries": ["TURKEY"],
    "adversaryCountries": [],
    "activeDisseminationActivity": false,
    "summary": "Mercury Public Affairs, LLC: MEDIUM foreign-influence exposure; representing 1 jurisdiction(s) (TURKEY).",
    "agentContract": {
        "recommendedAction": "monitor",
        "exposureTier": "MEDIUM",
        "requiresHumanReview": false
    },
    "sourceUrl": "https://efile.fara.gov/ords/fara/f?p=1235:11:::NO::P11_REG_NUMBER:6942"
}

In watchlist mode each record also carries a temporalSignals block (changeFlag, changeReasons[], previousScore, scoreDelta, events[], firstSeenAt, runsSeen), and the run emits a recordType: "summary" (or "dashboard") record with tier/action counts, top principal countries, the highest-exposure registrant, a ranked reviewQueue, and requiresHumanReview. The same summary is mirrored to the SUMMARY key-value store key.

Sample output — registrant, recommended action, exposure tier, principal, trend

Output fields

FieldTypeDescription
registrationNumberstringFARA registration number
registrantNamestringName of the registered agent
businessNamestringBusiness/company name of the registrant
statusstringRegistration status: Active, Terminated, or New
registrationDatestringDate of initial registration
terminationDatestring/nullDate registration was terminated (null if still active)
addressstringStreet address of the registrant
citystringCity
statestringState
zipstringZIP code
countrystringCountry of the registrant
foreignPrincipalsobject[]/nullList of foreign principals with name, country, state, and registration date (null if not requested)
filingDocumentsobject[]/nullList of filing documents with type, stamped date, and document URL (null if not requested)
totalPrincipalsnumber/nullCount of foreign principals
totalDocumentsnumber/nullCount of filing documents
exposureScorenumber0-100 descriptive foreign-influence exposure
exposureTierstringLOW / MEDIUM / HIGH / CRITICAL
recommendedActionstringDiligence routing: clear / monitor / manual-review / enhanced-due-diligence
gradestringA-F at-a-glance band (A = lowest exposure)
scoreBreakdownobjectComponent contributions to exposureScore: jurisdictionNexus + principalBreadth + recentActivity + documentActivity + statusSignal (total capped at 100)
filingSignalsobjectRule-based document signals: hasRecentSupplemental, hasInformationalMaterials, hasTermination, latestDocumentType, latestDocumentAgeDays, documentCount, filing-activity signals documentsLast90Days, documentsPrior90Days, activitySpike, dormant (active + no filing in 365+ days), velocityChangePct (filing volume change, last 90 days vs prior 90), velocityStatus (accelerating / steady / decelerating / inactive), and supplemental-cadence actualSupplementals / expectedSupplementals / filingCompleteness (0-100, from FARA's 6-month supplemental rule)
networkSignalsobject{ degree, networkRole } — how many foreign principals this registrant represents + a plain-language centrality role (hub / connected / peripheral). The run summary's mostRepresentedPrincipals lists the principal-side hubs.
riskFactorsstring[]Human-readable factors behind the score (omitted on minimal profile)
jurisdictionFlagsstring[]ADVERSARY_NEXUS (15 CFR §7.4), STATE_SPONSOR_NEXUS (U.S. State Dept)
principalCountriesstring[]Distinct foreign-principal countries
adversaryCountriesstring[]Principal countries on the 15 CFR §7.4 foreign-adversary list
activeDisseminationActivitybooleanCurrently distributing a principal's informational materials
summarystringPlain-English one-line exposure summary
agentContractobjectCompact { recommendedAction, exposureTier, requiresHumanReview } for agents/webhooks
temporalSignalsobjectCross-run change block (watchlist mode only)
sourceUrlstringDirect URL to the registrant's page on efile.fara.gov

Output entities

Set outputEntity to reshape the same screened data for different consumers:

  • registrants (default) — one unified profile per registrant (the shape above).
  • relationships — graph-ready edges, one row per registrant-principal pair with source (registrant) → target (principal) and relationship: "REPRESENTS", plus the exposure context. Drops straight into Neo4j, Gephi, Linkurious, Memgraph, or Maltego to map the agent → foreign-principal → country network.
  • filings — one row per filing document (type, stamped date, PDF link, named principal).
  • timeline — one chronological event per filing, with a stable eventType (NEW_REGISTRATION / SUPPLEMENTAL_STATEMENT / AMENDMENT / TERMINATION / INFORMATIONAL_MATERIALS / …). Sort by eventDate for an activity timeline.
  • principals — flip the view: one aggregate record per foreign principal, with activeRegistrants, totalRegistrants, countries, highestExposure, and the agents representing it. Answers "who represents the Government of Turkey, and how exposed are they?" Counts cover the run's result set, not all-time FARA history.

For a flat compliance export, use outputEntity: registrants with outputProfile: minimal (decision fields only). Every grain is charged per registrant, never per reshaped row.

Monitoring & longitudinal stats

When you set a watchlistName (or portfolioName), each run diffs against your last run under that name and accumulates memory across runs. The first run is a baseline (every registrant NEW, trend: NEW); change signals accrue from the second run onward.

Per registrant (in temporalSignals):

  • changeFlag (NEW / UNCHANGED / CHANGED / ESCALATED / DEESCALATED) + changeReasons[] + events[].
  • changeSummary — compact { newPrincipals, newDocuments, newCountry, escalated } for one-field alert rules.
  • agentMomentum{ newPrincipals, lostPrincipals, trend } where trend is expanding / contracting / stable: is this firm winning or losing foreign-representation business?

Per foreign principal — the influence replay (on outputEntity: principals records, principalHistory):

  • registrantCountTrend (up / down / stable / new) vs last run + previousRegistrantCount + registrantCountDelta.
  • representationTrend (expanding / contracting / stable / new) over the whole accumulated history — is this principal expanding its U.S. representation over time?
  • countHistory[{ runAt, count }], the representation footprint across every run (replay how China's footprint moved over 12 months).
  • majorEventsREPRESENTATION_EXPANDED / REPRESENTATION_CONTRACTED / NEW_COUNTRY.
  • countriesSeen (union across all runs) + firstSeenAt + runsSeen.

Run-level (in watchlist):

  • attentionQueue — the digest answer to "what deserves attention today": each changed entity with whyNow (the change reasons) + changeImportance (high / medium / low), ranked. Branch on changeImportance == "high" to route only what matters.
  • monitoringSummary{ newRegistrants, newPrincipals, newDocuments, escalations, changed }.
  • historical{ averageExposure, maxExposure, trend (UP/DOWN/FLAT), changesLast30d, changesLast90d, totalRunsTracked }.

Influence Replay — a foreign principal's representation footprint, built across runs

Country intelligence

When you supply a country, the run summary adds a countrySummary{ country, activeAgents, terminatedAgents, totalAgents, distinctPrincipals, newAgents (watchlist only), topRegistrants, topPrincipals } — the country-level read journalists and analysts reach for. The summary also carries mostRepresentedPrincipals (foreign principals represented by the most agents — the hubs of the representation network), and every registrant record carries networkSignals.degree (how many foreign principals it represents).

Watchlist summary — entities tracked, escalations, and the highest priority today

Cost

Pay-per-result: you are charged per registrant returned (charged per registrant even when outputEntity expands one registrant into many relationship or filing rows). dashboard mode returns a single digest and is charged as one result. Registrants filtered out below your minExposureTier are not returned and not charged, so minExposureTier and dashboard mode are the levers for paying only for what matters. New Apify accounts receive $5 of free platform credits each month.

Search FARA data using the API

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("ryanclinton/fara-foreign-agents").call(run_input={
    "country": "China",
    "status": "Active",
    "includePrincipals": True,
    "includeDocuments": True,
    "maxResults": 25,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['registrantName']} (#{item['registrationNumber']})")
    for fp in item.get("foreignPrincipals") or []:
        print(f"  Principal: {fp['name']} ({fp['country']})")

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("ryanclinton/fara-foreign-agents").call({
    country: "China",
    status: "Active",
    includePrincipals: true,
    includeDocuments: true,
    maxResults: 25,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    console.log(`${item.registrantName} (#${item.registrationNumber})`);
    (item.foreignPrincipals || []).forEach(fp =>
        console.log(`  Principal: ${fp.name} (${fp.country})`)
    );
}

cURL

# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~fara-foreign-agents/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "country": "China",
    "status": "Active",
    "maxResults": 25
  }'

# Fetch results (replace DATASET_ID from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"

How the FARA search works

The actor builds unified registrant profiles by combining data from three FARA API v1 endpoints:

How it works — DOJ FARA data through scoring, memory and the attention queue

Step 1: Fetch registrant list

Depending on input filters, the actor fetches either active registrants, terminated registrants, both, or new registrations since a date. The FARA API returns all registrants in a single response per status category, so the actor loads the full list and filters locally by name and country.

Step 2: Filter and match

Registrant name matching uses case-insensitive substring search against both the Registrant_Name and Business_Name fields. Country filtering matches against each registrant's foreign-principal countries (country lives on the principal, not the registrant), so a country or foreignPrincipalName filter fetches principals for each candidate registrant to check for matches -- this is slower due to rate limits.

Step 3: Enrich with principals and documents

For each matched registrant (up to maxResults), the actor fetches the foreign principals list and filing documents from their respective API endpoints. The FARA API has a strict rate limit of 5 requests per 10 seconds, so the actor enforces a 2.1-second delay between requests with automatic 10-second backoff on 429 responses.

Step 4: Build unified profile

The registrant data, principals, and documents are merged into a single profile object. Field names in the FARA API are inconsistent (sometimes Registration_Number, sometimes Reg_Number), so the actor tries multiple key variations with case-insensitive matching.

Search vs intelligence — DOJ FARA search compared with this actor

Limitations

  • Rate limits -- The FARA API allows only 5 requests per 10 seconds. Searches with many results and full enrichment (principals + documents) are inherently slow. A search returning 100 registrants with full enrichment takes approximately 10 minutes.
  • API field inconsistency -- The FARA API uses inconsistent field names across responses. The actor handles known variations, but unexpected changes to the API could cause missing fields.
  • No full-text search -- The actor searches by registrant name, principal name, and country only. It does not search within the content of filing documents.
  • Local filtering -- The FARA API does not support server-side filtering by name. The actor downloads all registrants of the specified status and filters locally, which means even narrow searches require fetching the complete registrant list.
  • Date format -- The newSinceDate parameter requires MM-DD-YYYY format (U.S. date format), matching the FARA API's expected format.
  • No pagination -- The FARA API returns all registrants in a single response. The maxResults parameter limits output after filtering, not API calls.

Integrations

  • Zapier -- Trigger workflows when new foreign agent registrations are detected.
  • Make -- Build automated monitoring pipelines for foreign lobbying activity.
  • Google Sheets -- Export registrant profiles to Google Sheets for collaborative analysis.
  • Apify API -- Call the actor programmatically from any language or platform.
  • Webhooks -- Get notified when a search completes and process results automatically.

Use in Dify

Drop this actor into Dify workflows via the Apify plugin's Run Actor node. Each registrant returns scored, classified, and routed as structured JSON -- enhanced-due-diligence / manual-review / monitor / clear plus the exposureTier and requiresHumanReview boolean your downstream node branches on. A raw FARA scraper pointed at the same registry returns registrant rows you still have to triage; this returns the diligence decision.

  • Actor ID: ryanclinton/fara-foreign-agents
  • Sample input (screen everyone representing a foreign principal from a given country):
{
    "country": "Russia",
    "status": "Active",
    "minExposureTier": "MEDIUM",
    "outputProfile": "standard"
}

A Dify if/else node routes on the per-registrant recommendedAction:

  • recommendedAction == "enhanced-due-diligence" → open an EDD case / alert the compliance channel
  • recommendedAction == "manual-review" → queue for an analyst
  • recommendedAction == "monitor" → add to a watchlist, no action now
  • recommendedAction == "clear" → log and continue

The compact agentContract object (recommendedAction, exposureTier, requiresHumanReview) lets an agent branch on one boolean — requiresHumanReview == true is the single gate for "stop and escalate." The riskFactors[] array is plain-English and usable verbatim in a case note or Slack message — no LLM rewriting needed.

Opt-in modes Dify workflows can leverage: set watchlistName to turn a scheduled run into a change feed (each record carries temporalSignals.changeFlag — branch on ESCALATED to fire an alert only when a registrant's exposure rose), or outputMode: "dashboard" to get a single run-level digest record instead of per-registrant rows.

FAQ

What is FARA? The Foreign Agents Registration Act (FARA) is a U.S. law that requires persons acting as agents of foreign principals in a political or quasi-political capacity to disclose their relationship with the foreign principal, as well as activities, receipts, and disbursements in support of those activities. It is administered by the DOJ's FARA Registration Unit.

What types of entities register under FARA? Lobbying firms, law firms, PR agencies, consultants, and individuals who engage in political activities, public relations, or lobbying on behalf of foreign governments, political parties, or entities controlled by foreign governments.

How current is the FARA data? The data comes from the official efile.fara.gov API, which is the DOJ's electronic filing system. Registrations and documents are available as soon as they are processed by the FARA Registration Unit.

Can I search for all agents representing a specific country? Yes. Use the country filter with the country name (e.g., "China", "Russia", "Saudi Arabia"). The actor will return all registrants associated with foreign principals from that country.

Why is the search slow when using foreign principal name filter? When filtering by foreign principal name, the actor must fetch the principals list for each candidate registrant to check for matches. With the FARA API's rate limit of 5 requests per 10 seconds, this adds approximately 2 seconds per registrant checked.

What document types are in the filings? Common document types include Registration Statement, Supplemental Statement, Amendment, Exhibit A (agreement), Exhibit B (activities), Short-Form Registration Statement, and Termination filings.

Can I download the actual filing PDFs? Yes. Each document in the filingDocuments array includes a documentUrl that links directly to the PDF filing on efile.fara.gov.

Related actors

ActorHow to combine
Website Contact ScraperFind contact information for registered lobbying firms identified in FARA searches
B2B Lead Gen SuiteBuild comprehensive profiles of lobbying firms combining FARA data with business intelligence
WHOIS Domain LookupResearch domain ownership for entities mentioned in FARA filings

Support

Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom compliance or research solutions, reach out through the Apify platform.

Last verified: March 27, 2026

Ready to try FARA Foreign Influence Intelligence & Monitoring?

Run it on your own Apify account. Apify offers a free tier with $5 of monthly credits.

Open on Apify Store