Price book import file format
Import overrides, percentage adjustments, Cost Plus, volume tiers, and pricing tables from a single CSV—the format Quotivity uses when you export a price book, including product name and SKU for reference.
Overview
Section titled “Overview”Price book imports use a CSV file with a model column that tells Quotivity how each row should be priced: fixed overrides, percentage adjustments, Cost Plus, volume tiers, or pricing tables (enum and range). This is the same layout Quotivity writes when you Export CSV from a price book.
Exported files also include productName and productSku columns so you can identify products while editing in a spreadsheet. Import reads productId only—name and SKU are ignored, so you can edit or clear those columns without affecting pricing.
If you have spreadsheets from the previous import layout—currency columns only, with no model column—they still upload successfully today. That older format is legacy and will be retired in a future release. We recommend moving existing files to the current layout when you next update them.
How to import
Section titled “How to import”- Open Pricing → Price Books in Quotivity Studio.
- Click Import CSV on the price book list or inside a price book.
- Upload your CSV file.
- Check your email when processing finishes. Quotivity sends a summary and, if any rows were rejected, a link to download a feedback file listing the row number, field, and reason. The download link expires after seven days.
Accepted rows are applied in the background. Rejected rows are skipped; they do not block other valid rows in the same file.
File columns
Section titled “File columns”Every import file uses the same header. Columns you do not need for a particular row can be left blank.
| Column | Required | Description |
|---|---|---|
| priceBookId | Yes | Price book ID from the end of the price book URL in Quotivity Studio. |
| productId | Yes | HubSpot record ID for the product. |
| productName | No | Product name from HubSpot. Included on export for reference; ignored on import. |
| productSku | No | Product SKU (hs_sku) from HubSpot. Included on export for reference; ignored on import. |
| operation | Yes | upsert to set pricing, or delete to remove the product’s entry from the price book. |
| model | Yes | Pricing type for the row: override, percent, costplus, volume, range, or enum. |
| property | For range and enum |
HubSpot product property the pricing table reads (for example, color or weight). |
| value | For enum |
The exact property value this row prices (for example, red). |
| start | For volume and range |
Lower bound of the tier or range. |
| end | For volume and range |
Upper bound. Leave blank on the top volume tier for an open-ended band. Required for range. |
| Currency columns | Per enabled currency | One column per portal currency (USD, EUR, and so on) with the price for that currency on this row. Leave a cell blank—or enter -—to keep HubSpot standard pricing for that currency. |
<CCY>_basis, <CCY>_mode, <CCY>_round |
For costplus |
One set per currency the row prices with Cost Plus (for example USD_basis). _basis is amount or percent; _mode is markup or margin (percent only, defaults to markup); _round is true or false (defaults to true). |
Use a period as the decimal separator. Currency symbols are not required. Negative values are not supported.
Only include columns for currencies enabled in your HubSpot portal.
Reference columns (export only)
Section titled “Reference columns (export only)”productName and productSku appear on every row in an exported file, including
when a product has multiple volume, range, or enum rows. They repeat the HubSpot
product name and SKU (hs_sku) at export time.
On import, these columns are optional. You may include them, leave them blank, or remove them entirely. Quotivity never updates product name or SKU from an import file, and mismatched values do not cause row errors.
Models and example rows
Section titled “Models and example rows”Override (fixed price)
Section titled “Override (fixed price)”One row per product. Leave property, value, start, and end blank.
priceBookId,productId,productName,productSku,operation,model,property,value,start,end,USD,EUR8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,override,,,,,100,85Use HubSpot standard pricing
Section titled “Use HubSpot standard pricing”To include a product in a price book without changing its price, set operation
to upsert and model to override, then leave the currency columns blank.
Quotivity still creates the product’s entry and associates it with the price book.
Because no override is stored, quotes use the product’s HubSpot standard price.
A hyphen (-) in a currency cell means the same thing. Export CSV writes -
for products that are in the book but have no price override.
priceBookId,productId,productName,productSku,operation,model,property,value,start,end,USD,EUR8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,override,,,,,,You can mix the two on one row: enter a number in USD and leave EUR blank to
override only USD. If the product already has an override in this book, importing
a blank or - cell for that currency removes the override and returns that
currency to HubSpot standard pricing.
Percent (adjust standard price)
Section titled “Percent (adjust standard price)”One row per product. Enter a decimal multiplier of the standard price in each
currency column—for example, 1.1 for 110% of standard price, or 0.8 for 80%.
If you are converting a legacy spreadsheet, note that the previous format expressed
percentages relative to 100% with a % suffix (for example, 110%). In the
current format, use the multiplier directly.
priceBookId,productId,productName,productSku,operation,model,property,value,start,end,USD8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,percent,,,,,0.9Cost Plus (Enterprise)
Section titled “Cost Plus (Enterprise)”Cost Plus requires an Enterprise plan.
One row per product. The currency column holds the Cost Plus value: the amount added
to cost when <CCY>_basis is amount, or the percent as a fraction when it is
percent (0.3 is 30%). Add <CCY>_mode (markup or margin) for percent rows and
<CCY>_round to control rounding. Leave property, value, start, and end
blank. See Pricing from cost with Cost Plus for
the formulas.
priceBookId,productId,productName,productSku,operation,model,property,value,start,end,USD,USD_basis,USD_mode,USD_round,CAD,CAD_basis,CAD_mode,CAD_round8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Custom Frame,FRAME-001,upsert,costplus,,,,,0.3,percent,markup,true,25,amount,,trueA product can mix override, percent, and costplus across currencies on the same
row: leave the attribute columns blank for currencies that don’t use Cost Plus. Cost
Plus on a product with no cost of goods sold (including a cost of 0) is skipped for
that currency and listed in the feedback file as Product has no cost of goods
sold. Other currencies on the same row still import — for example an override or
percent. A Cost Plus currency with no exchange rate from the primary currency is also
skipped (No exchange rate available for currency X). Margins of 100% or more and
negative values are rejected. Export CSV includes the attribute columns only when
the price book contains a Cost Plus entry.
Volume (Enterprise)
Section titled “Volume (Enterprise)”Volume pricing requires an Enterprise plan.
One row per quantity tier for the same product. Use the same model on every tier row. Leave property and value blank.
priceBookId,productId,productName,productSku,operation,model,property,value,start,end,USD8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,volume,,,1,9,508266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,volume,,,10,49,458266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,volume,,,50,,40The last row has a blank end value, so the tier applies to every quantity from 50 upward.
Range pricing table (Enterprise)
Section titled “Range pricing table (Enterprise)”Pricing tables require an Enterprise plan.
One row per numeric band. property must match the product property the table uses. Both start and end are required on every row.
priceBookId,productId,productName,productSku,operation,model,property,value,start,end,USD8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,range,weight,,0,5,208266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,range,weight,,5,10,30Enum pricing table (Enterprise)
Section titled “Enum pricing table (Enterprise)”One row per allowed property value. property and value identify the option; currency columns hold the unit price for that option.
priceBookId,productId,productName,productSku,operation,model,property,value,start,end,USD8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,enum,color,red,,,108266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,enum,color,blue,,,12Validation rules
Section titled “Validation rules”Quotivity validates your file before applying changes.
Whole-file checks (the import fails entirely):
- A currency column is included for a currency not enabled in your portal.
- A numeric cell uses a comma as the decimal separator.
- A numeric cell contains a negative value.
Row-level checks (invalid rows are skipped; others still import):
- Unknown priceBookId or productId is missing.
- Unknown model value.
- A product declares more than one model in the same price book (for example,
mixing
overrideandvolumeon the same product). - Duplicate tier or enum value rows for the same product.
- volume row missing start; range row missing start or end; enum row missing value; range or enum row missing property.
- costplus row missing
<CCY>_basis, with a margin of 100% or more, or on a plan without Cost Plus. - costplus for a product with no cost of goods sold (including a cost of
0), or for a currency with no exchange rate from the portal’s primary currency. Quotivity skips only the unpriceable Cost Plus currencies and still imports other currencies on that row.
Skipped rows appear in the feedback CSV attached to your completion email.
Legacy import format
Section titled “Legacy import format”The previous import layout omits the model column and supports override and percent adjustments only. Files without a model column are still accepted, but this layout will be retired in a future release.
When you are ready to migrate:
- Add model, productName, and productSku columns (name and SKU are optional on import but help when reviewing the file).
- Set each row’s model to
overrideorpercent(orcostpluswith its attribute columns). - For override rows, leave property, value, start, and end blank.
- For percent rows, convert
%values to decimal multipliers (for example, change110%to1.1). - Or export the price book from Quotivity Studio and use that file as your starting point—it already follows the current layout, including product name and SKU.
What bulk import does not include
Section titled “What bulk import does not include”- Product variant pricing is not included in price book export or bulk import. Configure variant pricing separately in Quotivity Studio or through the product variant pricing upload flow.
- A single product cannot use more than one model within the same price book in one import.
- Start from Export CSV when editing an existing price book—the exported file already uses the current column layout, including productName and productSku.
- Use name and SKU columns to sort or filter in your spreadsheet; only productId determines which product receives the price.
- To add a product that should keep its HubSpot standard price, use
upsert+overrideand leave the currency columns blank. - Keep a copy of your file before importing so you can revert if needed.
- If many rows fail, fix the feedback file and import again rather than editing rows one at a time in Studio.
- Plan to move legacy spreadsheets to the current format before the older layout is retired.
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.