Skip to main content

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.

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.
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

1

Open Settings

In the left sidebar, click Settings.
2

Navigate to Import/Export Data

Under the Data section, click Import/Export.
3

Select Prices

Tick the Prices card at the top of the page.
4

Click Download example file

Get the sample CSV with the right columns and example rows for each pricing model.
5

Click Import

Drop your file. The 4-step wizard runs: Upload → Mapping → Confirm → Result.

The six pricing models

Each row declares its model in the pricing_model column. The other columns required depend on the model.
ModelUse it for
FlatOne fixed amount — the most common case
Cost basedComputed from a cost basis (cost × multiplier)
PercentA percentage of an external value (calculated at quote time)
Graduated TieredEach tier applies progressively to volumes within the tier
Volume TieredThe entire volume is priced at the tier matching the total quantity
NonePlaceholder — the price is filled in manually at quote time
Pricing model values are case-sensitive and use the exact spelling above (note the space in Cost based, the capitalization in Graduated Tiered and Volume Tiered). Lowercase or different formatting is rejected.

CSV columns reference

The Prices template includes the columns below. Some are conditionally required depending on the pricing_model and type values.
ColumnRequiredTypeDescription
idUUIDLeave empty to create a new price. Set to an existing UUID to update.
product_id*UUIDThe product (or variant) the price applies to.
pricebook_id*Text or UUIDTarget pricebook. Accepts the pricebook name (Pricebook A) or UUID.
currency*TextISO 4217 three-letter code (EUR, USD, GBP…).
type*Enumone-time for single transactions, reccuring for subscriptions.
floor_priceNumberMinimum allowed price (used as a guardrail when discounts apply).
costNumberInternal cost reference for margin reporting.
pay_as_you_goBooleantrue for usage-based billing where actual amount is computed at consumption time.
pricing_model*EnumFlat, Cost based, Percent, Graduated Tiered, Volume Tiered, None.
period_unit* if recurringEnumday, week, month, year.
period* if recurringNumberNumber of period units per cycle (1 for monthly, 3 for quarterly).
default _duration_monthNumberDefault engagement duration in months (note: column header includes a space).
default_vatTextVAT identifier in <COUNTRY>_<RATE> format (FR_200 = France 20%) or - for none.
amount* if Flat or PercentNumberThe price value. For Percent, this is the percentage (10 = 10%).
cost_base* if Cost basedNumberMultiplier applied to the cost (1.25 = 25% margin on cost).
percent[multiplier]NumberMultiplier on the percent calculation (Percent model only).
percent[perimeter]TextScope or category the percent applies to (Percent model only).
percent[externals_id]TextExternal reference for the percent target (Percent model only).
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 at tier N.
tiers[flat_fee][N]NumberOptional 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:
id,product_id,pricebook_id,currency,type,floor_price,pricing_model,default_vat,amount
,,Pricebook A,EUR,one-time,2,Flat,FR_200,50.00

Flat recurring (monthly)

A fixed amount billed every month:
id,product_id,pricebook_id,currency,type,pricing_model,period_unit,period,default_vat,amount
,,Pricebook A,EUR,reccuring,Flat,month,1,FR_200,50.00

Cost based

Margin on cost — the amount is cost × cost_base:
id,product_id,pricebook_id,currency,type,floor_price,pricing_model,default_vat,cost_base
,,Pricebook B,EUR,one-time,2,Cost based,FR_200,1.25

Percent

10% of an external value, calculated at quote time:
id,product_id,pricebook_id,currency,type,floor_price,pricing_model,default_vat,amount
,,Pricebook C,EUR,one-time,2,Percent,FR_200,10

Graduated tiered (one-time)

The first 100 units are €5 each, the next 400 are €4, and anything above 500 is €3.50:
id,product_id,pricebook_id,currency,type,pricing_model,default_vat,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],tiers[starting_unit][2],tiers[ending_unit][2],tiers[price][2],tiers[flat_fee][2]
,,Pricebook D,EUR,one-time,Graduated Tiered,FR_200,1,100,5.00,0,101,500,4.00,0,501,,3.50,0
For 600 units: 100 × €5 + 400 × €4 + 100 × €3.50 = €2,450.

Volume tiered (one-time)

The entire quantity is priced at the tier matching the total:
id,product_id,pricebook_id,currency,type,pricing_model,default_vat,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]
,,Pricebook E,EUR,one-time,Volume Tiered,FR_200,1,100,6.00,0,101,,5.00,0
For 600 units: 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:
id,product_id,pricebook_id,currency,type,floor_price,pricing_model,default_vat
,,Pricebook F,EUR,one-time,2,None,-
Note default_vat = - to indicate “no default VAT”.

Troubleshooting

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.
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.
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.
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.
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 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.
Check the combination of period_unit and period. Monthly = month + 1. Quarterly = month + 3. Annual = year + 1. Daily = day + 1.
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.