$80 million raised. Crypto side worked. They could move value across chains in seconds. Then they tried to add fiat withdrawal.

Two years. $12 million spent. Still couldn't settle customer withdrawals to bank accounts within 48 hours.

Not a technical problem. They didn't understand how money actually moves through banks.

Crypto payment companies consistently mess this up. They treat fiat as an optional feature to bolt on at the end. Like blockchain payments but slower. You just send money from one account to another, right?

Wrong.

Fiat settlement requires understanding payment systems you've never touched, building relationships with institutions that don't trust crypto companies, and hitting settlement SLAs that are way tighter than blockchain offers. Most fintechs get this wrong because they fundamentally don't understand how the system works.

The three rails and their specific problems

When a user withdraws $50,000 from your crypto platform to their bank account, the money moves through one of three systems depending on location.

ACH in the U.S. Automated Clearing House. Backbone of U.S. bank transfers. Real-time ACH exists now but don't believe the hype. Most banks don't support it. Most transfers still batch, three to five times daily. A payment at 2 PM might not settle until the next morning.

ACH also has limits. Most banks cap individual transfers at $25,000 unless you've done extra paperwork. $50,000 withdrawal? That's multiple transactions. That's complexity.

SEPA in Europe. Faster theoretically. Same-day settlement usually. Except weekends and holidays create delays. Friday evening transfer? It settles Monday morning. And SEPA requires exact name matching. "JOHN SMITH" sends fine. "JOHN P SMITH" rejects and bounces two days later.

SWIFT internationally. Byzantine doesn't even describe it. Takes three to five days. Correspondent banking means your bank asks another bank to ask another bank to move the money. Fees are enormous and opaque. SWIFT is for corporate transfers, not retail. If you're building payments for global users, SWIFT is a last resort.

Most startups don't realize these rails exist as different systems until they're already live. Then they discover the rail they picked doesn't work for their use case and switching takes six months.

Why banks won't work with you

To use these rails, you need a partner bank.

This is where crypto companies hit a wall.

A bank executive told me last year that their compliance team requires any crypto-connected entity to undergo 90-day due diligence. During those 90 days, zero transactions. It's a test period. They're watching for complaints to regulators.

Getting banking relationships as a crypto company is slow. The bank doesn't understand what you do. They need someone to explain blockchain to people who've never used it. They need to understand your compliance framework, which means you need one. They want to know who your users are. They want to see transaction patterns first.

So most crypto payment companies use specialized processors instead of banks. Silvergate, Signature Bank, Evolving Systems. Bridge the gap. They understand crypto. They have banking relationships. They process crypto transactions.

This adds layers. You're not talking to a bank. You're talking to a processor who talks to a bank. That means higher fees and less control. When the processor goes down, your payments go down.

2023 was brutal. Silvergate, Signature Bank, SVB all closed. Crypto payment companies that built everything around those banks had to scramble to find new partners. Some didn't find anyone and shut down.

That's not theoretical. That happened.

Settlement SLAs are completely different on fiat

Blockchain and fiat live in different time universes.

Bitcoin settles in about 10 minutes. Ethereum, 15 seconds for first confirmation, a couple minutes finalized. Users expect fast settlement.

Fiat settlement is measured in days.

User withdraws $10,000 to their bank account. You send an ACH instruction immediately. That instruction doesn't actually move until the next batch window, maybe two hours later. Payment clears from your bank's perspective in six hours. But the receiving bank doesn't credit the user's account until the next morning.

From the user's perspective, the transfer took 24 hours.

Users who moved crypto expect instant settlement. This feels like an outage. "I sent money to my bank last night and still don't have it." They call support. The reality is that this is normal ACH behavior. But normal doesn't feel good to someone used to blockchain.

Your system needs to handle this. You can't mark the user's balance as "sent" immediately because the ACH instruction might fail and bounce back in two days. Two options exist. Either don't update their balance until ACH clears, which means they don't see the money leave for two days. Or mark it "pending" and hold funds in limbo while ACH clears.

First option? Users hate the UX. Second option? You need to build a system to track pending transfers, handle rejections, retry failures, update users when they finally settle.

That's harder than it sounds.

Crypto settlement is instant. Fiat settlement is delayed and uncertain. That creates friction your users will complain about, and you can't fix it. You can only manage it.

Reconciliation is a nightmare nobody expects

Fiat settlement creates a reconciliation problem that doesn't exist in crypto.

On blockchain, every transaction is visible. Transparent. Immutable. You process a withdrawal, send an ACH instruction, and you can verify settlement on-chain if needed.

With fiat, you trust your bank to tell you what actually settled. Your bank sends a file, usually in a legacy format like NACHA, that lists all transactions from the last day. You parse this file, match each withdrawal to the corresponding ACH instruction, update your database to reflect what cleared versus what bounced.

If a transaction bounces, you figure out why. Bad account number? Name mismatch? Insufficient funds on the receiving account? Each reason has different retry logic. Some bounces mean refund immediately. Others mean retry tomorrow.

Crypto payment companies consistently underestimate this. It sounds simple. Read file, check amounts, update database. But banks send files with ambiguous data. Return codes don't match documentation. Sometimes transactions appear in the wrong day's batch.

A company I spoke with spent four months building reconciliation. They estimated two weeks. The bank's API was inconsistent. Return codes had special cases. Transactions appeared in unexpected batch files. Edge cases defeated manual processing.

The volume of weird situations is enormous.

Building fiat correctly

Here's what actually needs to happen.

Pick your rail early. You can't support all of them well. Pick the one that matches your customer base. U.S. is ACH. Europe is SEPA. This isn't a later decision. It affects your entire architecture.

Find your banking partner early and understand their actual constraints. Not all banks support real-time ACH. Not all banks can handle your transaction volumes. Get written confirmation of their limits and SLAs before you design anything around their infrastructure.

Design your UI around fiat's timeline. Don't pretend ACH is instant. Call it out explicitly. "Your withdrawal will arrive in 1 to 2 business days." Help users understand what's normal.

Build reconciliation from day one. This isn't an afterthought. Allocate serious engineering effort. Have your backend automatically download bank files, parse them, handle rejections, retry failures. Automate everything because manual processing will break.

Keep fiat balance separate from crypto balance. Crypto moves between users instantly. Fiat sits in a clearing account until ACH confirms settlement. Different data models. Different logic.

Plan for banking partner failures. Your primary banking relationship will break. Not maybe. When. Have a backup processor identified before you need them. When your primary breaks, you switch in hours, not weeks.

The $80 million fintech from my opening eventually solved this. But not until they hired someone who'd worked at a payment processor. That person understood the rails, the banking relationships, what reconciliation actually required. That single hire mattered more than all the consulting spend before it.

You can't engineer your way out of fiat complexity. You need to understand it first.