Quote and subscription data migration: what to move, what to archive, how to reconcile
Two different data sets with two different rules. Quote history is optional: set a cutoff, migrate recent quotes as records, archive the rest as read-only or PDFs. The install base — every active subscription or asset — is not optional: it moves completely, in one pass, and is reconciled per account before cutover, because every renewal after go-live depends on it.
Move, archive or leave
- It is an active subscription, asset or contractMigrate completely, reconcile per account, one pass
- It is a quote from the last 12–24 monthsMigrate as a record so reps can clone and reference it
- It is an older quoteArchive as read-only or PDF; do not load it into the new CPQ
- It is a draft or abandoned quote or cartLeave it
Where the install base lives, by source
The install-base procedure
- Export every active record
Salesforce CPQ:
SBQQ__Subscription__cwith itsContract, filtered to active dates (field reference). Conga:Apttus_Config2__AssetLineItem__cwith active status (object reference). RCA:Assetwith currentAssetStatePeriod. DealHub and Nue: the vendor’s subscription export. - Map the seven fields that matter
Account, product, quantity, net price, start date, end date, renewal term. Everything else is optional on the first pass.
- Validate dates and quantities
No end date before start date; no zero quantities on active records; no product that does not exist in the new catalog. Fix at source, not in the load file.
- Load in one pass
Contracts first, then subscriptions or assets. Never split one account’s install base across two loads or two systems.
- Reconcile per account
For every account: count of active records and sum of annual value, source vs target. Differences are investigated before cutover, not after.
- Prove one renewal
Generate a renewal opportunity or quote from a migrated subscription in the new CPQ and check dates, quantities and prices against the source.
Quote history: the cutoff rule
Reps use recent quotes to clone and to answer “what did we send them last time”. They rarely need quotes older than the current contract term. Set a cutoff — 12 to 24 months is typical, or the start of the oldest active contract — and migrate quotes newer than it as records with their lines. Everything older becomes a read-only archive: keep the old objects readable for 30–90 days after cutover, export PDFs of signed quotes to the account, then decide about the package.
| Source object | What to migrate | What to skip |
|---|---|---|
SBQQ__Quote__c / SBQQ__QuoteLine__c | Quotes newer than cutoff, status Accepted or Presented, with lines. | Drafts, rejected, expired, older than cutoff. |
Apttus_Proposal__Proposal__c / line items | Proposals newer than cutoff, Accepted or Presented. | ProductConfiguration__c carts — there is one per session, including abandoned ones. |
RCA Quote / QuoteLineItem | Same rule; QuoteLineDetail is not needed in the target. | Superseded amendment quotes. |
| DealHub / Nue quotes | Export accepted quotes newer than cutoff from the vendor platform. | DealRoom activity, drafts. |
Load order
Accounts and contacts already exist. Then: products and price books → contracts → subscriptions or assets → quotes → quote lines → orders (if migrated). Loading quotes before the catalog produces lines with no product; loading subscriptions before contracts produces orphans. Use the Bulk API or a data-loader with external-ID upserts so a rerun is safe.
No. Set a cutoff — typically 12–24 months or the start of the oldest active contract — and migrate newer accepted quotes as records. Archive older ones as read-only or PDFs.
Every active subscription, asset or contract line a customer currently holds. Every renewal, amendment and cancellation after go-live starts from it, so a missing record means a missed renewal.
Per account: count of active records and sum of annual value in the source versus the target, then generate one renewal from a migrated record and check dates, quantities and prices.
No. Apttus_Config2__ProductConfiguration__c is the cart; there is one per configuration session including abandoned ones (Conga API reference). Export accepted proposals and their line items instead.
See your migration plan
Published timelines by source platform, a fixed implementation fee, and a calculator that labels every estimate.