Configure Pricelist
Create a .json, .csv or .xlsx file that represents your product database. Each row represents one sellable item, up to 50,000 rows. Columns define pricing, attributes, and quoting behavior.
Use the exact column names below. expenditure is validated against its allowed values and a row is rejected if it does not match. category is not enforced, but the app groups the catalog by it and the Product Editor only offers the values listed for each expenditure, so stick to those.
Required Fields
A row missing any of these is rejected.
| Column Name | Description |
|---|---|
part_number | Unique identifier for the item. 1 to 50 characters. Must be unique across the file. |
list_price | Base list price before discounts or adjustments. Digits only, with an optional decimal point and up to two decimals. Up to 12 digits. See below. |
product | Product name or product family. Up to 100 characters. |
category | Depends on expenditure. capex: Hardware, Software, or Software License. opex: Cloud, Software, Software License, Hardware, or Services. otf: Services, Activation, or Products. Up to 100 characters. |
expenditure | capex, opex, or otf (one-time payment). |
subscription | Required when expenditure is opex. Allowed values: monthly, annual, or prepaid:<months>. Must be blank when expenditure is otf. |
Writing list prices
Write the number and nothing else. 34950 and 34950.00 are both valid, so cents are optional.
Do not include a currency symbol or thousands separators. A value like $34,950.00 is rejected.
Prices are currency-agnostic on purpose. QuoteLogic adds the symbol and the separators when it displays a price, using the Preferred Currency on your account, which you can override per quote from the Pricing drawer. The same pricelist works in any currency, so the number you enter is the number that gets calculated.
Why Optional Fields Matter
The required fields are the bare minimum. The optional ones are what make the app fast to use.
Search matches against your product data, so a sparse pricelist is a slow one. Search looks at these fields, in two tiers:
- Matched first:
part_number,product,models - Also matched:
classifications,option_1,option_2,option_3,aliases,category,expenditure
aliases deserves special attention. It exists so a rep can find a product by whatever they actually call it in conversation rather than by its catalog name. Nicknames, superseded model names, internal shorthand, and common misspellings all belong there.
description is deliberately not searched. It is the customer-facing text that appears during quoting and in generated documents, so write it for the reader rather than for the search box.
The same principle applies to everything else that reads your catalog. Matching a vague request to the right part number is only ever as good as the data describing that part, and thin data is the limiting factor no matter how capable the tooling becomes. Filling in the optional columns once pays off every time someone builds a quote.
Optional Fields
These fields enhance search, filtering, and quoting behavior.
| Column Name | Description |
|---|---|
models | Up to 50 values, each up to 100 characters. A single value or comma-separated. Useful for shared part numbers such as upgrades or software. |
classifications | Up to 50 values, each up to 100 characters. A single value or comma-separated. |
description | Detailed description shown during quoting and in generated documents. Between 10 and 1500 characters when provided. |
option_1 | Optional product attribute (e.g., feature, edition, or setup type). Up to 100 characters. |
option_2 | Optional product attribute. Up to 100 characters. |
option_3 | Optional product attribute. Up to 100 characters. |
aliases | Alternate names, abbreviations, and nicknames used for search. Comma-separated. Up to 200 characters. |
auto_support | When set to true, automatically generates support items based on your Support Rules. Leave blank or set to false to disable. Requires a Support Rules file. Ignored on otf items. |
product_status | Sellable state of the product. Defaults to Active when blank. See below. |
required_products | Part numbers that are added automatically whenever this product is added to a quote. See below. |
Product status
product_status decides where a product appears in the catalog.
| Value | Meaning | Where it appears |
|---|---|---|
Active, Free, Special | Sellable today | Main catalog |
EoSa | End of Sale | Collapsed Inactive group |
EoSu | End of Support | Collapsed Inactive group |
EoL | End of Life | Collapsed Inactive group |
Inactive | Withdrawn | Collapsed Inactive group |
Capitalization does not matter, but spelling does. A value outside this list hides the product from the catalog entirely, because it belongs to neither the sellable group nor the legacy group. Note that End of Sale is EoSa, not EoS.
Required products
required_products lists the part numbers that come with this product. When the product is added to a quote, they are added with it, and their quantities follow the parent.
Use a part number on its own, or a part number and a quantity separated by a colon. Separate entries with commas.
CABLE-USadds one of that partSFP-SR:2adds two of that part for every parentCABLE-US, SFP-SR:2, RACK-KITcombines them
Quantities must be whole numbers between 1 and 10,000, and a product can list up to 50 requirements. Every part number you reference must exist elsewhere in the same file.
Requirements cannot form a loop. A product that requires itself, or a chain that leads back to where it started, is rejected. So is any product that requires a rejected one, since the requirement can no longer be satisfied.
When your file is ready, see Uploads on how to load it into QuoteLogic and what happens to your existing data.