# PEP Screening — OpenSanctions + Wikidata + National Registries (`jungle_synthesizer/pep-screening-scraper`) Actor

PEP screening for AML/KYC. Streams 1.87M politically exposed persons from OpenSanctions (daily refresh), Wikidata, EU MEPs, US Congress, and UK Companies House PSC. FATF categories, family/RCA graph, three modes: ingest, fuzzy-match screening, new-PEPs diff.

- **URL**: https://apify.com/jungle\_synthesizer/pep-screening-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, Other
- **Stats:** 3 total users, 1 monthly users, 92.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## PEP Screening Scraper — OpenSanctions + Wikidata + National Registries

Streams politically exposed persons (PEPs) from [OpenSanctions](https://www.opensanctions.org), Wikidata, EU Parliament, US Congress, and UK Companies House. Returns structured FATF-categorized records for AML/KYC compliance workflows — up to 1.87M entities across five sources.

---

### PEP Screening Scraper Features

- **Streams 1.87M PEP records** from OpenSanctions' daily-refreshed FTM NDJSON dataset — no API key required
- **Assigns FATF categories** to every record: `head_of_state`, `minister`, `legislator`, `judiciary`, `military`, `diplomat`, `soe_executive`, `central_bank`, `family_member`, `close_associate`
- **Includes Relatives and Close Associates (RCA)** per FATF Recommendation 12 — family members and business associates of PEPs, toggleable
- **Fuzzy name matching** in `screen_queries` mode — Levenshtein-based 0-100 score against all name variants, aliases, and transliterations
- **Three operating modes**: bulk ingest, fuzzy-match screening, and incremental diff since last run
- **Multi-source coverage**: OpenSanctions, Wikidata SPARQL, EU MEPs XML feed, US Congress API (BYO key), UK Companies House PSC (BYO key)
- **Country and category filters** — narrow to specific jurisdictions (ISO-3166-1 alpha-2) or FATF categories without streaming the full dataset
- **new_peps_diff mode** — reads last-run timestamp from KV store, outputs only newly-added PEPs since that run, useful for daily monitoring pipelines

---

### What Can You Do With PEP Screening Data?

- **Compliance teams** — run KYC due-diligence checks against the full FATF PEP universe before onboarding clients
- **Risk screening platforms** — integrate the bulk ingest into a downstream PEP database, refreshed daily from OpenSanctions
- **Fintech and neobanks** — automate screening at account-open time by querying the `screen_queries` mode against applicant names
- **Investigative journalists** — identify officials' family members and close associates in the RCA graph for cross-referencing against business registries
- **Sanctions screening vendors** — use `sanctions_overlap_id` to cross-reference PEPs who also appear on sanctions lists, already resolved against the sanctions-screening-scraper entity schema
- **AML model teams** — use `new_peps_diff` mode to track newly-exposed politicians, feeding alerts into monitoring workflows without re-ingesting 1.87M records each run

---

### How PEP Screening Scraper Works

1. **Select your source and mode.** Choose one or more sources (`opensanctions`, `wikidata`, `eu_meps`, `us_congress`, `uk_psc`) and a mode. For bulk compliance data, use `ingest_lists`. For name-based screening, use `screen_queries`. For daily monitoring, use `new_peps_diff`.
2. **Apply filters.** Country codes, FATF categories, and the `currentOnly` toggle narrow the stream before any data hits the output. This keeps runs fast and datasets manageable.
3. **The scraper streams source data efficiently.** OpenSanctions is 921MB of NDJSON — processed line-by-line without loading into memory. EU MEPs XML is ~200KB and returns in seconds. US Congress and UK Companies House require free API keys and are skipped gracefully without them.
4. **Records are FATF-normalized on output.** Every entity gets `pep_category`, `pep_class`, and `is_current` fields derived from source topic tags — consistent across all five sources so you're not stitching together incompatible schemas.

---

### Input

```json
{
  "mode": "ingest_lists",
  "sources": ["opensanctions"],
  "countries": ["US", "GB", "DE"],
  "pepCategories": ["head_of_state", "minister"],
  "currentOnly": false,
  "includeFamily": true,
  "maxItems": 1000,
  "sp_intended_usage": "AML onboarding screening",
  "sp_improvement_suggestions": "none"
}
````

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `mode` | string | `ingest_lists` | Operating mode: `ingest_lists`, `screen_queries`, or `new_peps_diff` |
| `sources` | array | `["opensanctions"]` | Sources to pull from: `opensanctions`, `wikidata`, `eu_meps`, `us_congress`, `uk_psc`. Leave empty for all. |
| `pepCategories` | array | — | FATF category filter. Empty = all categories. |
| `countries` | array | — | ISO-3166-1 alpha-2 country codes. Filters by position country. |
| `currentOnly` | boolean | `false` | Exclude PEPs whose position has ended. FATF recommends screening former PEPs for 12–18 months. |
| `includeFamily` | boolean | `true` | Include Relatives and Close Associates (FATF Recommendation 12). |
| `queries` | array | — | Names to fuzzy-match. Required for `screen_queries` mode. |
| `minMatchScore` | integer | `75` | Minimum Levenshtein match score (0–100). 75 is a standard AML threshold. |
| `usCongressApiKey` | string | — | Free key from api.congress.gov. Without it, falls back to OpenSanctions' `us_congress` dataset. |
| `ukCompaniesHouseApiKey` | string | — | Free key from developer.company-information.service.gov.uk. Required for live PSC data. |
| `maxItems` | integer | `10` | Maximum records to return. Set to 0 for unlimited (full ingest). |

**Screen queries example:**

```json
{
  "mode": "screen_queries",
  "sources": ["opensanctions", "eu_meps"],
  "queries": ["Emmanuel Macron", "Angela Merkel", "Viktor Orbán"],
  "minMatchScore": 70,
  "maxItems": 50,
  "sp_intended_usage": "KYC name screening",
  "sp_improvement_suggestions": "none"
}
```

**Incremental diff example:**

```json
{
  "mode": "new_peps_diff",
  "sources": ["opensanctions"],
  "maxItems": 0,
  "sp_intended_usage": "Daily new-PEP monitoring",
  "sp_improvement_suggestions": "none"
}
```

***

### PEP Screening Scraper Output Fields

#### ingest\_lists and new\_peps\_diff Output

```json
{
  "entity_id": "NK-A7Bq3Rx9mVwXt2ZLp4nYs",
  "source": "opensanctions",
  "source_id": "NK-A7Bq3Rx9mVwXt2ZLp4nYs",
  "source_url": "https://www.opensanctions.org/entities/NK-A7Bq3Rx9mVwXt2ZLp4nYs/",
  "primary_name": "Emmanuel Macron",
  "alias_names": "Macron, Emmanuel Jean-Michel Frédéric Macron",
  "nationalities": "FR",
  "date_of_birth": "1977-12-21",
  "place_of_birth": "Amiens, France",
  "gender": "male",
  "pep_category": "head_of_state",
  "pep_class": "PEP",
  "position_title": "President of the Republic",
  "position_country": "FR",
  "position_organization": "French Republic",
  "position_start_date": "2017-05-14",
  "position_end_date": null,
  "is_current": true,
  "sources_count": 3,
  "related_persons": "spouse:NK-Bq4Xt9ZLp2|parent:NK-Cx8mVwXt",
  "related_organizations": "La République En Marche|Élysée Palace",
  "declared_assets": null,
  "sanctions_overlap_id": null,
  "last_modified_date": "2025-01-15T00:00:00Z",
  "query_term": null,
  "match_score": null,
  "match_fields": null,
  "match_reason": null
}
```

| Field | Type | Description |
|-------|------|-------------|
| `entity_id` | string | Canonical PEP identifier (OpenSanctions NK-ID or generated) |
| `source` | string | Data source: `opensanctions`, `wikidata`, `eu_meps`, `us_congress`, `uk_psc` |
| `source_id` | string | Source-native entity ID |
| `source_url` | string | Canonical URL for this entity at the source |
| `primary_name` | string | Primary full name |
| `alias_names` | string | Pipe-separated aliases and alternative names |
| `nationalities` | string | Comma-separated ISO-3166-1 alpha-2 country codes |
| `date_of_birth` | string | Date of birth (YYYY-MM-DD or partial) |
| `place_of_birth` | string | Place of birth as free text |
| `gender` | string | `male`, `female`, or `other` |
| `pep_category` | string | FATF category: `head_of_state`, `minister`, `legislator`, `judiciary`, `military`, `diplomat`, `soe_executive`, `central_bank`, `family_member`, `close_associate` |
| `pep_class` | string | FATF class: `PEP`, `RCA`, `Family`, or `Associate` |
| `position_title` | string | Official position or job title |
| `position_country` | string | ISO-3166-1 alpha-2 country of the position |
| `position_organization` | string | Organization or institution |
| `position_start_date` | string | Start date of position (YYYY-MM-DD) |
| `position_end_date` | string | End date of position, null if currently held |
| `is_current` | boolean | True if position is currently held |
| `sources_count` | integer | Number of independent sources confirming this entity |
| `related_persons` | string | Pipe-separated related persons with relationship type |
| `related_organizations` | string | Pipe-separated related organizations |
| `declared_assets` | string | Pipe-separated declared assets (US OGE, EU MEP disclosures) |
| `sanctions_overlap_id` | string | Cross-reference to sanctions-screening-scraper entity if this PEP also appears on sanctions lists |
| `last_modified_date` | string | Date source record was last modified (ISO 8601) |
| `query_term` | string | Search query that matched this record (`screen_queries` mode only) |
| `match_score` | number | Fuzzy match score 0–100 (`screen_queries` mode only) |
| `match_fields` | string | Pipe-separated fields that contributed to the match |
| `match_reason` | string | Human-readable match explanation |

#### screen\_queries Output

Same schema. `query_term`, `match_score`, `match_fields`, and `match_reason` are populated. Every returned record exceeded the configured `minMatchScore` threshold.

```json
{
  "entity_id": "NK-A7Bq3Rx9mVwXt2ZLp4nYs",
  "source": "opensanctions",
  "primary_name": "Emmanuel Macron",
  "alias_names": "Macron, E. Macron",
  "pep_category": "head_of_state",
  "pep_class": "PEP",
  "position_title": "President of the Republic",
  "position_country": "FR",
  "is_current": true,
  "query_term": "Emmanuel Macron",
  "match_score": 100,
  "match_fields": "primary_name",
  "match_reason": "Exact match on primary name"
}
```

***

### 🔍 FAQ

#### How do I screen names against the PEP database?

PEP Screening Scraper handles this in `screen_queries` mode. Provide a `queries` list and a `minMatchScore` (75 is standard for AML). The scraper runs Levenshtein fuzzy matching against all name variants in the source data, including aliases, transliterations, and maiden names.

#### Does this require API keys?

OpenSanctions, Wikidata, and EU MEPs work with no API key. US Congress and UK Companies House are optional — provide your own free key from api.congress.gov or developer.company-information.service.gov.uk, or skip them and rely on OpenSanctions' daily-refreshed snapshots of the same data.

#### How current is the PEP data?

OpenSanctions refreshes daily. EU MEP data updates from the official XML feed. Wikidata is community-maintained and typically current to within weeks. Run `new_peps_diff` mode on a daily schedule to receive only newly-added PEPs since your last run — the scraper tracks its own timestamp in Apify's key-value store.

#### What FATF categories are covered?

PEP Screening Scraper covers all ten FATF Recommendation 12 categories: `head_of_state`, `minister`, `legislator`, `judiciary`, `military`, `diplomat`, `soe_executive`, `central_bank`, `family_member`, and `close_associate`. Every record gets a `pep_class` field (`PEP`, `RCA`, `Family`, or `Associate`) for downstream filtering.

#### Can I limit to current office-holders only?

Set `currentOnly: true`. Note that FATF Recommendation 12 explicitly advises screening former PEPs for 12–18 months after leaving office. Leaving it at the default (`false`) is the more conservative AML posture.

***

### Need More Features?

Need additional sources, custom match scoring, or integration with your sanctions database? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use PEP Screening Scraper?

- **No vendor lock-in** — OpenSanctions is open-licensed FATF-quality data, updated daily, no subscription required. Most commercial PEP databases charge four-figure annual fees for the same underlying sources.
- **FATF-normalized output** — every record gets consistent `pep_category` and `pep_class` fields regardless of source, so your downstream pipeline doesn't need per-source parsing logic.
- **Scales from screening to bulk** — point it at five names or stream 1.87M records. Same actor, same schema, same output format.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

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

No description

## `sources` (type: `array`):

Subset of: opensanctions, wikidata, eu\_meps, us\_congress, uk\_psc. Leave empty for all sources.

## `pepCategories` (type: `array`):

Filter by category: head\_of\_state, minister, legislator, judiciary, military, diplomat, soe\_executive, central\_bank, family\_member, close\_associate. Leave empty for all.

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

Limit to PEPs holding office in these countries, e.g. US, GB, DE. Leave empty for all countries.

## `currentOnly` (type: `boolean`):

Exclude PEPs whose office has ended. Note: FATF recommends screening former PEPs for 12-18 months.

## `includeFamily` (type: `boolean`):

Include Relatives and Close Associates per FATF Recommendation 12.

## `queries` (type: `array`):

List of names to fuzzy-match against the PEP database.

## `minMatchScore` (type: `integer`):

Minimum Levenshtein-based match score (0-100). 75 is a good AML/KYC threshold.

## `usCongressApiKey` (type: `string`):

Free key from api.congress.gov. Leave empty to use OpenSanctions us\_congress dataset instead.

## `ukCompaniesHouseApiKey` (type: `string`):

Free key from developer.company-information.service.gov.uk. Required for live PSC data.

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

Maximum PEP records to return. Set to 0 for no limit (full ingest).

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

No description

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "ingest_lists",
  "sources": [
    "opensanctions"
  ],
  "includeFamily": true,
  "minMatchScore": 75,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "ingest_lists",
    "sources": [
        "opensanctions"
    ],
    "currentOnly": false,
    "includeFamily": true,
    "minMatchScore": 75,
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/pep-screening-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "ingest_lists",
    "sources": ["opensanctions"],
    "currentOnly": False,
    "includeFamily": True,
    "minMatchScore": 75,
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/pep-screening-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "ingest_lists",
  "sources": [
    "opensanctions"
  ],
  "currentOnly": false,
  "includeFamily": true,
  "minMatchScore": 75,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call jungle_synthesizer/pep-screening-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "PEP Screening — OpenSanctions + Wikidata + National Registries",
        "description": "PEP screening for AML/KYC. Streams 1.87M politically exposed persons from OpenSanctions (daily refresh), Wikidata, EU MEPs, US Congress, and UK Companies House PSC. FATF categories, family/RCA graph, three modes: ingest, fuzzy-match screening, new-PEPs diff.",
        "version": "1.0",
        "x-build-id": "jYfC9HXgyqylldbY9"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~pep-screening-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-pep-screening-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/jungle_synthesizer~pep-screening-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-pep-screening-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/jungle_synthesizer~pep-screening-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-pep-screening-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "sp_intended_usage",
                    "sp_improvement_suggestions"
                ],
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "ingest_lists",
                            "screen_queries",
                            "new_peps_diff"
                        ],
                        "type": "string",
                        "description": ""
                    },
                    "sources": {
                        "title": "Sources to Include",
                        "type": "array",
                        "description": "Subset of: opensanctions, wikidata, eu_meps, us_congress, uk_psc. Leave empty for all sources.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "pepCategories": {
                        "title": "PEP Categories",
                        "type": "array",
                        "description": "Filter by category: head_of_state, minister, legislator, judiciary, military, diplomat, soe_executive, central_bank, family_member, close_associate. Leave empty for all.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "countries": {
                        "title": "Country Filter (ISO-3166-1 alpha-2)",
                        "type": "array",
                        "description": "Limit to PEPs holding office in these countries, e.g. US, GB, DE. Leave empty for all countries.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "currentOnly": {
                        "title": "Current Positions Only",
                        "type": "boolean",
                        "description": "Exclude PEPs whose office has ended. Note: FATF recommends screening former PEPs for 12-18 months."
                    },
                    "includeFamily": {
                        "title": "Include Family & Close Associates (RCA)",
                        "type": "boolean",
                        "description": "Include Relatives and Close Associates per FATF Recommendation 12."
                    },
                    "queries": {
                        "title": "Names to Screen (screen_queries mode)",
                        "type": "array",
                        "description": "List of names to fuzzy-match against the PEP database.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "minMatchScore": {
                        "title": "Min Fuzzy Match Score",
                        "type": "integer",
                        "description": "Minimum Levenshtein-based match score (0-100). 75 is a good AML/KYC threshold."
                    },
                    "usCongressApiKey": {
                        "title": "US Congress API Key (optional)",
                        "type": "string",
                        "description": "Free key from api.congress.gov. Leave empty to use OpenSanctions us_congress dataset instead."
                    },
                    "ukCompaniesHouseApiKey": {
                        "title": "UK Companies House API Key (optional)",
                        "type": "string",
                        "description": "Free key from developer.company-information.service.gov.uk. Required for live PSC data."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum PEP records to return. Set to 0 for no limit (full ingest)."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
