Profee · 2025

KYC verification: from email to app KYC‑верификация: из письма в приложение

You can’t send money without KYC. But when people hit verification with no explanation, they leave or write to support. I mapped every place we ask for verification and redesigned how each one starts. Verification questions to support halved

Без KYC-верификации переводить деньги нельзя. Но когда человек упирается в неё без внятного объяснения, он уходит или пишет в поддержку. Я собрала все сценарии, где просят пройти верификацию, и переделала точку входа в каждом. Вопросов о верификации в поддержку стало вдвое меньше

My roleМоя роль
The only designer on the project, working under the head of design. I dug out every scenario together with the UX writer and the KYC team and built a huge Figma map from them that we still keep up to date. I came up with one component in three forms, built it into our new design system and designed every iOS, Android and web screen. Worked closely with developers on what to show and when. Reviewed the front end and went through the metrics after launchЕдинственный дизайнер на проекте, работала под руководством хеда дизайна. Сценарии раскапывала вместе с UX-редактором и командой KYC и собрала из них огромную карту в Figma — мы до сих пор её обновляем. Придумала один компонент в трёх формах, завела его в новую дизайн-систему и спроектировала все экраны iOS, Android и веба. Плотно работала с разработкой над тем, что и когда показывать. Делала ревью фронта и разбирала метрики после запуска
TeamКоманда
Product manager, UX writer, KYC team, head of design (my manager) for guidance and review, iOS and Android developers, backend and QAПродакт-менеджер, UX-редактор, команда KYC, хед дизайна (мой руководитель) — поддержка и ревью, iOS- и Android-разработчики, бэкенд и QA
TimelineСроки
~3 months, 2025~3 месяца, 2025
PlatformsПлатформы
iOS, Android and webiOS, Android и веб
Verification success flow Успешная верификация Docs submitted → checking state → confirmed Документы отправлены → проверка → готово

Profee is a cross-border remittance platform Profee — платформа международных переводов

Users send money internationally – from Europe to India, Pakistan, Uzbekistan, and other countries. AML rules require KYC (Know Your Customer) identity verification: until a user passes it, they can only send within a limit

Пользователи отправляют деньги за границу — из Европы в Индию, Пакистан, Узбекистан и другие страны. По требованиям AML каждый пользователь должен пройти KYC, то есть подтвердить личность. Пока он этого не сделал, переводить можно только в пределах лимита

Ten scenarios, zero consistency Каждый сценарий объяснял верификацию по-своему

Verification surfaced in ten scenarios across app and web, each with its own copy, hierarchy and CTA label

Верификация появлялась в десяти сценариях в приложении и вебе — и в каждом были свои тексты, своя иерархия и своя кнопка

Not everyone understood what we were asking – or that they needed to verify at all. Some gave up on the app. Others asked support basic questions the UI should have answered
Не все понимали, что от них хотят, — или что верификация им вообще нужна. Кто-то бросал приложение. Кто-то шёл в чат поддержки с простыми вопросами, на которые должен был ответить интерфейс

Source: review of support chat enquiries, 2025

Источник: разбор обращений в чат поддержки, 2025

In the app, entry points ranged from vague banners to hard blocks with no explanation. The main reminder wasn’t in the app at all: an email with a link to a bot, and people told support that going from an email into a bot felt suspicious. Then there was KYC Refresh: verified users whose documents expire

В приложении точки входа были какими угодно — от невнятных баннеров до жёстких блокировок без объяснений. А главное напоминание вообще жило за пределами приложения: в письме, из которого нужно было перейти в бота. В чатах поддержки люди так и писали: переходить из письма в какого-то бота подозрительно. И отдельная история — KYC Refresh: уже проверенные пользователи, у которых истекают документы

Profee Customer Support <support@profee.com> Additional information required

Dear Customer,

Thank you for choosing Profee! We would like to inform you that your Profee account is currently under review. In order to finalize our standard checks on your account, we require some additional information.

We kindly ask you to provide us with a proof of address document. As proof of address we may accept one of the following:

  • House insurance
  • Bank statement
  • Municipal tax bill
  • Utility bill (electricity, water, etc.)
  • Residence permit that lists your address in EU, UK or Switzerland

Please ensure that the document is not older than 6 months and states your current address. Kindly note that all four corners of the document must be visible.

To fulfill these requirements, you are kindly requested to follow the instructions here: https://www.profee.com/transfer/verification

We remain at your disposal for any clarifications that you might need.

Regards,
Profee Customer Support

Document request Запрос документов It opens with pleasantries, the ask is mid-letter, and the only action is a link out of the inbox to the bot Письмо начинается с любезностей, сама просьба — где-то в середине, а сделать можно только одно: перейти по ссылке в бота

The goal

In every scenario the user should understand at once why verification is needed and what to do next. Success meant three things: more new users get verified, already verified users renew their documents before they expire, and fewer people ask support about verification

Цель

В любом сценарии человек сразу понимает, зачем нужна верификация и что делать дальше. Успехом считали три вещи: больше новичков проходят верификацию, уже проверенные пользователи обновляют документы до окончания срока, а с вопросами о верификации реже пишут в поддержку

Mapping every scenario before designing anything Карта сценариев до экранов

Before touching a single screen, I built a complete map of all verification states across both platforms

Прежде чем рисовать экраны, я собрала карту всех состояний верификации на обеих платформах

01

Audit and support research

Аудит и разбор обращений

Catalogued every place in app and web where verification could surface – ten scenarios, each with different copy and CTAs. With a Customer Experience Specialist, went through support chat enquiries to see where people got stuck and what they asked

Собрала все места в приложении и вебе, где появляется верификация, — вышло десять сценариев с разными текстами и кнопками. Вместе со специалистом по клиентскому опыту разобрала обращения в чат поддержки: где люди застревали и о чём спрашивали

02

Display rules with the developers

Правила показа вместе с разработкой

For every state we agreed with the developers what to show and at which moment: a card or a sheet, when it can be closed and when it can’t. This was the hardest part of the project

Для каждого состояния договорились с разработчиками, что и в какой момент показывать: карточку или шторку, когда её можно закрыть, а когда нет. Это была самая сложная часть проекта

One component in three forms Один компонент в трёх формах

One entry point component in three forms – a card on the main screen, a bottom sheet mid-flow and a status banner. Each has an illustration, a clear status message and one primary action. It became part of our new design system, so app and web use the same component. Three decisions shaped it:

Один компонент точки входа в трёх формах: карточка на главном экране, шторка во время перевода и баннер статуса. В каждой — иллюстрация, понятный статус и одна главная кнопка. Компонент вошёл в новую дизайн-систему, поэтому в приложении и вебе он один и тот же. За компонентом стоят три решения:

Bottom sheet component in Figma with its properties panel: type Message, toggles for illustration, subtitle, close button and buttons, illustration picked by name, primary, secondary and ghost buttons
The bottom sheet in our new design system: each verification scenario is the same component with its own illustration, text and buttons switched on · Open full size ↗ Шторка в новой дизайн-системе: каждый сценарий верификации — тот же компонент, только со своей иллюстрацией, текстом и кнопками · Открыть целиком ↗
01

One default action

Одно действие по умолчанию

The button is almost always Open bot – verification happens there, so people learn it once. It changes only when the bot can’t help: a limits review goes to support, extra details go to email. The bot stayed, but the way in changed: people open it from the app, on a screen that explains why, not from an email link

По умолчанию кнопка одна — «Открыть бота»: верификация проходит там, и действие достаточно запомнить один раз. Кнопка меняется, только если бот не поможет: проверка лимитов ведёт в поддержку, запрос доп. данных — в почту. Бот остался, но путь к нему стал другим: его открывают из приложения, с экрана, где объяснено, зачем, а не по ссылке из письма

02

The closer the deadline, the firmer the reminder

Чем ближе срок, тем настойчивее напоминание

While docs are only expiring, the nudge can wait: a sheet with “Do it later” and a banner the user can close. Once they’ve expired, the sheet comes back on launch and a card stays on the main screen and in the profile until the docs are updated

Пока документы только истекают, напоминание может подождать: шторка с кнопкой «Сделать позже» и баннер, который можно закрыть. Когда срок вышел, шторка появляется при каждом запуске, а карточка висит на главном экране и в профиле, пока документы не обновят

03

The review doesn’t block you while there’s limit left

Пока есть лимит, проверка не мешает

Once documents are submitted, a status banner replaces the prompt. While there’s limit left, the user keeps sending during the review. Only when the limit is used up does Continue wait for the result

Когда документы отправлены, вместо призыва появляется баннер со статусом. Пока лимит не исчерпан, человек может переводить деньги и во время проверки. Кнопка «Продолжить» ждёт результата, только когда лимит закончился

The system at a glance

Ten states, one component in three forms – every state has exactly one place and one action

Вся система целиком

Десять состояний, один компонент в трёх формах: у каждого состояния своё место и одно действие

Entry point
Точка входа
User states
Состояния пользователя
Form
Форма
App · Main screenПриложение · Главный экран
Docs needed, not finished, failed, checking – 4 scenariosНужны документы, верификация не закончена, не пройдена, на проверке — 4 сценария
Card, sheet or status banner → one primary action, Open bot by defaultКарточка, шторка или баннер статуса → одна главная кнопка, по умолчанию «Открыть бота»
App · Mid-transferПриложение · Во время перевода
Close to the limit, limit reached, limits review, extra details – 4 scenariosБлизко к лимиту, лимит исчерпан, проверка лимитов, доп. данные — 4 сценария
Bottom sheet: the reason + one primary actionШторка: причина и одна главная кнопка
KYC Refresh · Main screen + ProfileKYC Refresh · Главный экран и профиль
Docs expiring (3–4 months before the block) or expired – 2 scenariosДокументы скоро истекут (за 3–4 месяца до блокировки) или уже истекли — 2 сценария
Nudge that can wait → card that staysНапоминание, которое можно отложить → карточка, которую не закрыть

Try it: one component, every scenarioПопробуйте: один компонент на все сценарии

Pick a situation – the phone shows how the app explains it and what the one button does. Or let them play

Выберите ситуацию — телефон покажет, как приложение её объясняет и что делает единственная кнопка. Или включите показ всех по очереди

First-time verificationПервая верификация

From “docs needed” to “we’re checking” – the main screen always shows where the user is

От «нужны документы» до «проверяем» — на главном экране всегда видно, на каком этапе человек

Transfers screen with 'Extra documents needed' entry point banner
Docs needed Нужны документы Entry point card on the main screen, titled “Extra documents needed” – visible, not blocking. One clear action: Open bot Карточка «Нужны доп. документы» на главном экране — заметна, но ничего не блокирует. Одна кнопка: «Открыть бота»
'Finish verification' modal with megaphone illustration
Finish verification Завершите верификацию Started but didn’t finish – a nudge to come back and complete the flow Человек начал и бросил — мягко напоминаем вернуться и закончить
'Verification didn't go through' modal with cat illustration
Verification failed Верификация не прошла Friendly error state: what happened and a clear recovery path Спокойная ошибка: что случилось и что делать дальше
Transfers main screen with 'Checking your docs' status banner
Checking docs Проверяем документы Docs submitted, review in progress Документы отправлены, идёт проверка

Mid-transfer: limits & checksВо время перевода: лимиты и проверки

Verification surfaces right when the user tries to send. A hard stop comes only when the limit is used up – and always with the reason and one next step

Верификация появляется, когда человек отправляет деньги. Перевод останавливаем, только если лимит исчерпан, и всегда объясняем причину и даём один следующий шаг

'You have X EUR left to send' bottom sheet
Close to the limit Близко к лимиту Before the block: how much is left, and two ways out – verify in the bot or change the amount Ещё до блокировки: сколько осталось и два выхода — пройти верификацию в боте или изменить сумму
'Today's limit reached' bottom sheet
Limit reached Лимит исчерпан Daily limit hit – verification in the bot unlocks more Дневной лимит исчерпан — верификация в боте его увеличит
'Let us check the limits first' bottom sheet
Limits review Проверка лимитов The bot can’t solve this one – so the action switches to Contact support Здесь бот не поможет, поэтому кнопка — «Написать в поддержку»
'Check your email' bottom sheet
Check your email Проверьте почту Extra documents are requested by email – the action opens the mail app Дополнительные документы запрашивают письмом — кнопка открывает почтовое приложение

KYC Refresh: expiring documentsKYC Refresh: документы истекают

Previously verified users are nudged before their docs expire – and can’t miss it once they have. Two branches: expiring and expired

Проверенным пользователям напоминаем заранее, а когда срок вышел — пропустить напоминание уже нельзя. Две ветки: скоро истекут и уже истекли

Main screen with a dismissible “Let’s update your docs” banner showing the deadline
Docs expiring · banner you can close Документы скоро истекут · баннер можно закрыть Shows the deadline – “by X” – and has a close button: there’s still time Указан срок «до X» и есть крестик: время ещё есть
Main screen with a persistent 'Let's update your docs' card without a close button
Docs expired · card that stays Документы истекли · карточку не закрыть No close button – the card stays at the top until the docs are updated. One action: Open bot Без крестика — карточка остаётся наверху, пока документы не обновят. Одна кнопка: «Открыть бота»

Web: the same states in the browserВеб: те же состояния в браузере

First-time verification, mid-transfer limits and KYC Refresh, rendered in the mobile browser on the Send money screen: same illustrations, same copy and the same actions as in the app

Первая верификация, лимиты во время перевода и KYC Refresh в мобильном браузере, на экране отправки денег. Иллюстрации, тексты и действия — те же, что в приложении

Web Send money screen with an 'Extra documents needed – Open bot' card above the transfer form
Docs needed Нужны документы Card above the transfer form, which stays visible – the user sees what they are unlocking Карточка стоит над формой перевода, и форма остаётся на виду: понятно, что откроется после верификации
Web 'Finish verification' sheet with megaphone illustration
Finish verification Завершите верификацию Same megaphone, same nudge as in the app – Finish or Not now Тот же мегафон и то же напоминание, что в приложении: «Завершить» или «Не сейчас»
Web: 'Upload failed' inline state and 'Verification didn't go through' sheet with Open bot
Verification failed Верификация не прошла Upload failed inline, the sheet explains why – and the way out is still Open bot Ошибка загрузки видна прямо в карточке, шторка объясняет причину, а выход всё тот же — «Открыть бота»
Web main screen with 'Checking your docs' status banner and Continue active
Checking docs · limit left Проверяем документы · лимит есть Status banner on top, Continue stays active – the transfer goes through during the review Сверху баннер статуса, кнопка «Продолжить» активна — перевод проходит и во время проверки
Web main screen with 'Checking your docs' status banner and Continue disabled
Checking docs · no limit left Проверяем документы · лимит исчерпан Same banner, but Continue waits for the review to finish Тот же баннер, но кнопка «Продолжить» ждёт окончания проверки
Web 'You have X EUR left to send' sheet with Open bot and Change amount
Close to the limit Близко к лимиту Over the transfer form: how much is left – verify in the bot or change the amount Поверх формы перевода: сколько осталось и два выхода — пройти верификацию в боте или изменить сумму
Web 'Today's limit reached' sheet with Open bot
Limit reached Лимит исчерпан Same sheet as in the app – verification in the bot unlocks more Та же шторка, что в приложении: верификация в боте увеличит лимит
Web 'Let us check the limits first' sheet with Contact support
Limits review Проверка лимитов The bot can’t solve this one – so the action switches to Contact support Здесь бот не поможет, поэтому кнопка — «Написать в поддержку»
Web 'Check your email' sheet with Open email
Check your email Проверьте почту Extra documents are requested by email – the action opens the mailbox Дополнительные документы запрашивают письмом — кнопка открывает почту
Web 'Let's update your docs' sheet with Open bot and Do it later
Docs expiring Документы истекают Deadline “by X”, secondary action Do it later – there is still time Срок «до X» и вторая кнопка «Сделать позже» — время ещё есть
Web 'Let's update your docs' sheet for expired documents with Open bot and All clear
Docs expired Документы истекли Same sheet; the secondary action is All clear instead of Do it later Та же шторка, но вторая кнопка — «Понятно» вместо «Сделать позже»

Verification questions to support halved Вопросов о верификации в поддержку стало вдвое меньше

Tickets tagged as verification, June–July 2025 against November–December 2025. There were 52% fewer of them, while new users grew by 5% – so per 1,000 new users:

Обращения с тегами верификации за июнь–июль и ноябрь–декабрь 2025. Их стало на 52% меньше, а новичков пришло на 5% больше — поэтому на каждую тысячу новичков:

−54%
Jun–Jul → Nov–Dec 2025июнь–июль → ноябрь–декабрь 2025
Verification tickets
per 1,000 new users
Обращений о верификации
на каждую тысячу новичков

The questions the interface should have answered now get answered in the interface: the card explains why verification is needed and gives one next step

На вопросы, на которые должен был отвечать интерфейс, теперь отвечает интерфейс: карточка объясняет, зачем нужна верификация, и даёт один следующий шаг

New users

Before, the main entry point was an email – Amplitude doesn’t see it, so there’s no clean “before” to compare with. But the card rolled out in steps: Android on 30 July 2025, iOS on 4 September, the rest in October. So each platform became the control for the other – same season, but only one of them had the card:

Новички

Раньше главной точкой входа было письмо, а письма Amplitude не видит, так что честного «до» для сравнения нет. Зато карточку запускали по очереди: Android — 30 июля 2025, iOS — 4 сентября, остальное — в октябре. Поэтому платформы стали контрольной группой друг для друга: сезон один, а карточка есть только у одной:

+0.6 pp+0,6 п. п.
Aug 2025, card on Android onlyавгуст 2025, карточка только на Android
What Android gained on iOS in new users verified within 30 days: the 0.6 pp it trailed by in July was gone
Столько Android отыграл у iOS по доле новичков, прошедших верификацию за 30 дней: июльское отставание в 0,6 п. п. исчезло
+1.4 pp+1,4 п. п.
Sep 2025, card on iOS tooсентябрь 2025, карточка и на iOS
What iOS gained on Android the next month: from level to 1.4 pp ahead
Столько iOS отыграл у Android в следующем месяце: от равенства до отрыва в 1,4 п. п.
59%
Nov–Dec 2025ноябрь–декабрь 2025
Card viewers who click the main button
Из увидевших карточку нажимают главную кнопку

Before the card, Android trailed iOS by 0.6–1.2 pp every month. The gap moved towards whichever platform had the card, and once both had it, it went back to its usual size

До карточки Android каждый месяц отставал от iOS на 0,6–1,2 п. п. Разрыв каждый раз смещался в пользу платформы, где уже была карточка, а когда она появилась на обеих, вернулся к обычному

KYC Refresh

For already verified users the question is different: do they renew in time? Users who first saw the “docs expiring” card from August 2025 to May 2026:

KYC Refresh

Для уже проверенных пользователей вопрос другой: успевают ли они обновить документы вовремя. Из тех, кто впервые увидел карточку «Документы скоро истекут» с августа 2025 по май 2026:

27%
before the deadlineдо окончания срока
Renew their documents in time
Обновляют документы вовремя
47%
after the deadlineпосле окончания срока
Let them expire and get the card that stays
Пропускают срок и видят карточку, которую не закрыть
26%
after the deadlineпосле окончания срока
Never open the app again, so never see the card
Больше не заходят в приложение и карточку не видят

The card that stays gets noticed straight away: 43% of those who see it tap it, with a median of 12 seconds. The people we lose are the quarter who never come back to the app

Карточку, которую нельзя закрыть, замечают сразу: 43% увидевших нажимают на неё, медиана — 12 секунд. Теряем мы тех, кто в приложение больше не возвращается, — это каждый четвёртый

How I measured it: there was no A/B test, so these numbers are estimates from the staggered rollout, Amplitude and support tags. The card helped the platform that had it, but the total number of verifications over the quarter stayed flat, so I don’t claim more verified users overall

Как считала: A/B-теста не было, поэтому это оценки по поэтапной раскатке, Amplitude и тегам поддержки. Карточка помогала той платформе, где появилась, но общее число верификаций за квартал не изменилось, так что я не утверждаю, что верифицированных в целом стало больше

Trade-off

Компромисс

From the early rollout (Aug–Sep) to the full launch (Nov–Dec) clicks grew by 72%, completions after the click only by 10% – about one new completion for every ten new clicks. Click-to-completion conversion fell from 74% to 47% because the funnel now holds people who never reached it before: a third of the Nov–Dec clicks came from Check your email, a request that used to live only in the letter. The entry points now bring people in – we lose them after the click, and that’s where the next iteration goes

От ранней раскатки (август–сентябрь) до полного запуска (ноябрь–декабрь) нажатий стало на 72% больше, а завершений после нажатия — всего на 10%: примерно одно новое завершение на десять новых нажатий. Конверсия из нажатия в пройденную верификацию упала с 74% до 47%: в воронку попали те, кто раньше до неё вообще не доходил. Треть нажатий в ноябре–декабре пришла из «Проверьте почту» — запроса, который раньше был только в письме. Точки входа приводят людей, а теряем мы их уже после нажатия — туда и пойдёт следующая итерация

What I learned, and what’s next Что я поняла и что дальше

Not every exception could be designed away. A limits review still goes to support and extra documents still go to email – the bot can’t handle them yet, for technical reasons. That friction is real. But each exception now explains why it happens and gives one clear next step

Не все исключения удалось убрать дизайном. С проверкой лимитов человек по-прежнему уходит в поддержку, а с дополнительными документами — на почту: бот пока не умеет их обрабатывать по техническим причинам. Это неудобство никуда не делось. Зато теперь каждое исключение объясняет, почему так, и даёт один понятный следующий шаг

Not everything stuck

Along with the entry points we launched a sheet right after a successful transfer: you’re close to your limit, verify now to keep sending. Almost everyone closed it – nobody wants to take care of their future self the moment a transfer goes through – so we dropped it. A limit reminder works when the limit gets in the way: at the moment of sending

Не всё прижилось

Вместе с точками входа мы запустили шторку сразу после успешного перевода: лимит почти исчерпан, пройдите верификацию сейчас. Почти все её закрывали — когда перевод только что прошёл, о следующем думать не хочется, — и мы её убрали. Напоминание о лимите работает тогда, когда лимит мешает, то есть в момент отправки

'Let's lift your limit' sheet over the successful transfer screen, with a limit progress bar and Open bot
Dropped: lift the limit after a transfer Убрали: шторку про лимит после перевода Right after a successful transfer nobody wanted to think about the next one Сразу после успешного перевода о следующем никто думать не хотел

If I’d had more time, I’d have gone after the people who miss the deadline. About a quarter never open the app again once their documents expire, so no card inside the app can reach them – it needs a channel outside it

Будь у меня больше времени, я бы разобралась с теми, кто пропускает срок. Примерно каждый четвёртый после истечения документов в приложение больше не заходит, и карточка внутри до него не дотянется — нужен канал снаружи

What’s next

Extra documents are still requested by email and checked by support by hand – that is being automated now. The longer goal is to bring the whole verification into the app: upload documents, see their status and fix problems there, without leaving for the bot – that’s where we lose people after the click

Что дальше

Дополнительные документы пока запрашивают письмом, а проверяет их поддержка вручную — сейчас мы это автоматизируем. А в перспективе — перенести верификацию в приложение целиком: загружать документы, следить за статусом и решать проблемы прямо там, без перехода в бота — именно там мы теряем людей после нажатия

Next case

Следующий кейс

Top up without leaving the transfer Пополнить, не выходя из перевода