Designing scam reporting flows that collect useful fraud data without pressuring users.
When a user sends money to a recipient flagged as high risk, a full-screen modal requires them to disclose the purpose of payment before continuing. I worked with the fraud team to define the options. Legitimate reasons (paying a friend or family member, a corporation, a bank, or a government entity) sit alongside categories that map to common Zelle scams (marketplace purchase not yet received, security deposit for a vacation rental). The language needed to be neutral enough that users with legitimate payments wouldn't feel accused, while still capturing the signal the fraud team needs to identify patterns.

When a user adds a new recipient and tries to send money immediately, they see a full-screen modal with scam protection tips. The tone here was critical. Too aggressive and users feel like the bank is accusing them of something. Too soft and the tips get ignored. I wrote the content as a quick checkpoint: clear, factual, and non-judgmental. Users acknowledge they are not being scammed and continue, or they cancel.

Both flows converge on the same question after cancellation: was this a potential scam? The overlay needed to encourage users to report without making them feel obligated. Some users cancel for reasons that have nothing to do with fraud, and they should not feel pressured to file a report. I wrote the messaging to acknowledge that cancellation could mean anything, then gently surface the option to report if the user believes the recipient was running a scam. The goal was to collect real signal without polluting the data with reports from users who just changed their mind.


The scam reporting flows shipped to all 14M Zelle users, giving the bank its first structured channel for collecting scam signal directly from the cancellation experience. The data feeds back to the fraud team to refine risk rules and update the scam warnings users see, creating a loop where each report makes the next warning more accurate.