CRM Currency Migration Checks for Deal Values

Sign off a CRM currency migration deal by deal. Match each source deal to its destination record and check the original amount, currency code, stage, close date, and value in your reporting currency. Compare totals after those checks. In a three-deal exercise we ran, the open pipeline still added up to $21,000 after two deals changed by $1,000 in opposite directions.
Sales operations can use this check to accept a migration load. Finance should supply the exchange rate policy and review the figures that feed its reports. Use the CRM migration checklist to plan the rest of the move.
CRM currency migration starts with two amounts
Export the amount in the deal's own currency and the value in the currency used for reporting. For a €10,000 deal worth $11,000 on the source report, keep EUR and 10,000 together in the import mapping. Preserve $11,000 with the exchange rate and its effective date as evidence. If the destination computes the reporting value, load the native deal fields and reconcile the calculated output.
Agree with finance on the currency used for each dashboard before comparing the two systems. A manager's personal currency, a company's reporting currency, and a deal's transaction currency can all appear on the same screen. Export from a named report with a fixed reporting currency, filters, and observation time. Save those details with your CRM export checklist so another reviewer can repeat the comparison.
| Source evidence | Destination check |
|---|---|
| Source deal ID | Exactly one destination deal linked to that ID |
| Native amount and currency code | Both values agree with the approved field mapping |
| Stage, pipeline, and close date | The destination puts the deal in the intended report and period |
| Reporting amount and currency | The normalized value matches the approved expectation |
| Rate, effective date, and source | The destination uses the selected rate policy for that record |
| Owner or reporting segment | The record appears under the right person or team |
Run uniqueness and missing-record checks before comparing figures. A sum can survive an omitted deal when a different deal gets duplicated for the same value. Use the same source identifier on retries, and carry approved merge decisions from your CRM merge survivorship plan into the reconciliation.
Write down the rate direction
Name rates in units a reviewer can read. For example, 1.25 USD per GBP means GBP 8,000 converts to USD 10,000. The reciprocal is 0.80 GBP per USD. Multiplying the same £8,000 by 0.80 gives $6,400, a difference of $3,600. Check the direction in both the export field and the destination import settings.
Agree on precision separately for the amount, rate, and reporting result. Compare the original amount at its stored precision and use the destination's documented rounding policy for the reporting value. Give each approved tolerance a reason, such as a difference between rounding each row and rounding after aggregation. Currency codes and record identities require exact agreement.
CRM currency migration checks for open and closed deals
Export open and closed deals as separate groups. Record the rate snapshot used for open pipeline and decide which historical date governs each closed deal. Take the source and destination snapshots at an agreed point in the cutover. If the rates change during the move, isolate that effect from rep edits, stage changes, and import mistakes.
HubSpot's default deal properties distinguish Amount in the deal's currency from Amount in company currency. Its account currency documentation explains that open deals use the latest configured rate and that the company-currency value for a closed deal with a close date uses the rate in effect on that date, with a fallback to the nearest rate when needed. Include an open deal and a backdated closed deal in the test load. Record the normalized value and the exchange rate shown on each deal after the import.
Salesforce's Advanced Currency Management documentation describes dated conversion rates for opportunities. It also lists exceptions, including forecasts and currency formulas. If your source uses dated rates, export from the opportunity report you intend to reconcile and check the forecast separately. Ask the vendor to demonstrate both using a close date on either side of a rate change.
Use your sales pipeline stage definitions to agree on what counts as open, won, and lost. A migration that maps a won deal to an open stage changes both the population and the calculation under an open-rate policy. Compare stage and close date before classifying a value difference as an exchange rate problem. If forecasts carry probabilities or overrides, check those separately using the forecasting methods guide.
Five cases to replay before approving the import
We ran a fictional exercise with two open deals and one won deal. The USD 26,400 total is a check across all three test rows. The open pipeline on its own is USD 21,000. The inputs specify USD per unit of each deal currency, and the Python checker compares deal IDs, field values, and converted amounts.
| Import case | USD total | Difference | What the row check found |
|---|---|---|---|
| Unchanged | $26,400 | $0 | All three rows agree |
| Offsetting errors | $26,400 | $0 | Deal A lost $1,000 after EUR became USD. Deal B gained $1,000 under the wrong GBP rate |
| Converted amount loaded as native | $26,400 | $0 | Deal A became USD 11,000 in place of EUR 10,000 |
| Close date and rate changed | $26,500 | +$100 | Deal C moved from June 30 to July 1 and picked up the July rate |
| Reciprocal rate | $22,800 | −$3,600 | Deal B used 0.80 instead of 1.25 USD per GBP |
In the offsetting case, both changed deals are open, so even the separate open-pipeline total passes. In the converted-amount case, the reporting value of deal A still matches on its own. Its deal currency and original amount expose the error.
Download the Python checker and inputs and results. Run python3 reconcile.py to reproduce the table. For your own trial, swap in an open deal in each currency you use, a won deal at a rate boundary, and a deal with a documented rate override. Run the exercise on a small test load first. If you share a sandbox with other teams, plan the sandbox refresh before adding records.
Turn discrepancies into a cutover decision
Review failures by type. A missing currency code belongs with the import mapping owner. A correctly loaded EUR amount that converts at the wrong rate belongs with the person who owns the currency settings. A closed deal that appears in the wrong quarter belongs with the stage or date mapping owner. Give each issue one owner and a retest date. The CRM field ownership guide helps when two integrations can write the same field.
For approved changes in reporting policy, retain the source value and calculate an expected destination value under the new rule. Record the policy change alongside the delta. For example, if the new forecast uses the cutover rate for all open EUR deals, group those changes together and keep them separate from incorrect deal amounts. Ask finance to sign off on the expected changes by report.
Keep the exception log small enough to use during the final load. Include source ID, destination ID, native amount and code, old and new reporting values, rate rule, disposition, and reviewer. Reconcile any deals created, repriced, reopened, or closed between the trial and cutover. Hold the cutover if a required reporting group contains unexplained differences. Add the completed reconciliation to the CRM implementation checklist.
Frequently Asked Questions
Should I import the converted amount or the original deal amount?
Import the native amount and currency together when the destination stores both and computes its reporting value. Keep the source's converted value in the acceptance export. If your reporting requirements include a frozen historical value, agree on a separate destination field for that value and label its reporting currency.
Why does my new CRM show different pipeline totals?
Compare the record populations first. Check stages, dates, owners, and duplicates. Then compare native amounts, currency codes, rate direction, and effective dates. A change in one of those fields tells you which mapping or policy to investigate. If every individual deal agrees, compare report filters and aggregation rules.
How should I handle deals with no currency code?
Trace the source's default-currency rule and document which records it applied to. When the source cannot establish the code, send those deals for review before importing their amounts. An empty currency field requires a decision, especially when multiple teams enter deals in different currencies.
Use the same cases in CRM demos
Give shortlisted vendors the same source rows and ask each to return a deal export plus its open-pipeline and closed-won reports. Request an example of a reopened deal and ask how its exchange rate changes. Have your reporting owner compare the exports using the agreed acceptance fields.
For an existing Salesforce migration shortlist, use HubSpot vs Salesforce to compare the two tools' administration and reporting trade-offs. If your team is evaluating a sales-focused pipeline and a broader CRM suite, use Pipedrive vs HubSpot and repeat the currency test in both systems.


