Migrating quotes into Quotivity
Plan a quote migration so historical quotes stay put and in-progress drafts open in Quote Builder the way you expect.
Overview
Section titled “Overview”You can load quotes from another system into HubSpot with the HubSpot API, and Quotivity will show them on the deal and open them like any other quote. What needs planning is what Quotivity remembers: it keeps a small record for every quote it builds, and an imported quote arrives without one. A won quote from 2024 doesn’t care. An open draft does, because the first time a rep opens it in Quote Builder, your Quote Rules and bundle setup run against it as if the old system had done nothing.
Field-by-field detail is in Quote migration property reference. The automation that runs on a migrated draft is in What Quotivity runs on a migrated quote.
What lives in HubSpot and what Quotivity keeps
Section titled “What lives in HubSpot and what Quotivity keeps”Most of a quote is HubSpot data, and you can import all of it. Quotivity reads it fresh whenever someone opens the quote.
| Lives in HubSpot (you can import it) | Kept by Quotivity (starts empty on a migrated quote) |
|---|---|
| Quote properties: status, title, currency, price book, expiration | Which Quote Rules already ran and which line items they added |
| Line items, including the Quotivity bundle and pricing properties | Which bundle headers Quotivity already filled with members |
| Associations to the deal, contacts, company, and HubSpot template | Which values an Update Line Items rule set versus a rep’s own edits |
| Quote-level discounts, fees, and taxes | Approval and validation history |
| Revenue and margin properties | Ramp groups (Enterprise) |
| Signature and acceptance properties | The quote’s Quotivity template and signature choice |
There’s one bridge between the two columns. If your account uses Quotivity Templates, two quote properties, Quotivity Template ID and E-Signature Enabled, are copied into Quotivity’s record the first time the quote opens in Quote Builder. That’s how a migrated draft can start on the right Quotivity template with the right signature setting. See the property reference for the details.
Choose a status for each quote
Section titled “Choose a status for each quote”The HubSpot quote status you import decides whether Quotivity changes the quote. Quote Builder only edits quotes in Draft or Rejected. Every other status opens in the read-only viewer, and Quotivity’s background updates refuse to write to it.
| Where the quote is in your old system | Import it as | What happens in Quotivity |
|---|---|---|
| Won, signed, lost, or expired | Approved or Approval not needed (published) | Read-only. Quotivity doesn’t recalculate the quote or rerun rules. The deal card links to the quote’s HubSpot quote page and PDF, if it has them. Importing a quote that’s already signed doesn’t sync its deal or create a contract. |
| Sent to the buyer and still open | Approved or Approval not needed | Read-only until a rep recalls it. Recall turns it into a draft, and from then on it behaves like the next row. A quote that’s accepted or signed can’t be recalled. |
| Still being built | Draft | Fully live. The first time a rep opens it, totals recalculate, bundles are checked, and rules run. |
| Waiting on an internal approval | Draft, then have the rep submit it again | Quotivity has no approval request on file for it, so a Pending approval import can’t be approved through Quotivity. |
That last row trips people up. A quote imported as Pending approval shows Details instead of Review on the deal card, and reps can’t edit it. Quotivity’s Request Quote Approval and Publish the Quote workflow actions reject it with the message “This quote was not submitted through Quotivity”. Import it as a draft and let your approval rules decide again. They’d have to anyway, since a previous approval in another system doesn’t count in Quotivity.
Before you import
Section titled “Before you import”Get your catalog into Quotivity Studio first. Migrated quotes point at Quotivity price books, and migrated line items point at Quotivity bundles and bundle options, all by ID. Those IDs only exist once you’ve built them.
Check that:
- Every product on an in-progress draft is in the price book you’ll assign to that quote. A product outside the book keeps its imported price, but if a rep later changes the price book, most products that aren’t in the new one are removed. Custom lines with no product stay.
- Every bundle used on a draft exists in Studio with the same options, and each included option has at least one product in the price book it’s priced from.
- Each quote has exactly one deal to associate to, and the deal’s Deal Currency matches the currency you’ll give the quote. A mismatch locks Quote Builder.
- If you use Quotivity Templates, the template you’ll assign is published and active.
- None of your HubSpot workflows will enroll the imported quotes by accident. A workflow that enrolls quotes by status can fire on thousands of them at once, including workflows that use Quotivity actions, and the final status update in the steps below is the change those workflows catch.
Each HubSpot portal has its own Quotivity account, so a sandbox portal’s price book, bundle, option, and template IDs won’t match production. Map IDs per portal in your import script.
Import a pilot batch, then the rest
Section titled “Import a pilot batch, then the rest”Start with a small pilot batch, ideally on test deals in a HubSpot sandbox, and run the full sequence on it before you touch the rest. This is a data migration, so the steps are written for your import script and there are no screenshots.
- Quotivity Studio: build your price books, bundles, and templates.
- Note the IDs your script needs. The property reference shows where to find each one.
- HubSpot API: create each quote as
DRAFT, with its other properties.- HubSpot locks a published quote, so line items and associations can’t be added after its status is set.
- HubSpot API: associate each quote to its deal.
- Also associate the buyer contacts and company.
- If the quote uses a HubSpot quote template, associate that template.
- HubSpot API: create the bundle header line items.
- Each member line item needs the HubSpot ID of its header, so headers come first.
- HubSpot API: create the bundle members and the remaining line items.
- Set each line’s position (
hs_position_on_quote) so the order matches the original.
- Set each line’s position (
- HubSpot API: associate the line items, discounts, fees, and taxes to the quote.
- HubSpot API: for quotes that won’t stay drafts, set the final status in one last update.
- Include the signature and acceptance properties in that same update.
- Deal record: on the Quotivity Quotes card, click Reload quotes.
- The card keeps its own list of each deal’s quotes. It picks up an imported quote when someone clicks Reload quotes or when that cached list expires.
- Quote Builder: open each pilot draft.
- A draft is ready when it opens without new line items appearing, its total matches the original, and no rule shows an error.
When the pilot looks right, run steps 2 to 7 for everything else. Twenty test quotes cost an afternoon. A rule that adds a duplicate fee to 400 live drafts costs a lot more.
Example
Section titled “Example”Say a manufacturer is moving off a spreadsheet process. They have 1,200 closed quotes and 35 open drafts, and one of their Quote Rules adds a $250 crating fee to any quote with freight products.
The 1,200 closed quotes go in as Approval not needed with their revenue properties filled in, so reporting works on day one. Quotivity doesn’t edit them.
Their 35 drafts go in as Draft. Most of them already carry the crating fee from the old process, and the Add One-time Fee outcome doesn’t check for an existing fee, so the first open would add a second one. The admin has two clean fixes. Leave the fee off the imported drafts and let the rule add it, or keep that rule off migrated quotes with a quote property condition (see Keeping rules off migrated quotes).
- Set your own Migrated quote property on every quote you import. It’s the cleanest filter for reports, and it’s what lets you keep rules off migrated quotes. Leave Quotivity’s Created by Quotivity property empty.
- Import fewer drafts than you think you need. A draft a rep can rebuild in ten minutes in Quote Builder is often cleaner than a migrated one.
- If something looks wrong on a migrated draft, check whether a rule did it before you change the import.
Related articles
Section titled “Related articles”Ask the help center
Answers come from these guides, with links to the articles used.
Ask anything about configuring quoting in Quotivity Studio.