EU Payment Institution & EMI Licence Monitor
Pricing
from $5.00 / 1,000 institution checkeds
EU Payment Institution & EMI Licence Monitor
Check EU/EEA payment institutions, EMIs, AISPs and PISPs in the EBA PSD2 Register. Save a baseline, then see what changed in authorisation, payment services and passporting on later runs.
Pricing
from $5.00 / 1,000 institution checkeds
Rating
0.0
(0)
Developer
Vadim Bezrukov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Verify and monitor EU/EEA payment institutions, electronic money institutions, AISPs and PISPs. The first run stores a last-successful baseline from the official EBA PSD2 Register; later runs emit typed authorisation, payment-service and passporting changes.
This Actor normalises the public EBA Payment Institutions Register. It is not affiliated with the EBA, does not use EBA branding, and is not legal or compliance advice. National competent authorities remain responsible for the underlying information. The EBA register itself does not confer legal status. Verify legally consequential decisions against EBA and the relevant NCA.
Check one institution
{"mode": "watchlist","monitorKey": "eba-demo","institutions": [{"registerId": "IE_CBI!C187865"}],"includeServices": true,"includePassporting": true,"includeAgents": false,"includeBranches": true,"changesOnly": false,"baselineMode": "emitSnapshot"}
Open the Actor, keep this example and click Start. Expect a BASELINE row
for Stripe Technology Europe, Limited with current PSD2/EMD2 services and
passporting host countries; every later run of this example writes the current
record again because changesOnly is off here (turn it on for a schedule that
should stay quiet). The configured price is $0.015 for that first
verified institution (apify-actor-start + institution-checked). No EBA login or
proxy is needed.
Keep the same monitorKey on a daily or weekly schedule. Last-good state lives
in the named store eba-psd2-payment-institution-monitor-state, so a second
run compares against the first. Unchanged successful checks are still paid; a
quiet run can have an empty Dataset - inspect CHECKS and RUN_SUMMARY.
Two modes
| Mode | Use it for | Result |
|---|---|---|
watchlist | Scheduled counterparty monitoring | First run BASELINE; later runs typed CHANGE rows |
lookup | Agent/API current snapshot | One SNAPSHOT per institution; no monitor state |
Resolve each target in this order: registerId (EBA EntityCode), exact
nationalId, then exact name plus ISO country. If a name or national id
matches more than one institution, the Actor returns AMBIGUOUS_TARGET with
candidates instead of guessing.
Some EBA EntityCodes occur under multiple institution types with different
authorisation histories. These also return AMBIGUOUS_TARGET; the Actor
preserves the previous baseline and does not charge for the ambiguous check.
MCP / agent: ask “Check this EU payment institution’s EBA PSD2 authorisation and passporting” via https://mcp.apify.com?tools=automa-flow/eba-psd2-payment-institution-monitor.
Sample output
First watchlist run (abridged). Live Stripe rows include the full service and passporting arrays.
{"record_type": "BASELINE","status": "FOUND","entity_id": "IE_CBI!C187865","name": "Stripe Technology Europe, Limited","institution_type": "PSD_EMI","authorization_status": "Authorised","change_types": ["BASELINE"],"source": "eba_psd2_register","scraped_at": "2026-09-13T12:00:00Z"}
With changesOnly: true, a later run with no changes emits no Dataset rows. Filter record_type=CHANGE
for webhooks.
Change types
BASELINE, REGISTER_STATUS_CHANGED, AUTHORIZATION_WITHDRAWN,
AUTHORIZATION_RESTORED, PAYMENT_SERVICE_ADDED, PAYMENT_SERVICE_REMOVED,
PASSPORT_COUNTRY_ADDED, PASSPORT_COUNTRY_REMOVED, PASSPORT_SERVICE_CHANGED,
BRANCH_ADDED, BRANCH_REMOVED, AGENT_ADDED, AGENT_REMOVED,
ENTITY_METADATA_CHANGED, ENTITY_NO_LONGER_FOUND, ENTITY_FOUND_AGAIN.
ENTITY_NO_LONGER_FOUND and ENTITY_FOUND_AGAIN report disappearance and
reappearance in the register. They do not imply that an authorisation was
withdrawn or restored. Those authorisation events require register status or
date evidence. Event IDs distinguish observations by monitor key, timestamp
and fingerprint and remain unchanged when a saved delivery is recovered.
Each change row includes previous, current, source evidence and
observed_at. A failed or incomplete register download never overwrites
last-good state and never invents a permission, passport or agent withdrawal.
Source
Official EBA PSD2 Register golden-copy JSON (zipped), advertised at:
https://www.eba.europa.eu/risk-and-data-analysis/data/registers/payment-institutions-registerhttps://euclid.eba.europa.eu/register/pir/registerDownload
The Actor downloads the current file once per run and checks all your institutions against it. Default memory is 1024 MB and the run timeout is 5 minutes. Postal addresses are omitted. Agent names and national identifiers are omitted. Output is transformed / normalised from the register and must be labelled as such if republished. Attribute the European Banking Authority as the source.
Schedule example
{"mode": "watchlist","monitorKey": "payment-partners","institutions": [{ "registerId": "IE_CBI!C187865" },{ "name": "UAB Aspora Europe", "country": "LT" }],"changesOnly": true,"baselineMode": "emitSnapshot"}
Point an Apify webhook at record_type=CHANGE Dataset items.
API example
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("automa-flow/eba-psd2-payment-institution-monitor").call({mode: "lookup",institutions: [{ registerId: "IE_CBI!C187865" }],});const { items } = await client.dataset(run.defaultDatasetId).listItems();
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automa-flow/eba-psd2-payment-institution-monitor").call(run_input={"mode": "lookup","institutions": [{"registerId": "IE_CBI!C187865"}],},)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["status"], item.get("entity_id"), item.get("authorization_status"))
Pricing
Pay per checked institution, plus the run start fee below. Platform usage is included for paid-plan users. Individual Dataset rows do not add a separate charge. See the live Pricing tab for current rates.
| Event | When it is charged | Price |
|---|---|---|
apify-actor-start | Automatic run start at the default 1024 MB (one event). Includes quiet later checks and source failures. | $0.01 |
institution-checked | Once per unique institution successfully evaluated, including unchanged or authoritative NOT_FOUND | $0.005 |
| Run | Events | Event fees |
|---|---|---|
| 1 institution, first or quiet | start + 1 check | $0.015 |
| 20 unique institutions | start + 20 checks | $0.11 |
| 100 unique institutions | start + 100 checks | $0.51 |
The Store minimum maxTotalChargeUsd is $0.03. That is higher than the
$0.015 one-institution event bill so a ~20 MB register download can finish
instead of aborting at the event-fee floor.
Not charged as custom events: retries, ambiguous names, source failures, duplicate targets, individual child services or individual change events. A source-failed run still pays the platform start fee.
Limitations
- The EBA central register reproduces NCA submissions and has no legal significance. An omitted or incorrectly included firm does not change its legal status.
- Authorisation status is the register's ENT_AUT date-list (the same odd/even
rule as the Euclid UI), not an independent legal conclusion. That is why
status-only diffs are labelled
REGISTER_STATUS_CHANGED. - Freedom-to-provide-services comes from host countries in
Services. Branch establishment comes fromPSD_BRchild records. The dump does not always attach services to a branch row. - The Console example runs with
changesOnly: false, so successful checks appear in the Dataset: the first run emitsBASELINE, later runs aSNAPSHOTper institution. AchangesOnlyrun with no diffs can be empty;RUN_SUMMARYstill reports verified counts. - Keep
includeServices/includePassporting/includeBranches/includeAgentsstable for a monitor key. - Monitor state is one named KVS record, capped at 8 MiB. Last-good snapshots
stay even after an id is dropped from the watchlist, so re-adding it diffs
instead of emitting a fresh
BASELINE. Passport-heavy EMIs can fill the cap well before 500 institutions. If a save would exceed the cap, the run status isSTATE_LIMIT:CHECKSandRUN_SUMMARYare published, Dataset rows are not written, state is not saved, andinstitution-checkedis not charged. The platform start fee still applies. Split the watchlist acrossmonitorKeys.RUN_SUMMARY.state_byteswarns from 70% of the cap.
FAQ
Why is the Dataset empty on the second run?
changesOnly is the default for your own inputs (the Console example turns it
off). Unchanged institutions are recorded in CHECKS, not the Dataset. That is
a successful quiet check, not a source failure.
Does a schedule really compare with yesterday?
Yes, when mode is watchlist and monitorKey is unchanged. State is stored
under eba-psd2-payment-institution-monitor-state, not in the run's temporary
default store.
Can I watch 500 large EMIs on one key?
The input allows 500 ids. One 8 MiB record cannot always hold 500
passport-heavy snapshots. Split large EMI lists. A refused save is
STATE_LIMIT, not a quiet empty Dataset.
What does STATE_LIMIT mean?
The named monitor record would exceed 8 MiB. Read CHECKS and
RUN_SUMMARY.state_bytes, then split the watchlist. Last-good state from
earlier runs is left untouched.
Is this legal advice or an EBA product? No. Attribute EBA as the source and verify consequential decisions with the relevant NCA.
