
A fintech wants to launch a referral program. Users sign up with an email, invite friends, and get paid in USDC when a friend funds an account. The growth team is ready. The compliance team has one question: what happens the day one of those users turns out to hold a sanctioned wallet, and the company already paid it?
That question stops more reward programs at regulated companies than budget does. This post explains where the check has to happen so the answer is "nothing was paid", and what has to be kept so the company can prove it.
Most teams think of screening as something that happens when a user joins. That is a good habit, and it does not cover this case, for two reasons.
At signup there is no wallet yet. The user is an email or a customer id. The wallet that will receive the money often appears weeks later, when the user goes to collect the reward. A check at signup never sees it.
Sanctions lists also change. A wallet that was clean in March can be listed in May. A program that checks once and pays for a year is exposed for the whole year.
So the check has to happen right before the money moves, on the wallet that will receive it.
Every reward in Fuul follows the same path. A user does something the program rewards, for example a friend funds an account. Fuul records the reward. When the user adds a wallet, Fuul checks that wallet against a compliance provider. Only then does the reward become claimable.
The provider is the company's choice. Chainalysis or any other screening vendor plugs into Fuul, and each program turns the check on or off.
The important part is the timing. The check runs after the wallet is known and before any payment is possible. Users who joined with an email are checked as a wallet, not as an email, and at the moment that wallet becomes relevant.
If the wallet is clean, the reward goes out as usual.
If the wallet is flagged, the reward is blocked. Fuul never holds the funds: rewards are paid directly from the program's contract to the user when the user claims. A blocked reward is simply never made claimable. There is no payment to reverse and nothing to claw back. From the user's side, there is nothing to collect.
A blocked reward that vanishes is a problem of its own. If an auditor asks what happened to a specific user's reward and the answer is "we skipped it", there is no proof it was skipped for the right reason.
So Fuul keeps a record of every reward, paid or blocked. For a blocked one, the record shows the wallet that was checked, the reason it was blocked, the amount that would have been paid, and when the decision was made. For users who joined with an email, the record also keeps the email that led to that wallet.
That record, in the same format for every payout the program ever made, is what the compliance team hands to the auditor.
Teams sometimes confuse this with the blacklist they already manage. They are different tools.
A blacklist is a list the company keeps. It holds wallets the company does not want in its program, for fraud, abuse, or its own policy. A wallet on the blacklist never earns a reward in the first place.
Screening checks against an outside list the company does not control, like a sanctions list. The user may have earned the reward fairly. The wallet still cannot be paid.
Most programs want both. They answer different questions: "why did this wallet earn nothing" points to the blacklist, "why was this earned reward not paid" points to screening.
The compliance team's question has a short answer once the check sits right before the payment. The wallet was checked at the moment it became the destination for the money, against a live list, and the result was recorded next to the reward. If it was blocked, nothing was paid. If it was allowed, the record shows when and against what.
That is what lets a fintech run a referral or activation program in stablecoins with the same controls it applies to any other outgoing payment, without the growth team building a screening system of its own.
If you distribute a stablecoin or run rewards on a regulated product, talk to us at fuul.xyz and we will show you where the check plugs into your program.
In nec dictum adipiscing pharetra enim etiam scelerisque dolor purus ipsum egestas cursus vulputate arcu egestas ut eu sed mollis consectetur mattis pharetra curabitur et maecenas in mattis fames consectetur ipsum quis risus mauris aliquam ornare nisl purus at ipsum nulla accumsan consectetur vestibulum suspendisse aliquam condimentum scelerisque lacinia pellentesque vestibulum condimentum turpis ligula pharetra dictum sapien facilisis sapien at sagittis et cursus congue.
Convallis pellentesque ullamcorper sapien sed tristique fermentum proin amet quam tincidunt feugiat vitae neque quisque odio ut pellentesque ac mauris eget lectus. Pretium arcu turpis lacus sapien sit at eu sapien duis magna nunc nibh nam non ut nibh ultrices ultrices elementum egestas enim nisl sed cursus pellentesque sit dignissim enim euismod sit et convallis sed pelis viverra quam at nisl sit pharetra enim nisl nec vestibulum posuere in volutpat sed blandit neque risus.

Feugiat vitae neque quisque odio ut pellentesque ac mauris eget lectus. Pretium arcu turpis lacus sapien sit at eu sapien duis magna nunc nibh nam non ut nibh ultrices ultrices elementum egestas enim nisl sed cursus pellentesque sit dignissim enim euismod sit et convallis sed pelis viverra quam at nisl sit pharetra enim nisl nec vestibulum posuere in volutpat sed blandit neque risus.
Feugiat vitae neque quisque odio ut pellentesque ac mauris eget lectus. Pretium arcu turpis lacus sapien sit at eu sapien duis magna nunc nibh nam non ut nibh ultrices ultrices elementum egestas enim nisl sed cursus pellentesque sit dignissim enim euismod sit et convallis sed pelis viverra quam at nisl sit pharetra enim nisl nec vestibulum posuere in volutpat sed blandit neque risus.
Vel etiam vel amet aenean eget in habitasse nunc duis tellus sem turpis risus aliquam ac volutpat tellus eu faucibus ullamcorper.
Sed pretium id nibh id sit felis vitae volutpat volutpat adipiscing at sodales neque lectus mi phasellus commodo at elit suspendisse ornare faucibus lectus purus viverra in nec aliquet commodo et sed sed nisi tempor mi pellentesque arcu viverra pretium duis enim vulputate dignissim etiam ultrices vitae neque urna proin nibh diam turpis augue lacus.