The Prices import populates pricebooks with the full range of pricing models Qwoty supports. Always import prices last — the products and pricebooks they reference must already exist.Documentation Index
Fetch the complete documentation index at: https://docs.qwoty.io/llms.txt
Use this file to discover all available pages before exploring further.
You must have the Admin role with Data → Import CSV authorized. Your products and pricebooks must exist in the workspace before importing prices.
Open the import
Click Download example file
Get the sample CSV with the right columns and example rows for each pricing model.
The six pricing models
Each row declares its model in thepricing_model column. The other columns required depend on the model.
| Model | Use it for |
|---|---|
Flat | One fixed amount — the most common case |
Cost based | Computed from a cost basis (cost × multiplier) |
Percent | A percentage of an external value (calculated at quote time) |
Graduated Tiered | Each tier applies progressively to volumes within the tier |
Volume Tiered | The entire volume is priced at the tier matching the total quantity |
None | Placeholder — the price is filled in manually at quote time |
CSV columns reference
The Prices template includes the columns below. Some are conditionally required depending on thepricing_model and type values.
| Column | Required | Type | Description |
|---|---|---|---|
id | — | UUID | Leave empty to create a new price. Set to an existing UUID to update. |
product_id | * | UUID | The product (or variant) the price applies to. |
pricebook_id | * | Text or UUID | Target pricebook. Accepts the pricebook name (Pricebook A) or UUID. |
currency | * | Text | ISO 4217 three-letter code (EUR, USD, GBP…). |
type | * | Enum | one-time for single transactions, reccuring for subscriptions. |
floor_price | — | Number | Minimum allowed price (used as a guardrail when discounts apply). |
cost | — | Number | Internal cost reference for margin reporting. |
pay_as_you_go | — | Boolean | true for usage-based billing where actual amount is computed at consumption time. |
pricing_model | * | Enum | Flat, Cost based, Percent, Graduated Tiered, Volume Tiered, None. |
period_unit | * if recurring | Enum | day, week, month, year. |
period | * if recurring | Number | Number of period units per cycle (1 for monthly, 3 for quarterly). |
default _duration_month | — | Number | Default engagement duration in months (note: column header includes a space). |
default_vat | — | Text | VAT identifier in <COUNTRY>_<RATE> format (FR_200 = France 20%) or - for none. |
amount | * if Flat or Percent | Number | The price value. For Percent, this is the percentage (10 = 10%). |
cost_base | * if Cost based | Number | Multiplier applied to the cost (1.25 = 25% margin on cost). |
percent[multiplier] | — | Number | Multiplier on the percent calculation (Percent model only). |
percent[perimeter] | — | Text | Scope or category the percent applies to (Percent model only). |
percent[externals_id] | — | Text | External reference for the percent target (Percent model only). |
tiers[starting_unit][N] | * if tiered | Number | Lower bound of tier N (inclusive). N is 0-based: [0], [1], [2]. |
tiers[ending_unit][N] | — | Number | Upper bound of tier N (inclusive). Leave empty for “no upper limit”. |
tiers[price][N] | * if tiered | Number | Per-unit price at tier N. |
tiers[flat_fee][N] | — | Number | Optional one-time 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. This differs from options[N] on products, which is 1-based.Examples by pricing model
The examples below match the format of the official template downloaded from the import screen.Flat one-time price
A simple fixed amount per unit:Flat recurring (monthly)
A fixed amount billed every month:Cost based
Margin on cost — the amount iscost × cost_base:
Percent
10% of an external value, calculated at quote time:Graduated tiered (one-time)
The first 100 units are €5 each, the next 400 are €4, and anything above 500 is €3.50:100 × €5 + 400 × €4 + 100 × €3.50 = €2,450.
Volume tiered (one-time)
The entire quantity is priced at the tier matching the total:600 × €5.00 = €3,000 (everything at the tier matching 600).
None (placeholder)
The product appears in the pricebook with no price. Sales reps fill in the amount manually on each quote:default_vat = - to indicate “no default VAT”.
Troubleshooting
My import failed because of an unknown pricing_model
My import failed because of an unknown pricing_model
pricing_model is case-sensitive. Use exactly: Flat, Cost based (with space), Percent, Graduated Tiered, Volume Tiered, None. Lowercase flat, cost_based (underscore), or percent are rejected.My type field returned an error
My type field returned an error
type accepts one-time or reccuring (yes — with the typo reccuring, two cs). This matches the value Qwoty uses internally. Don’t fix the typo in your CSV.Tiers are imported in the wrong order
Tiers are imported in the wrong order
Qwoty uses the
tiers[starting_unit][N] value to order tiers, not the index [N]. Make sure tiers[starting_unit][0] is the smallest value. Overlapping ranges trigger a validation error.The product_id or pricebook_id values are not recognized
The product_id or pricebook_id values are not recognized
product_id must be a valid UUID that exists in your workspace. pricebook_id accepts either the pricebook name (Pricebook A) or its UUID. Export your products and pricebooks first to retrieve the correct values.The default_vat column is rejected
The default_vat column is rejected
Use the
<COUNTRY>_<RATE> format with the rate as a 2- or 3-digit number (no decimal point): FR_200 for 20.0%, FR_055 for 5.5%, DE_190 for 19.0%. Use - (just a dash) when no VAT applies.The default _duration_month column is rejected as a typo
The default _duration_month column is rejected as a typo
The column header contains a deliberate space:
default _duration_month. Keep it exactly as in the template — it’s not a typo on your end. If you’re editing the template manually in Excel, make sure the space isn’t trimmed.Recurring price was created but the period is wrong
Recurring price was created but the period is wrong
Check the combination of
period_unit and period. Monthly = month + 1. Quarterly = month + 3. Annual = year + 1. Daily = day + 1.My percent price is being applied with weird results
My percent price is being applied with weird results
The
amount column for Percent is the percentage as a number, not a fraction. 10 means 10%, not 0.10. Combine with floor_price to set a minimum charge.Next steps
Pricing types reference
Conceptual deep-dive on each pricing model.
Create a pricebook
Build the pricebook before importing prices into it.
Import products
Make sure your products exist before importing their prices.
Prepare your CSV
Universal formatting rules.

