Currency & FX Handling: Multi-Currency Pricing, Exchange Rates, Settlement, and Reporting Without Drift
If you're running a SaaS in 2026 selling outside a single country, currency handling stops being optional somewhere between the first international customer and the first finance team complaint. Most founders default to "USD-only on the pricing page" indefinitely, then panic-add Euro pricing when an EU customer asks, then realize three months later that revenue numbers in their dashboard don't match what's in Stripe, the bank, or QuickBooks — because nobody decided which exchange rate matters when.
A working currency / FX system has clear answers to: which currencies do we accept, what rate do we use to convert at checkout, what rate do we use for revenue reporting, where does FX gain/loss live, and how do we display localized prices without making refunds and renewals into a nightmare. Done well, multi-currency feels invisible to the customer and clean to finance. Done badly, you're explaining to your CFO why ARR went up 8% last month when the underlying business didn't actually grow.
This guide is the implementation playbook for shipping a currency-aware billing system that's honest about FX risk, plays well with Stripe / Paddle / Polar, and won't make finance hate you in twelve months.
Decide Which Currencies You Actually Need
Multi-currency is not free. Every currency adds checkout-flow complexity, refund edge cases, reporting overhead, and FX gain/loss accounting. Don't add currencies for vanity.
Help me decide which currencies to support.
Three buyer-experience tiers:
**Tier 1: USD-only with foreign cards (the 70% case for indie SaaS)**
You charge in USD; foreign customers pay in USD; their card issuer converts at their rate.
Pros:
- Zero FX risk for you
- Simplest accounting (every dollar is a USD dollar)
- One pricing page; one set of revenue reporting
- No Stripe currency-conversion fees on your side
- No multi-currency refund edge cases
Cons:
- Customers see foreign-exchange fees on their statement (psychological friction)
- Some procurement teams refuse non-local pricing
- Pricing-page perception (a German B2B prospect sees "$49/mo" and mentally converts to ~€45 with awkward fractions)
Pick when: <30% of revenue from outside USD; you''re not enterprise sales-led.
**Tier 2: Local-currency display, USD settlement (the 20% case)**
You display localized prices on the pricing page; customer pays in their currency at checkout; Stripe / Paddle settles you in USD.
Pros:
- Customer sees clean local pricing (€49, £45, ¥6500)
- You still report in USD
- Stripe handles the FX conversion (~1% fee)
- Only modest accounting complexity
Cons:
- Stripe / Paddle take ~1% on FX
- Pricing differs across currencies (you must price each)
- Annual renewals at fixed local price = your USD revenue varies if FX moves
- Refund must match original currency
Pick when: 30%+ revenue international; you want a local-feeling experience.
**Tier 3: Local-currency display + local-currency settlement (the 10% case)**
Customer pays in EUR; you receive EUR in a EUR bank account; you report by currency.
Pros:
- Zero FX cost on collection
- True local presence (often a tax/marketing necessity)
- Cleaner relationships with EU / UK customers
Cons:
- You bear FX risk between collection and home-currency conversion
- Need multi-currency bank accounts (Mercury / Wise / Stripe Treasury)
- Multi-currency accounting (QuickBooks / Xero multi-currency mode)
- Significantly more finance ops complexity
Pick when: $1M+ ARR; structural international presence; finance team can handle it.
For my company today:
- Total revenue
- % from each currency-zone
- Sales motion (self-serve / sales-led)
- Finance team (founder-only / accountant / CFO)
Output:
1. Which tier you should be on
2. The currencies to support (3-5 max for tier 2/3)
3. The trigger for moving up a tier
4. The current pricing-display strategy
The biggest unforced error: adding 8 currencies before you have customers in 6 of them. Every additional currency is overhead that compounds. Start with USD; add EUR + GBP when you actually have demand; add CAD/AUD/JPY only when you have material revenue from those zones. The pricing page can have a currency switcher that lazy-converts at request-time using a market rate API; full local-currency settlement is a separate, much heavier decision.
Exchange-Rate Sources and the "Which Rate" Question
There is no single "the exchange rate." There are multiple rates, all valid for different purposes. Pick deliberately.
Help me pick exchange-rate sources for my system.
The four rates that matter:
**1. Display rate (pricing-page)**
The rate you use to show "$49/mo ≈ €45/mo" on the marketing site.
- Refresh: daily or weekly
- Source: any free FX API (exchangerate.host, openexchangerates.org free tier)
- Why daily: avoid rate-of-the-second flicker; customer-perceived stability
- Round to clean numbers (€45 not €44.78)
**2. Checkout rate (transaction)**
The rate at which money actually changes hands.
- This is set by your payment processor (Stripe / Paddle / Lemon Squeezy)
- Stripe Currency Conversion: charged at Stripe''s daily mid-market + 1%
- Paddle: handled internally; ~1.5-2% spread
- You don''t really pick this; you accept the processor''s rate
**3. Reporting rate (revenue / ARR)**
The rate at which you report revenue in your home currency.
Two valid approaches:
- **Settlement rate**: USD revenue = whatever Stripe deposited in USD (after their FX conversion). Cleanest; matches the bank.
- **Booking rate**: USD revenue = invoice amount in foreign currency × month-end mid-market rate. Useful for ARR consistency across cohorts.
For most indie SaaS: use settlement rate (matches bank; auditable; no manual FX math).
**4. Accounting rate (GAAP / IFRS)**
For statutory accounting, you typically book transactions at the rate on transaction date, then revalue balances at period-end at month-end rate. The difference is FX gain/loss.
This is your accountant''s problem; just be sure the data you feed them is timestamped accurately.
**FX API providers (for display rates)**:
| Provider | Free Tier | Paid Starter | Notes |
|---|---|---|---|
| exchangerate.host | Free | $9/mo | Open data; rate-limited |
| openexchangerates.org | Free (1K/mo) | $12/mo | Solid; ECB + bank averages |
| Currencylayer | Free (100/mo) | $14/mo | Good API |
| Fixer.io | Free (250/mo) | $14/mo | ECB-based |
| ExchangeRate-API | Free (1.5K/mo) | $10/mo | Good free tier |
| OANDA / XE | Custom | $$$$$ | Enterprise / banking-grade |
For most SaaS: free tier of exchangerate.host or ExchangeRate-API is fine for display purposes. Cache for 24 hours.
For my system:
- Which display rate source
- Which payment-processor handles checkout rate
- Which approach for reporting (settlement vs booking)
- Cadence for refresh
Output:
1. The four rate decisions
2. The data flow (where each rate is fetched / stored)
3. The cache TTL per source
4. The reconciliation plan (how often we check that displayed ≈ charged)
The biggest single-source confusion: using ECB rates for display but Stripe rates for charging — and being surprised when the customer is upset. If your pricing page says "≈ €45" and Stripe charges €46.10 because Stripe''s rate differs, the gap is small but visible. The fix: either show clean local prices that you''ve fixed (€45 hard-coded; you absorb the FX delta), OR show a "≈" qualifier with a tooltip explaining "final amount depends on your card issuer / processor." Don''t pretend the displayed rate IS the charged rate.
Pricing-Page Strategies
How you display prices depends on the tier you picked. Get the UX right; minimize confusion.
Help me design the pricing-page currency UX.
Three patterns:
**Pattern A: Single currency (USD) with implicit conversion**
- Pricing page shows: "$49/mo"
- No currency switcher
- Foreign customers convert mentally
- Stripe charges $49 USD; their bank converts
When to use: Tier 1; <30% foreign revenue; B2B technical buyer; want simplicity.
**Pattern B: Currency switcher with display-only conversion**
- Pricing page shows: "$49/mo" or "€45/mo" or "£39/mo"
- Switcher lets visitor toggle
- Conversion shown is illustrative; actual charge in USD
- Footnote: "Charged in USD; your bank may add FX fees"
When to use: Tier 1 with international visibility; you want to feel local but settle in USD.
**Pattern C: Multi-currency pricing (different prices per currency)**
- Pricing page detects locale via IP / Accept-Language
- Shows local price in local currency: €49/mo (separate from USD $49)
- Charged in local currency; Stripe settles in chosen currency
- You set each price independently (€49 might be $54 USD-equivalent at current rates)
When to use: Tier 2/3; revenue justifies the per-currency pricing; you''re willing to manage rate drift.
**The "psychological pricing" trap**:
In Pattern C, $49 USD ≠ €49 EUR. They''re different products with different price points. Common mistake: founders set €49 thinking "same price" — but at $1.07/€, €49 = $52. Now you''re charging EU customers more than US customers. Either:
- Price slightly below for parity: €45 (~$48)
- Price slightly above accepting localization premium: €49 (~$52)
Just be deliberate.
**Annual-plan currency handling**:
If a customer signs up for $588/yr (12 × $49) in January, do they renew in January next year at $588 or at the new local price? Common patterns:
- **Lock the price**: They renew at $588 (legacy price); good for retention
- **Roll to current**: They renew at current pricing; cleaner finance but customer might churn
- **Grandfather X cycles**: Lock for 1 year, then move to current
Pick one and document it.
**The IP-based localization caveat**:
Detecting locale via IP is unreliable (VPNs, travel, multi-region offices). Always allow manual override via a switcher. Never lock the customer into a currency they can''t change.
For my pricing page:
- The pattern (A / B / C)
- The currencies displayed
- The annual-plan policy
- The locale-detection strategy
- The switcher UI
Output:
1. The pricing-page UX
2. The price-per-currency table
3. The renewal policy
4. The "trust me; my system handles this correctly" verification plan
The biggest pricing-page mistake: silent IP-based locale switching with no manual override. A user in London on a US-based VPN gets $49 USD when they expected £39 GBP, or vice versa. Always show the detected currency in the UI prominently, and let them switch in one click. Trust > magic.
Database and Data Model for Multi-Currency
How you store amounts determines whether reporting will be sane in 18 months.
Help me design the multi-currency data model.
The core principle: **store both the amount AND the currency**, always. Never store currency in a different column "implicit by region" — explicit is non-negotiable.
**Schema patterns**:
```sql
CREATE TABLE invoices (
id UUID PRIMARY KEY,
customer_id UUID NOT NULL,
-- Original transaction (what the customer was charged)
amount_charged BIGINT NOT NULL, -- in cents
currency_charged CHAR(3) NOT NULL, -- ISO 4217: USD, EUR, GBP
-- Reporting (what we report in home currency)
amount_home_currency BIGINT NOT NULL, -- in home-cents (USD cents)
currency_home CHAR(3) NOT NULL DEFAULT 'USD',
fx_rate_used NUMERIC(18, 8) NOT NULL,
fx_rate_source VARCHAR(50), -- 'stripe_settlement', 'ecb_2026_04_30', etc.
fx_rate_at TIMESTAMPTZ NOT NULL,
-- Settlement (what hit the bank in home currency)
amount_settled BIGINT, -- after Stripe FX conversion
currency_settled CHAR(3) DEFAULT 'USD',
settled_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE fx_rates (
source VARCHAR(50) NOT NULL, -- 'ecb', 'stripe', 'manual'
base_currency CHAR(3) NOT NULL, -- USD
quote_currency CHAR(3) NOT NULL, -- EUR
rate NUMERIC(18, 8) NOT NULL, -- 1 USD = 0.92345678 EUR
rate_date DATE NOT NULL,
created_at TIMESTAMPTZ DEFAULT now(),
PRIMARY KEY (source, base_currency, quote_currency, rate_date)
);
Always store:
- Amount in the original currency
- The currency code (ISO 4217)
- The FX rate used (if converted)
- The rate source + date
- The home-currency amount derived from above
Never do:
- Store amounts as floating-point (use integer cents always; floats lose precision)
- Implicitly convert at read-time (you''ll get different answers as rates change)
- Use a "USD-equivalent" column without recording the rate (un-auditable)
- Mix currencies in the same total (a
SUM(amount)across currencies is meaningless)
The Money value object:
In application code, wrap amounts in a Money type that carries currency:
class Money {
constructor(
public readonly amountCents: number,
public readonly currency: string // 'USD', 'EUR', etc.
) {}
add(other: Money): Money {
if (other.currency !== this.currency) {
throw new Error(`Cannot add ${this.currency} and ${other.currency}`);
}
return new Money(this.amountCents + other.amountCents, this.currency);
}
convert(rate: number, targetCurrency: string): Money {
return new Money(Math.round(this.amountCents * rate), targetCurrency);
}
}
This prevents silent bugs: subtotal + tax blows up if currencies don''t match, instead of producing a nonsense number.
The "subscription has a fixed currency" rule:
A given subscription / invoice / payment is in ONE currency, always. Don''t mix. If a customer wants to change currency, that''s a new subscription (not a mid-cycle switch).
For my schema:
- The amount + currency columns
- The FX-rate table
- The Money value object in code
- The migration plan if currently single-currency
Output:
- The schema migration
- The Money value-object code
- The rules (never mix currencies in totals, etc.)
- The data validation (CI / tests)
The biggest data-model mistake: **storing one "amount in USD" column and a separate "original currency" column, but not the rate that was used.** Six months later, the rate has drifted; you can''t reproduce the original calculation; auditing is impossible. Store the rate explicitly with every converted amount. It''s 8 bytes per row; storage is free; truth is priceless.
## FX Risk and How Much to Care
If you accept multiple currencies, you have FX risk. Quantify it; manage it; don''t pretend it doesn''t exist.
Help me quantify and manage FX risk.
The risk:
Settlement-timing risk:
Customer pays €100 on Day 1. You receive €100 in EUR account on Day 2 (or USD-converted at Day 2 rate). EUR/USD moves 0.5% in that day. Your USD revenue is $0.55 different than it would have been at Day 1 rate.
Per transaction: small. Per quarter: adds up.
Pricing-cycle risk:
You set EU pricing at €49 (target $54 USD-equivalent at $1.10/€). Six months later, EUR/USD is $1.05. You''re now collecting $51 USD per EU subscription instead of $54. ARR didn''t grow; FX moved.
This is the bigger risk for SaaS.
ARR-reporting risk:
If you report ARR using current-rate revaluation, ARR fluctuates with FX even when underlying business is stable. Boards interpret this wrong; investors calibrate on noise.
Quantification:
Calculate quarterly:
- % revenue in non-home currency
- Average FX move during the quarter
- Estimated FX impact on revenue: % foreign × % move
If <2% of revenue moves due to FX in a quarter: not material; don''t over-engineer.
If >5%: hedging or pricing-policy is justified.
Mitigations (in order of complexity):
-
Stick to home currency (Tier 1 strategy)
- Zero FX risk on settlement
- Customer bears the conversion cost
- Most indie SaaS at <$5M ARR
-
Periodic price-list revalidation
- Once or twice a year, review local-currency prices
- Adjust if rate has drifted >5%
- Explicit vs. invisible drift
-
Banking with multi-currency support
- Hold EUR / GBP balances; pay EU bills in EUR
- Reduces conversion churn
- Mercury / Wise / Stripe Treasury
-
Forward contracts (large companies)
- Lock in FX rate for next 6 months on expected EUR inflows
- Bank does the hedging
- Justified at $20M+ ARR
-
Constant-currency reporting
- Report ARR using a fixed reference rate (e.g., year-start rate)
- Removes FX noise from internal metrics
- Common at growth-stage / public companies
For most indie SaaS:
- Tier 1 (USD-only): no FX management needed.
- Tier 2 (display / local checkout / USD settle): occasional price review; nothing else.
- Tier 3 (multi-currency settlement): multi-currency bank account; quarterly price review; constant-currency reporting if board cares.
Don''t:
- Hedge FX as an indie SaaS (overhead > benefit)
- Ignore drift (review prices annually minimum)
- Report ARR fluctuations as growth/decline without an FX disclaimer
For my company:
- Current FX exposure (% revenue per currency)
- Quarterly FX-impact estimate
- Whether the impact is material
- The mitigation tier appropriate for my size
Output:
- The FX exposure today
- The quarterly impact estimate
- The mitigation choice
- The pricing-review cadence
The biggest FX-risk mistake: **adding hedging / forward contracts at $500K ARR.** It''s overhead that drains founder attention without material benefit. The right answer at small scale: stick to USD pricing or let the FX delta run as an accepted variance. Time spent on hedging at $500K ARR could be spent on product. At $20M+ with material EUR exposure, revisit.
## Refunds, Renewals, and Currency Edge Cases
Multi-currency operations create edge cases that single-currency setups don''t. Handle them explicitly.
Help me handle the multi-currency edge cases.
Edge case 1: Refunds in original currency
Customer paid €49; you must refund €49 (not the USD-equivalent).
- Stripe enforces this — refund happens in transaction currency
- Your USD-equivalent on refund day differs from charge day
- Net P&L impact: a small FX gain / loss
- Don''t try to "be fair" by refunding USD-equivalent — it''s not how processors work
Edge case 2: Partial refunds with FX
Original charge €100; charged → settled $107 USD; refund €50 → settled $54 USD (rate changed). Customer is whole (€50 returned); your revenue is $107 - $54 = $53 (not $50 USD-half). This is correct accounting; your books reflect the actual cash flow.
Edge case 3: Annual renewal with rate drift
Customer signed up for €588/yr in 2025; renews €588/yr in 2026.
- 2025 rate: $1.10/€ → $647 USD revenue
- 2026 rate: $1.05/€ → $617 USD revenue
- ARR appears to drop $30 even though customer didn''t leave
Solution: report ARR in transaction currency or at fixed reference rate; disclose FX impact separately.
Edge case 4: Currency switch on renewal
Customer was charged in USD; now wants to switch to EUR for tax reasons. Pattern: end the USD subscription; start a new EUR subscription with prorated discount. Don''t try to convert mid-cycle.
Edge case 5: Disputes / chargebacks
Chargeback hits in transaction currency. Your bank account loses that amount in the settlement currency. The chargeback fee may be in a third currency (Stripe charges $15 USD for a EUR dispute). Audit trail: log all three currencies in the dispute record.
Edge case 6: Pricing-tier upgrade across currencies
Customer on $49 USD plan upgrades to "$199 plan" — but they''re in EU and your EU pricing is €189. Either: charge them USD $199 (jarring switch from EUR) or €189 (consistent local). Pick local consistency; document the policy.
Edge case 7: Tax + currency interaction
EU VAT is calculated in local currency; report to tax authority in local currency; you owe in local currency. Per tax-vat-handling-chat: tax engine handles currency; verify it does.
Edge case 8: Stripe currency-conversion fees
Stripe charges 1% on currency-converted transactions. If you accept EUR but settle USD, you pay 1% extra. Either accept the cost (Tier 2 strategy) or settle in EUR with a EUR account (Tier 3). Track this fee separately in P&L.
Edge case 9: Failed payment retry with rate change
Initial €49 charge fails. Retry 3 days later. Rate has moved 1%. Charge: still €49 (original amount). Settled USD differs by 1%. Don''t change the original amount; rates move; that''s fine.
Edge case 10: Discount / coupon in foreign currency
You have a $10 USD off coupon. Customer pays in EUR. Do you discount $10 (~€9) or €10? Decide policy: convert at coupon-creation rate or apply percentage equivalents (10% off works in any currency). Percentage discounts handle multi-currency cleanly; flat-amount discounts need conversion logic.
For my system:
- Refund flow tested in non-home currency
- Renewal logic with FX-drift handling
- Discount system that handles multi-currency
- Audit log capturing all 3 currencies on disputes
Output:
- The edge-case test matrix
- The policy decisions (renewal, switch, discount)
- The audit-log fields
- The 5 scenarios I''ll test in staging before launching
The biggest edge-case mistake: **treating a foreign-currency refund as "approximately the USD-equivalent."** Stripe will refund in the original currency; your bank will deposit / withdraw in your settlement currency at the day''s rate; the math will not match what you intuitively expected. Trust the system; reconcile from the bank, not from your head.
## Reconciliation, Reporting, and the Finance-Team Handoff
Everything above feeds into accurate finance reporting. Build the bridge.
Help me make multi-currency clean for finance.
The reconciliation flow:
Daily / weekly:
- Pull Stripe (or Paddle) transactions for the period
- For each transaction:
- Original currency / amount
- Stripe FX rate used (if converted)
- Settlement currency / amount
- Stripe fees (in transaction currency)
- Cross-check against your invoice / subscription system
- Flag mismatches (rare but happen)
Month-end:
- Sum revenue by transaction currency
- Convert each currency total to home currency using:
- Settlement (actual deposit) for cash basis
- Month-end rate for accrual / GAAP
- Compare to bank deposits
- Reconcile differences (timing, fees, FX gain/loss)
Reports finance needs:
| Report | Purpose | Cadence |
|---|---|---|
| Revenue by currency | See where revenue comes from | Monthly |
| FX gain / loss | Statutory accounting | Monthly |
| ARR (constant currency) | Internal trend without FX noise | Monthly |
| ARR (current rate) | Reportable to board / investors | Monthly |
| Settlement reconciliation | Verify bank matches accounting | Weekly |
| Tax-by-jurisdiction | Compliance | Quarterly |
Tools:
- QuickBooks / Xero multi-currency mode: native handling for SMBs
- Stripe Sigma: query Stripe data directly in SQL
- Manual spreadsheet: works at <100 transactions/month; breaks at scale
- NetSuite / SAP: enterprise
Common reporting traps:
- Summing across currencies (always invalid; convert first)
- Ignoring FX gain/loss (it shows up at year-end as a surprise)
- Reporting board-facing ARR without disclosing FX impact
- Not separating settlement timing from underlying revenue
The "month-close" checklist:
- All transactions imported and categorized
- FX rates applied consistently per the policy
- Settlement reconciled to bank
- FX gain/loss booked
- ARR calculated in both constant and current currency
- Variance to forecast explained (separate FX from underlying)
Audit-trail discipline:
Every revenue figure should be traceable to:
- Source transaction
- Currency
- Rate used
- Source of rate
- Home-currency amount
This is mandatory for SOC 2 / external audit; useful even if you''re not there yet.
For my finance flow:
- Tools currently in use
- The handoff to accountant / CFO
- The monthly reconciliation cadence
- The audit-trail completeness
Output:
- The reconciliation runbook
- The monthly close checklist
- The reports template
- The accountant onboarding doc (so they can take over without 3 hours of explanation)
The biggest finance handoff mistake: **giving the accountant a CSV of revenue with no currency or rate metadata.** They''ll fill in plausible numbers; the books will be wrong; the audit will catch it. Always pass currency + rate + source as columns; let the accountant do the converting (or verify your conversions). Transparency wins.
## Quarterly Currency Review
Currency policies aren''t set-and-forget. Build a quarterly review.
The quarterly currency review:
1. Exposure
- % revenue per currency (this quarter vs last)
- New currencies coming in (sign of expansion or accidental)
2. Pricing drift
- Each non-home currency price: still aligned with home-currency target?
- If drift >5%: discuss adjustment (raise local; lower; accept)
3. FX P&L
- Total FX gain / loss this quarter
- Material? (>2% of revenue → discuss)
4. Operational issues
- Refund mishaps in foreign currency
- Customer complaints about pricing display
- Reconciliation gaps
5. Tier escalation
- Are we ready to move from Tier 1 to Tier 2?
- From Tier 2 to Tier 3?
- Does revenue justify multi-currency banking?
6. Tooling
- FX-rate API working / sufficient?
- Reporting tooling sufficient?
- Anything to upgrade?
Decision log:
Document each quarter:
- Currencies supported
- Pricing per currency
- Rates used (sources + cadence)
- FX P&L for the quarter
- Any policy changes
Future-you and your accountant will thank you.
Output:
- The QBR (quarterly business review) template for currency
- The owner (founder for tier 1; CFO at scale)
- The decision log location
The biggest review-cadence mistake: **never reviewing pricing once it''s set.** A €49 price set in 2024 at $1.10/€ is "really" $49 USD. By 2026 at $1.05/€, it''s $51 USD. By 2027 at $1.15/€, it''s $44 USD. You''re either over- or under-charging EU customers without realizing. A 30-minute quarterly check is enough; the alternative is silent drift compounding for years.
---
## What "Done" Looks Like
A working currency / FX system in 2026 has:
- A clear tier (USD-only / display-local-settle-USD / fully-local) appropriate for current scale
- Database stores amount + currency + rate + rate-source for every transaction
- Pricing page shows local currency only when you actually charge in that currency (no fake conversions)
- Refunds happen in transaction currency; FX gain/loss tracked
- Monthly close reconciles transaction → settlement → home-currency revenue
- ARR reported in both constant-currency (internal) and current-rate (board)
- Quarterly review of currencies, prices, FX exposure, and tier-escalation triggers
- Accountant has full audit trail: currency + rate + source per row
The hidden cost of weak currency handling: **finance numbers nobody trusts.** A founder who reports "$120K MRR" but can''t answer "in what currencies, at what rates?" loses credibility with the first sophisticated investor or auditor. The cost is rebuilding trust + redoing books, often during a fundraise. The discipline of explicit-currency-everywhere takes 2x effort up front and pays off forever.
## See Also
- [Tax & VAT Handling](tax-vat-handling-chat.md) — closely related; tax engine consumes currency
- [Refunds & Chargebacks](refunds-chargebacks-chat.md) — refund flow with currency edges
- [Dunning & Failed Payments](dunning-failed-payments-chat.md) — retries across rate moves
- [Pricing Page](pricing-page-chat.md) — pricing-page UX with currency
- [Public API](public-api-chat.md) — APIs that return amounts must include currency
- [Audit Logs](audit-logs-chat.md) — currency / rate decisions are auditable
- [Customer Analytics Dashboards](customer-analytics-dashboards-chat.md) — currency-aware reporting
- [Database Migrations](database-migrations-chat.md) — adding currency columns to existing tables
- [VibeReference: Payment Providers](https://www.vibereference.com/auth-and-payments/payment-providers) — Stripe / Paddle / Polar comparison
- [VibeReference: Subscription Billing Providers](https://www.vibereference.com/auth-and-payments/subscription-billing-providers) — billing engines
- [VibeReference: Tax Compliance Tools](https://www.vibereference.com/auth-and-payments/tax-compliance-tools) — tax tools for multi-currency
- [VibeReference: BI Analytics Tools](https://www.vibereference.com/devops-and-tools/bi-analytics-tools) — finance reporting tools
- [LaunchWeek: Pricing Strategy](https://www.launchweek.com/1-position/pricing-strategy) — pricing strategy with currency considerations
- [LaunchWeek: Annual Contract Negotiation](https://www.launchweek.com/4-convert/annual-contract-negotiation) — annual deals with FX implications
[⬅️ Day 6: Grow Overview](README.md)