Most iGaming operators verify a player once, at sign-up, and then treat that check as permanent. Malta’s AML regime does not. It expects identity and risk assurance to be a standing control that re-runs over the lifetime of the account, not an onboarding event that quietly ages out.
The way most remote gaming platforms are built, KYC is a gate at the front door. A player registers, the platform runs identity verification and screening, the record is marked “verified”, and the account is opened. From that moment the file sits still. The player’s circumstances change, sanctions and PEP lists change, deposit behaviour changes, and the verification decision made on day one keeps being relied on months and years later as if nothing has moved. Under the Prevention of Money Laundering and Funding of Terrorism Regulations (S.L. 373.01) and the FIAU and MGA Implementing Procedures Part II for the remote gaming sector, that is not what ongoing customer due diligence means.
What Maltese law actually asks of a player file over time
Ongoing monitoring in the PMLFTR is not only transaction scrutiny. It includes an explicit duty to keep the documents, data and information held on a customer up to date, and to review the customer’s risk profile as the relationship develops. The EU’s Fourth Anti-Money Laundering Directive brought remote gaming firmly into scope and set the familiar EUR 2,000 threshold at which customer due diligence must be applied, whether on a single transaction or on linked ones. Malta’s remote gaming implementation reads that cumulatively: the trigger is the first withdrawal, or cumulative deposits reaching EUR 2,000 over a rolling 180-day window, whichever comes first, measured at customer level across brands rather than per transaction.
Free · 4 minutes
Would you survive contact with a determined attacker — or an auditor?
Fourteen questions on access, patching, detection, and recovery — the basics that prevent most real incidents, and the ones most often assumed rather than verified. Banded finding on screen, full sheet by email.
The engineering consequence is precise. Whether a player must be (re-)verified is a function of accumulated behaviour and elapsed time, not a one-off event at registration. If your platform only evaluates that condition once, at sign-up, you have built a control that structurally cannot satisfy the obligation. The FIAU’s March 2026 penalty against Stanleybet — EUR 225,730, with a daily charge until remediation — turned in large part on exactly this: no cumulative tracking across the network, so customers stayed below the threshold outlet by outlet and most were never identified at all. The failure was architectural, not clerical.
Re-verification is a scheduler problem, not a form
Once you accept that verification has to re-run, the design question is: what makes it re-run, and how often? There are four kinds of trigger, and a defensible engine treats them as first-class inputs rather than as ad hoc scripts someone runs when they remember.
- Threshold triggers. Cumulative deposits crossing EUR 2,000 in the rolling window, a first withdrawal, or a jump in stake size relative to the customer’s established pattern.
- Event triggers. A name matching a fresh entry on a sanctions or PEP list, a change of country or payment instrument, a chargeback, or a source-of-funds flag raised by monitoring.
- Time triggers. A maximum age for the verification decision, set by risk band — a high-risk player re-verified far more often than a low-risk occasional one.
- Risk-change triggers. Any recalculation that moves a player into a higher band re-runs the checks appropriate to that band, rather than waiting for the next scheduled sweep.
The cadence is where the risk-based approach earns its keep. A flat “re-verify everyone annually” rule is both wasteful on the low-risk majority and dangerously slow on the high-risk few. The point of a scheduled control is that the schedule is a function of risk, and that the function is written down, applied consistently, and produces evidence every time it fires. This is the same discipline that transaction monitoring architecture demands elsewhere in the estate: the rule set is the control, and it has to be legible to a supervisor.
A re-verification engine, in outline
The core of it is small. A scheduler evaluates each player against the trigger set, decides whether a re-verification is due and at what depth, and — critically — writes an evidence record whether or not action was taken, so that “nothing was due” is itself an auditable decision rather than a silent gap.
# Event- and threshold-triggered KYC re-verification scheduler
# Risk-based cadence; every evaluation is evidenced, including no-ops.
CADENCE_DAYS = {"low": 730, "medium": 365, "high": 180}
def reverification_due(player, now, list_version):
reasons = []
# Time trigger: verification decision has aged past its risk-band limit
max_age = CADENCE_DAYS[player.risk_band]
if (now - player.last_verified_at).days >= max_age:
reasons.append("time_lapsed")
# Threshold trigger: cumulative deposits over the rolling 180-day window
if player.rolling_deposits(days=180) >= 2000 and not player.cdd_since_threshold:
reasons.append("cdd_threshold_2000")
if player.has_first_withdrawal and not player.cdd_since_threshold:
reasons.append("first_withdrawal")
# Event trigger: screening lists moved since the player was last cleared
if player.screened_against_version < list_version:
reasons.append("screening_list_update")
# Risk-change trigger: profile moved up a band since last check
if player.risk_band_changed_up:
reasons.append("risk_band_increase")
return reasons
def run_scheduler(players, now, list_version, evidence_log):
for player in players:
reasons = reverification_due(player, now, list_version)
# Depth scales with risk: standard refresh vs enhanced due diligence
depth = "edd" if player.risk_band == "high" else "standard"
if reasons:
enqueue_reverification(player.id, depth=depth, triggers=reasons)
# Evidence the decision either way — a no-op is still a decision
evidence_log.write(
player_id=player.id,
evaluated_at=now,
triggers=reasons,
action="reverify" if reasons else "none",
list_version=list_version,
)
Two design choices matter more than the rest. First, screening is versioned: the player carries the list version they were last cleared against, and when the list moves, everyone screened against an older version is a candidate for re-screening. That closes the gap where a player onboarded clean and later appeared on a sanctions list nobody re-checked against. Second, the scheduler evidences no-ops. A supervisor asking “how do you know this dormant high-risk player is still clear?” needs a dated record of the last evaluation and its outcome, not an inference from the absence of an alert.
Evidencing perpetual monitoring for the FIAU
The MGA and FIAU do not inspect intentions; they inspect records. What a good re-verification control produces, on demand, is a per-player timeline: when the file was last verified, against which lists and which list version, what triggered each re-run, what depth was applied, and what the outcome was. That timeline is the difference between asserting that monitoring is “ongoing” and demonstrating it. It is also what lets you show a risk-based cadence was actually applied rather than merely written into a policy — the schedule fired, the evidence exists, the high-risk files were touched more often than the low-risk ones.
This is the same shift that identity and screening tooling is going through across licensed gaming. Getting the player verification technology right at onboarding is necessary but not sufficient; the control that supervisors increasingly ask to see is the one that keeps the file alive afterwards. Treating re-verification as a standing scheduled control, evidenced on every pass, is what turns a static verification flag into continuous assurance — the same logic that makes ongoing monitoring rather than one-time approval the defensible posture wherever a decision has to survive contact with a changing world.
A verified-once player file is not a verified player. It is a decision that was true on a date you can no longer point to, being relied upon as if it never expired.
Most technology problems are not technology problems. They are control problems.
The systems exist. The investment has been made. The question is whether leadership can understand, direct, evidence, and sustain what those systems produce. Find out where control exists — and where it only appears to.