Most rate mistakes in a money transfer business are not bad market calls. They are typing errors, a margin entered where a sell rate was expected, a band forgotten half way down a list, or a change nobody can trace a week later. Each one either gives margin away or overcharges customers until somebody notices. The fix is less about clever pricing and more about how rates are entered, checked, recorded and kept current.
This guide is for pricing, treasury and operations leads who set customer exchange rates by corridor. It explains the vocabulary, the maths, the checks that catch errors before customers see them, and where automatic feeding fits.
RemitSo is one way to run this. Its Exchange Rates page shows buy, sell, spread and margin for every pair and amount band, and updates are made on one sheet with one review before saving. Your team still decides the margin, watches the market and owns every rate customers are quoted.
Read buy, sell, spread and margin the same way across the team
Four words cover almost every rate conversation. If the team uses them loosely, mistakes follow, so agree them first.
- Buy rate: the rate at which you obtain the payout currency. It is your cost.
- Sell rate: the rate the customer is quoted. For each unit sent, this is what the recipient gets.
- Spread: the amount of the buy rate you keep. Spread = buy − sell.
- Margin: the spread as a percentage of the buy rate. Margin = (buy − sell) ÷ buy × 100.
Take a real-shaped example from an AUD to NGN corridor: a buy rate of 931 and a sell rate of 911. The spread is 931 − 911 = 20 naira per Australian dollar. The margin is 20 ÷ 931 = 2.148%. A customer sending 500 AUD is quoted 911, so the recipient gets 455,500 NGN. At your buy rate those 500 AUD are worth 465,500 NGN, so the 10,000 NGN difference is your FX income on that transfer, before fees and costs.
Amount bands are the fifth term. A band is a range of send amounts with its own sell rate, usually so larger transfers get a better rate. The figures below are illustrative.
| Amount band (AUD) | Buy | Sell | Spread | Margin |
|---|---|---|---|---|
| Up to 1,000 | 931 | 911 | 20 | 2.148% |
| 1,000.01 to 5,000 | 931 | 915 | 16 | 1.719% |
| Above 5,000 | 931 | 918 | 13 | 1.396% |
Read the table from left to right: the buy rate is the same in every band, the sell rate rises with the amount, and the spread and margin fall. That is the trade you are making, a thinner margin per dollar in exchange for larger transfers. For more on that trade, see corridor margin versus volume.
Choose whether to type sell rates, margins or spreads
Whatever you type, the sell rate is the figure that reaches customers. The question is which number your team thinks in, because the number people think in is the one they type correctly.
| You type | Example on a buy of 931 | Sell rate worked out | Fits best when |
|---|---|---|---|
| Sell rate | 911 | 911 (spread 20, margin 2.148%) | You price to match a visible competitor rate or a round customer figure |
| Margin | 2% | 931 − 18.62 = 912.38 | You manage profitability as a percentage across many corridors |
| Spread | 20 | 931 − 20 = 911 | Your treasury thinks in currency units kept per unit sent |
Typing sell rates suits competitive corridors, where the customer-facing number matters most and the margin is whatever is left. Typing margins suits a business that sets a target percentage per corridor and wants it held as buy rates move. Typing spreads suits corridors where costs are understood in payout currency, such as a fixed number of naira per dollar.
It is fine to mix. A common pattern is margins for the standard band and sell rates for the top band, where you are matching a specific competitor for larger senders. What matters is that everyone can see which kind of figure each band was typed as.
Rule of thumb: type the number your team argues about in meetings. If the debate is "we are 2% on Nigeria", type margins. If it is "we need to show 915", type sell rates.
Review every change once before anything is saved
The safest rate update is one where every change across every pair is shown together, read once, and then saved together. Saving pair by pair invites the half-finished update: three corridors changed, two forgotten, and nobody sure which.
A good review screen shows, for each changed band, the old sell rate, the new sell rate and the resulting margin. Read it for three things:
- Direction: did every rate move the way the market moved? A sell rate rising while the buy rate fell is a red flag.
- Size: is any change much larger than the others? Outliers are usually typos.
- Margin: has any band dropped to a margin you would never choose, or gone negative?
Make large moves harder to type
The most expensive typo is a dropped or added digit. Typing 191 instead of 911 is a fall of almost 80%; typing 9110 is a tenfold rise. A sensible control is a threshold: any buy or sell rate moving more than 5% has to be typed a second time. On a sell rate of 911, 5% is about 45.55, so anything below roughly 865 or above roughly 957 asks for confirmation. Genuine large moves happen, so the check is a pause, not a block. Zero rates should simply be refused.
Watch for: two people editing rates at once. If a save writes the whole sheet, the second person can silently overwrite the first person's newer figures, or a fresher automated rate. A save should change only what that person changed.
Know which customers a new rate reaches
A rate change should apply from each customer's next quote. A customer who has already been quoted and is part way through paying keeps the rate they were shown. Anything else breaks the promise on the confirmation screen and creates disputes, because the "Total to pay" and the amount arriving were stated before payment.
In practice, this means a correction is not retrospective. If a wrong rate was live for twenty minutes, the transfers quoted in that window keep it. Your response is a business decision: honour them, or contact the customers. Either way, you need to find them, which is why history matters.
Set amount bands that reward larger transfers without leaking margin
Bands are where small errors multiply. A few practical rules:
- Keep bands contiguous: no gaps between 1,000 and 1,000.01, no overlaps.
- Keep sell rates rising with amount: a higher band with a worse rate than the band below it is almost always a mistake.
- Set a margin floor for the top band: decide the lowest margin you will accept on large transfers and check against it at every review.
- Add or withdraw bands deliberately: when a band is withdrawn, the amounts it covered fall into a neighbouring band. Check which one.
Answer "who changed this rate, and what was it before?"
Every change to a standard rate should be recorded with who made it, when, and the rate before and after. That record answers the questions that otherwise take an afternoon: which transfers were quoted at the wrong rate, whether a margin change was deliberate, and what the corridor earned last Tuesday.
Use the history in three routines: a weekly look at every change by corridor, an investigation whenever a corridor's income looks wrong, and evidence for finance when month-end margins do not match expectations.
Import and export rates as CSV or JSON
Typing on a sheet is right for routine updates. Files are right for bulk work and for copying a whole set of rates from one place to another.
- CSV opens in a spreadsheet, one rate to a row. Use it when treasury prepares rates offline, when someone needs to review every rate at once, or when you want an archive finance can read.
- JSON is the format a new environment is set up from. Use it to copy rates from staging to production, or to set up a new installation with the same pairs and bands.
Two safeguards matter. Importing should be a separate permission from editing, because one file can change every rate at once. And an import should never remove a rate the file leaves out, so a partial file cannot quietly switch off corridors.
Add a pair before the route goes live
The worst moment to discover a missing rate is when a customer tries to send. Add the pair, its bands and its sell rates while the corridor is still being set up, alongside fees and payout channels, so the rate has been reviewed before anyone can be quoted. Any pair customers can already send on without a rate should be flagged loudly.
Decide whether automatic feeding is worth adding
Manual rates work well for a handful of corridors updated a few times a day. As corridors multiply, or markets move quickly, an automatic feed that takes a buy rate from a provider and applies your margin or spread becomes worth considering. Three settings decide whether it is safe.
Tidy rounding, down by default
Raw calculated rates look odd to customers. If the buy rate moves to 934.6 and your margin is 2.148%, the spread is about 20.08 and the sell rate about 914.52. Rounding to a tidy multiple fixes that: to 0.05 it becomes 914.50, to 1 it becomes 914, to 5 it becomes 910. Rounding down means you never give margin away; rounding up gives a little back to customers on every transfer.
A guardrail on fetched rates
A provider can return a bad figure. A fetched rate that moves further than your configured limit from the last accepted one should not be written. The safe response is to stop feeding and tell someone, rather than keep trying.
No corridor priced at nothing
If a margin or rounding setting would produce a zero or meaningless rate, that corridor should be switched off with an alert, not quoted.
Takeaway: automation removes routine typing, not responsibility. Someone still sets the margins, reviews the guardrail and answers the alert when the feed stops.
Get told when rates go stale or pricing goes unreviewed
Two quiet failures cost money without anyone noticing. The first is a rate that stops moving: a feed fails, or the person who updates a corridor is on leave, and customers are quoted yesterday's rate in a moving market. The second is pricing nobody has looked at in months. Set alerts for both and route them to the people who can act, not to a shared inbox.
Scenario: a Monday morning rate update
The figures are illustrative. A treasury lead updates four corridors after the weekend. The team types margins on standard bands and sell rates on top bands.
- She opens the sheet and moves down the AUD to NGN margin column with the arrow key, entering 2.148% for the first band. The buy rate is now 934, so the sell rate is worked out at about 913.94.
- On the top band she types a sell rate of 9200 instead of 920. The move is far beyond 5%, so she is asked to type it again, spots the extra zero and corrects it.
- The review shows all eleven changed bands. One corridor's top band has a margin below the agreed floor; she raises it before saving.
- She saves once. Customers already part way through paying keep their quoted rates; everyone else gets the new rates from their next quote.
- On Wednesday, finance asks why one corridor's margin rose. The history shows her change, the time, and the rate before and after.
Doing it with RemitSo
RemitSo's admin panel puts standard rate management, rules, history and import or export on one page as standard. Automatic feeding is an optional add-on. See the admin features.
- One Exchange Rates page: buy, sell, spread, margin, what keeps each rate up to date, which rules apply and who last changed it, so nobody has to rebuild the picture from a spreadsheet.
- One sheet, your choice of figure: type sell rates, margins or spreads per band, with spreadsheet-style keyboard movement, so the team types the number it thinks in.
- One review before saving: every change across every pair is shown before anything is written, and a save changes only what you changed, so it cannot overwrite a newer rate.
- Type-twice check: a buy or sell rate moving more than 5% must be typed again (configurable per installation), and a zero or mistyped rate is refused.
- Next-quote rule and bands: new rates apply from the customer's next quote while quoted transfers keep theirs; amount bands can be added or withdrawn per pair.
- Historical Exchange Rates: every change to a standard rate, who made it, when, and the rate before and after.
- CSV and JSON import and export: importing is its own permission and never removes a rate; pairs can be added before a route goes live, and a pair customers can send on with no rate is flagged in red.
- Automatic feeding, an optional add-on: rounds to a tidy customer rate, down by default; a fetched rate beyond your guardrail is not written, the feeder switches itself off and alerts its subscribers. "Exchange rates not moving" and "Pricing review due" alerts flag stale rates and unreviewed fees.
Your team still sets margins, watches the market, decides what to do about transfers quoted at a wrong rate, and answers the alerts. For how rules give some customers a different rate, read exchange rate rules that win and keep customers, or book a demo.
Frequently asked questions
What is the difference between spread and margin?
Spread is the amount of the buy rate you keep, in payout currency: buy 931 minus sell 911 is a spread of 20. Margin is that spread as a percentage of the buy rate: 20 divided by 931 is 2.148%.
Should we type margins or sell rates?
Type the figure your team actually decides on. Margins suit businesses managing a target percentage across many corridors; sell rates suit competitive corridors where the customer-facing number matters most. Mixing by band is fine if everyone can see which is which.
If we fix a wrong rate, do customers already quoted get the new one?
No. A quoted transfer keeps the rate the customer was shown. Use the rate history to find transfers quoted during the window and decide whether to honour them or contact the customers.
When should we use a JSON export rather than CSV?
Use CSV when people need to read or prepare rates in a spreadsheet. Use JSON when you are copying a full rate set into another environment, such as from staging to production.
Does automatic feeding remove the need to review rates?
No. It removes routine typing. Your team still sets margins and rounding, decides the guardrail, and acts when the feed stops or a rate stops moving.