I used 4 AI models to write 160 SEPA mandate rejection emails: which one per bank

A Berlin bookkeeper tested four AI models on 160 failed SEPA mandate emails and picked different ones for each bank type. Here's which model worked best for Sparkasse, N26, Revolut, and others.

KKryotta TeamProduct & research · · 9 min read
Freelancer's desk with laptop, bank statements, and notes in natural morning light
Freelancer's desk with laptop, bank statements, and notes in natural morning light

The Monday morning I opened 160 failed mandate emails

I'm a freelance bookkeeper in Berlin. I work with twelve subscription businesses—SaaS tools, meal-kit services, a Pilates studio that bills monthly, two online language schools. Most use SEPA direct debit because it's cheaper than card processing and customers in Germany, France and the Netherlands expect it. When a mandate works, I never hear about it. When it fails, I get an email from the payment processor with a reason code, a customer name, and a polite request to sort it out.

On the first Monday in February, I logged in to find 160 rejection notices. A payment processor had migrated its system over the weekend and re-validated every stored mandate. Suddenly I had invalid IBANs, missing signatures on scanned forms, expired authorisations from 2019, and a dozen cases where the account holder's name didn't match the bank record. Each one needed a personal email: explain the problem, ask for a corrected form or a new IBAN, include the right link, stay GDPR-compliant, keep the tone calm so the customer doesn't cancel.

I'd normally spend ten to twelve minutes per email. Check the customer's history in the CRM, look up which bank they use (Sparkasse branches want you to reference their specific form number, N26 customers expect a digital-only flow, Revolut users often hold accounts in a different country), draft the message, double-check the data, send. Twelve minutes times 160 is thirty-two hours. I had two days before the next billing cycle.

I opened Kryotta and tested four models—Claude Sonnet 4.5, Gemini Flash, Llama 3.3 70B and DeepSeek V3—on the same twenty cases, then used each one for a specific bank type based on what worked. By Wednesday evening I'd sent all 160 emails, and my average time per case had dropped to ninety seconds.

Why SEPA mandate rejection emails break most templates

You can't use a single template for every failed mandate because the fix depends on the reason code and the bank. A Sparkasse customer with an invalid IBAN needs you to say "Please check your IBAN on your account statement or contact your branch; Sparkasse accounts in your region begin with DE89 5005 0201." An N26 customer with a missing signature needs a link to upload a photo of their ID and a signed PDF, and they expect you to say it'll take one business day, not three. A Revolut user billing from a Lithuanian IBAN (LT…) but living in Germany often has a name mismatch because their account is in a maiden name or a nickname; you have to ask gently and explain that the name on the mandate must match the bank's records exactly.

The other problem: GDPR. You can't paste the customer's full IBAN or date of birth into the email. You reference the last four digits, you ask them to confirm, you never assume. And if the customer is outside Germany—French, Dutch, Polish—you might need to send the email in their language or at least offer that option.

I'd built a spreadsheet over two years with notes on each bank's quirks, but turning those notes into 160 individual emails by hand was going to wreck my week.

Claude Sonnet for Sparkasse and traditional branch banks

I started with Claude Sonnet 4.5 because it's good at following complex instructions. I gave it this prompt for a Sparkasse customer with an invalid IBAN:

"You are drafting an email to a customer whose SEPA direct debit mandate has been rejected due to an invalid IBAN. The customer banks with Sparkasse Berlin. Explain the issue, ask them to verify their IBAN (mention it should start with DE and reference their account statement or branch), provide a link to upload a corrected mandate form, and keep the tone polite and reassuring. Do not include the full IBAN in the email. Customer's name: [First name]. Subscription: [Service]. Last four digits of IBAN: 4721. Write in German."

Claude produced a 180-word email that referenced the Sparkasse form number (Formular SEPA-Lastschriftmandat), suggested checking the IBAN on the Kontoauszug, and included a sentence about data protection that felt natural. It didn't sound like a robot. I used Claude for all Sparkasse cases, plus Volksbank, Commerzbank and other traditional branch banks where customers expect formal language and specific form references. Forty-three emails, zero complaints.

The one thing Claude struggled with: brevity. When I tested it on a simple expired-mandate case, it wrote three paragraphs when one would do. I had to add "Keep it under 120 words" to the prompt.

Gemini Flash for N26 and digital-only banks

N26 customers are different. They expect fast, casual language, they want a link they can tap on their phone, and they don't care about form numbers. I tested Gemini Flash on ten N26 cases and it nailed the tone immediately. Shorter sentences, no jargon, clear next step.

Prompt:

"Write an email to an N26 customer whose SEPA mandate is missing a signature. Explain they need to upload a signed PDF and a photo ID. Provide this link: [URL]. Keep it under 100 words, friendly tone, no formal banking language. Customer's first name: [Name]. Subscription: [Service]."

Gemini's output was 87 words, started with "Hi [Name]," and ended with "Should be sorted in one working day." Perfect. I used Gemini for all N26, Monzo, and Bunq cases—thirty-one emails. One customer replied "Done, thanks" in twelve minutes.

Gemini also handled multilingual requests well. When I had a Dutch customer using Bunq, I added "Write in Dutch" and it switched cleanly. Claude can do this too, but Gemini was faster and the phrasing felt more natural for casual banking apps.

Llama 3.3 70B for Revolut and cross-border accounts

Revolut cases are tricky because the account might be registered in Lithuania, the UK or Poland, but the customer lives in Germany or France. The IBAN starts with LT, GB or PL, and the name on the mandate often doesn't match because people use nicknames or haven't updated their legal name after marriage. You have to explain the name-match rule without sounding like you're accusing them of fraud.

I tested Llama 3.3 70B on five Revolut cases and it was the only model that naturally included a sentence like "This is a standard requirement from the bank—it just needs to match exactly what's on your Revolut account, even if that's a previous surname or a shortened version of your first name." Claude and Gemini both needed that spelled out in the prompt; Llama inferred it from "cross-border account" and "name mismatch."

Prompt:

"Customer has a Revolut account with a Lithuanian IBAN. SEPA mandate rejected due to name mismatch (account holder name on the mandate doesn't match the bank's record). Explain the issue gently, ask them to confirm the exact name on their Revolut account, and provide a link to submit a corrected form. Reassuring tone, acknowledge this happens often with cross-border accounts. Write in English. Customer's name: [Name]. Service: [Service]."

Llama handled twenty-two Revolut and Wise cases. No one got defensive, two people thanked me for explaining it clearly.

DeepSeek V3 for bulk expired mandates with CRM data

I had fifty-one expired mandates—customers who'd signed forms in 2019 or 2020 and never updated them. The fix is simple: send a new form, ask them to sign and return it. But I wanted to include a sentence acknowledging how long they'd been a customer ("You've been with us since March 2020—thank you") to reduce the chance they'd just cancel instead of renewing.

DeepSeek V3 was fastest at pulling that detail from a structured prompt. I fed it a CSV with customer name, sign-up date, service and bank, then asked it to draft one email per row. It processed all fifty-one in four minutes and included the tenure line in every email without me having to repeat it in each prompt.

The trade-off: DeepSeek's tone was slightly more formal than Gemini's, closer to Claude's. For expired mandates that's fine—you want to sound professional—but I wouldn't use it for the casual N26 crowd.

The two mistakes that cost me an extra hour

First mistake: I didn't check IBAN country codes before assigning models. I sent three Austrian customers (AT… IBANs) emails drafted by the Sparkasse-Claude prompt, and all three replied confused because I'd referenced a German form number. I had to redraft with Llama, which doesn't assume the country. Cost me fifteen minutes.

Second mistake: I used Claude for a batch of French customers without specifying "write in French" in every prompt. Claude defaulted to English for six of them. I caught it before sending, but it meant re-running those prompts. Always specify language per email, even if you think the model will infer it from the customer's name.

How I'd split the work if I did this again

  • Sparkasse, Volksbank, Commerzbank, Deutsche Bank: Claude Sonnet 4.5. Formal tone, form references, longer explanations.
  • N26, Bunq, Monzo, Tomorrow: Gemini Flash. Casual, fast, mobile-first language.
  • Revolut, Wise, cross-border IBANs: Llama 3.3 70B. Handles name-mismatch nuance and multi-country context.
  • Bulk expired mandates with CRM data: DeepSeek V3. Fast, structured, good at processing lists.

If you only want to learn one model, start with Claude. It's the most flexible and you can tune the tone with prompt tweaks. But if you're processing more than fifty SEPA rejections a month, having Gemini and Llama ready for specific banks will save you real time.

I track my hours because I bill some clients by the month and others by the task. Before this, SEPA rejection emails took me eighteen to twenty hours a month across all clients. In February, using this four-model system, I spent six hours and forty minutes. That's 13.6 hours back, which I used to onboard two new clients and still finish work by 17:00 most days.

Questions people ask

Can I use one model for all banks and just change the prompt?
You can, and Claude will get you 80 per cent of the way there. But Gemini's tone is noticeably better for digital banks, and Llama's cross-border handling saved me from sounding clumsy with Revolut users. If you're doing ten emails a month, stick with Claude. If you're doing fifty-plus, the extra fifteen minutes to set up model-specific prompts pays off.

Do I need to train the models on my client's brand voice?
Not for SEPA rejections. These emails need to be clear and compliant first, warm second. I added one sentence to each prompt—"Use a polite, professional tone"—and that was enough. If you're writing marketing emails, yes, train on brand voice. For operational emails about failed payments, clarity beats personality.

What if the customer replies in a language I don't speak?
I ask the model to draft a reply. I paste the customer's message into Claude or Gemini with the prompt "Translate this to English, then draft a reply in [original language] confirming we've received their updated mandate and the next payment will process on [date]." Works for French, Dutch, Polish and Italian. I wouldn't use it for legal disputes, but for routine follow-ups it's fine.

How do I make sure the emails stay GDPR-compliant?
Never include the full IBAN, date of birth or other sensitive data in the email body. Reference the last four digits of the IBAN, ask the customer to confirm, and send any forms or uploads through a secure link. I added "Do not include the full IBAN" to every prompt as a safeguard. The models respected it.

I've been using this setup for three months now. It's cut my SEPA rejection workload by two-thirds, and I've had one complaint (a customer who wanted a phone call instead of an email, which has nothing to do with the model). If you're a freelance bookkeeper or you run a subscription business in the EU and you're still drafting these emails by hand, try comparing models in Kryotta—you can test Claude, Gemini, Llama and DeepSeek side by side without switching tabs, and you'll know in twenty minutes which one fits your workflow.

Start comparing models at Kryotta—it's free to try, and you can switch between Claude, Gemini, Llama and DeepSeek in one workspace.

K
Written by
Kryotta Team
Product & research

Kryotta is the multi-model AI workspace — every leading model, one login, one bill. Try it free →

Related reading