Skip to content

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.

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.

  1. Open Pricing → Price Books in Quotivity Studio.
  2. Click Import CSV on the price book list or inside a price book.
  3. Upload your CSV file.
  4. 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.

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.

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.

One row per product. Leave property, value, start, and end blank.

priceBookId,productId,productName,productSku,operation,model,property,value,start,end,USD,EUR
8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,override,,,,,100,85

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,EUR
8266b657-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.

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,USD
8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,percent,,,,,0.9

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_round
8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Custom Frame,FRAME-001,upsert,costplus,,,,,0.3,percent,markup,true,25,amount,,true

A 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 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,USD
8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,volume,,,1,9,50
8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,volume,,,10,49,45
8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,volume,,,50,,40

The last row has a blank end value, so the tier applies to every quantity from 50 upward.

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,USD
8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,range,weight,,0,5,20
8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,range,weight,,5,10,30

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,USD
8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,enum,color,red,,,10
8266b657-ee1a-44ba-bb7a-9e826c4d7862,12345,Widget Pro,WGT-001,upsert,enum,color,blue,,,12

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 override and volume on 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.

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 override or percent (or costplus with its attribute columns).
  • For override rows, leave property, value, start, and end blank.
  • For percent rows, convert % values to decimal multipliers (for example, change 110% to 1.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.
  • 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 + override and 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.