Skip to main content
Prices in Qwoty are created automatically — every time a pricebook is set up, all relevant products receive a price entry. Your job is to fill in the values, not to create the entries from scratch. When you create a pricebook, Qwoty automatically generates one price entry per product and per billing period — all set to None. Those entries already have an id. The export-then-reimport flow is therefore the same whether you are configuring prices for the first time or updating existing ones. The standard workflow is: export your existing prices → edit the CSV → reimport it. The id column is the only key Qwoty uses to match rows; all other fields are updated in place.
You must have the Admin role to access Import & Export. Pricebooks must already exist before you can configure their prices.

Access

Navigate to Settings → Import & Export, then select the Prices section. The page has two panels: Import (upload a CSV) and Export (download your current data).

Update prices

1

Export your current prices

In the Export panel, choose what to download:
  • All data — every price across all pricebooks
  • Filter by pricebook — one pricebook at a time
  • Filter by catalog — all prices for products in a given catalog
Click Export CSV. The file contains one row per price, with the id column pre-filled for every existing entry.
2

Edit the CSV

Open the file in your spreadsheet editor and fill in or update the pricing columns. The following columns are read-only context — they identify what each row represents and must not be changed:
  • id, product_api_name, pricebook_api_name, currency_code, type, period_unit, period
The columns you configure are: pricing_model, amount, percent, cost, floor_price, vat_code, engagement_type, period_duration_month, pay_as_you_go, identifiers[*], and tier columns.Rows with an empty pricing_model (or None) are placeholder prices waiting to be configured. Set the model and the relevant amount columns for those rows.
Do not add new rows. Prices are created automatically when pricebooks are set up — rows not present in the export do not correspond to any existing price and will be rejected on import.
3

Reimport the file

In the Import panel, click Upload File and drop your edited CSV.The import wizard runs in four steps: Upload → Mapping → Confirm → Result. Review the mapping screen before confirming to make sure columns are matched correctly.
Once the import completes, your prices are live in the corresponding pricebooks. Open a pricebook to verify the changes.

The six pricing models

Each row declares its model in the pricing_model column. The required columns depend on the model.
ModelUse it for
FlatOne fixed amount — the most common case
Cost basedSelling price computed as a multiplier on the product’s defined cost
PercentA percentage of a reference value, calculated at quote time
Graduated TieredEach tier applies progressively to volumes within that tier
Volume TieredThe entire quantity is priced at the tier matching the total
NonePlaceholder — the price is filled in manually at quote time
pricing_model values are case-sensitive. Use exactly: Flat, Cost based (with a space), Percent, Graduated Tiered, Volume Tiered, None. Any other casing is rejected.

CSV columns reference

ColumnRequiredTypeDescription
idUUIDPrice ID — the only key used on import. Never change this value.
product_api_nameTextRead-only context. The API name of the associated product.
pricebook_api_nameTextRead-only context. The API name of the associated pricebook.
currency_codeTextRead-only context. ISO 4217 code (EUR, USD, GBP…).
typeEnumRead-only context. one-time or recurring.
period_unitEnumRead-only context. Billing period unit (day, week, month, year).
periodNumberRead-only context. Number of period units per cycle (1 = monthly, 3 = quarterly).
pricing_modelEnumFlat, Cost based, Percent, Graduated Tiered, Volume Tiered, None.
vat_codeTextVAT identifier in vat_<country>_<rate> format (e.g. vat_fr_200 = France 20%). Leave empty for no default VAT.
floor_priceNumberMinimum allowed price (guardrail when discounts are applied).
amount✱ if FlatNumberThe fixed price per unit.
percent✱ if PercentNumberThe percentage value (8.95 = 8.95%).
percent[multiplier]NumberOptional multiplier on the percent calculation.
percent[perimeter]TextScope the percentage applies to (e.g. product).
percent[externals_id]UUIDReference ID for the percent target.
costNumberFor Flat: internal cost reference used for margin reporting. For Cost based: the multiplier applied to the product’s cost to compute the selling price.
pay_as_you_goBooleantrue for usage-based billing where the amount is computed at consumption time.
engagement_typeEnumforever (open-ended) or fixed (commitment period).
period_duration_monthNumberCommitment duration in months. Required when engagement_type is fixed.
identifiers[erp]TextExternal ERP reference for this price.
identifiers[crm]TextExternal CRM reference for this price.
identifiers[accounting]TextExternal accounting reference for this price.
tiers[starting_unit][N]✱ if tieredNumberLower bound of tier N (inclusive). N is 0-based: [0], [1], [2]
tiers[ending_unit][N]NumberUpper bound of tier N (inclusive). Leave empty for “no upper limit”.
tiers[price][N]✱ if tieredNumberPer-unit price for tier N.
tiers[flat_fee][N]NumberOptional flat fee added on top of tier N (Graduated Tiered only).
Tier indexes are 0-based: the first tier is tiers[starting_unit][0], the second is tiers[starting_unit][1], and so on.

Examples by pricing model

Flat one-time

A fixed amount per unit, with an internal cost reference for margin reporting:
id,currency_code,type,pricing_model,vat_code,floor_price,amount,cost
a3b97966-...,EUR,one-time,Flat,vat_fr_200,13900,14900,8700

Flat recurring (monthly, open-ended)

A fixed monthly fee with no commitment period:
id,currency_code,type,pricing_model,vat_code,amount,period_unit,period,engagement_type
bf56bdd5-...,EUR,recurring,Flat,vat_fr_200,0,month,1,forever

Flat recurring (annual, fixed commitment)

An annual price with a 12-month commitment:
id,currency_code,type,pricing_model,vat_code,amount,period_unit,period,engagement_type,period_duration_month
d1b65444-...,EUR,recurring,Flat,vat_fr_200,1100,year,1,fixed,12

Cost based

Selling price is computed as the product’s defined cost × the multiplier in cost. A floor_price sets the minimum:
id,currency_code,type,pricing_model,vat_code,floor_price,cost
dcc190c5-...,EUR,one-time,Cost based,vat_fr_200,10,2

Percent

A percentage of a reference product’s price, calculated at quote time:
id,currency_code,type,pricing_model,vat_code,percent,percent[perimeter],percent[externals_id],period_unit,period,engagement_type
5a68792e-...,EUR,recurring,Percent,vat_fr_200,8.95,product,b150e52a-...,month,1,forever

Graduated tiered

The first 10 units at €49, everything above at €39:
id,currency_code,type,pricing_model,vat_code,period_unit,period,tiers[starting_unit][0],tiers[ending_unit][0],tiers[price][0],tiers[flat_fee][0],tiers[starting_unit][1],tiers[ending_unit][1],tiers[price][1],tiers[flat_fee][1]
ac06fe31-...,EUR,recurring,Graduated Tiered,vat_fr_200,month,1,1,10,49,0,11,,39,0
For 15 units: 10 × €49 + 5 × €39 = €685.

Volume tiered

The entire quantity is priced at the tier matching the total volume:
id,currency_code,type,pricing_model,vat_code,tiers[starting_unit][0],tiers[ending_unit][0],tiers[price][0],tiers[flat_fee][0],tiers[starting_unit][1],tiers[ending_unit][1],tiers[price][1],tiers[flat_fee][1]
...,EUR,one-time,Volume Tiered,vat_fr_200,1,100,6.00,0,101,,5.00,0
For 150 units: 150 × €5.00 = €750 (everything at the tier matching 150).

None (placeholder)

The product appears in the pricebook but has no configured price. Sales reps fill in the amount manually on each quote:
id,currency_code,type,pricing_model,vat_code
5f7efcbd-...,EUR,one-time,None,vat_fr_200

Troubleshooting

pricing_model is case-sensitive. Use exactly: Flat, Cost based (with a space), Percent, Graduated Tiered, Volume Tiered, None. Lowercase variants or underscores (cost_based) are rejected.
The id column must contain a UUID that exists in your workspace. Only rows from an export of your own workspace are valid. Do not copy IDs from another workspace or create new ones manually.
Qwoty orders tiers by tiers[starting_unit][N] value, not by index position. Make sure tiers[starting_unit][0] is the smallest value. Overlapping ranges trigger a validation error.
Use the vat_<country>_<rate> format, all lowercase, with the rate as a number without a decimal point: vat_fr_200 for 20%, vat_fr_055 for 5.5%, vat_de_190 for 19%. Leave the cell empty when no VAT applies.
When engagement_type is fixed, you must also fill in period_duration_month with the number of months (e.g. 12 for a 12-month commitment). Leaving it empty with engagement_type = fixed causes the field to be ignored.
The percent column takes a number, not a fraction: 8.95 means 8.95%, not 0.0895. Combine with floor_price to set a minimum charge.

Pricing types reference

Conceptual deep-dive on each pricing model and when to use it.

Create a pricebook

Set up the pricebook before exporting its prices to configure.

Import products

Products must exist before their prices can be configured.

Prepare your CSV

Universal formatting rules for all Qwoty imports.