What to show users after a failed KYC check (and why a blank page is the worst answer)
A failed KYC isn't a failed visitor. Here's the playbook for converting the rejection moment into a compliant, useful next step — and why the static "we couldn't verify your account" page is leaving money on the table.
A user signs up. Submits their docs. The KYC API returns failed. Most platforms now do one of three things:
- Show a static "we couldn't verify your account, please contact support" page.
- Auto-redirect to a help center article.
- Silently log them out.
All three are wasted moves. The visitor is already authenticated as a real human, has expressed deposit / signup intent, and has a verified email address with you. That's a more valuable session than 95 % of your inbound paid traffic. Throwing them at a static panel is the publisher equivalent of burning money.
What the data says
Across the publishers we've worked with, the post-KYC-fail moment has these signal-strength characteristics:
- 5–9× the click-through rate of cold display impressions.
- 2–4× the eCPM of in-region overlays.
- ~70 % of users will engage with something on the page rather than bouncing immediately.
The reason is simple: friction. The visitor invested time in your funnel. They're at the bottom of an investment curve and looking for an off-ramp that isn't "give up and close the tab".
The compliant alternative
This is exactly the moment Decline Popup was built for. Instead of the static rejection page, you fire the overlay manually from your KYC handler:
// In your KYC failure callback
window.RetargetWidget?.showDecline({
reason: "kyc_failed",
metadata: { sessionId: req.sessionId },
});The overlay surfaces an offer that's:
- Eligible in the user's region (your KYC just confirmed where they are).
- From a different vertical or operator than your own product.
- Tagged with the rejection context so advertisers can bid differently for KYC-fail vs cooling-off vs risk-flag triggers.
The user gets a useful next step. You earn per click. Your KYC vendor's failure rate becomes a revenue line.
See Widget decline integration for the full callback surface.
The compliance question
Every operator we onboard asks: "Can we legally do this?" Short answer: yes, because you are not the advertiser. You're showing the user a third-party offer. The advertiser is the one bound by license to be eligible in that region, and ReTarget enforces that at auction time.
The longer answer is: check your jurisdiction's specific rules around "post-rejection routing", and make sure your decline page makes clear that the user is being shown sponsored offers from third parties. We surface this disclosure in the overlay header by default.
What to instrument
If you wire Decline Popup, add these to your dashboard:
- Decline volume by reason (KYC vs risk vs cooling-off vs no-deposit).
- Decline → impression rate (should be 100 % minus a small no-eligible-offer rate).
- Decline → click rate (target 8–12 % for KYC-fail).
- Decline → revenue per session (compare to your acquisition CPM).
The fourth metric is the one that gets the next conversation with finance going.
Where to start
- Add your website and grab your keys.
- Install Decline Popup — same script tag as the geo widget, with extra hooks.
- Wire your KYC handler.
- Watch for the first 50 declines, validate the offers shown, then scale.
Want help routing your specific KYC vendor (Veriff, SumSub, Persona, Onfido, etc.)? Contact the team and we'll send a sample integration.
Ready to monetize blocked traffic?
Two-minute install, free for publishers. The network handles eligibility, advertiser demand, and payouts.