Manage pricing tiers
A pricing tier is a named price list. Every product can carry a different price in each tier — for example a Retail tier and a Wholesale tier — and downstream features (channel listings, quotes, reports) read whichever tier they're configured for. One tier is always the default: it's the fallback price source whenever nothing more specific is chosen.
This page covers the everyday management of tiers under Settings → Pricing Tiers: creating an absolute tier, choosing the default, archiving and restoring, running bulk actions, and moving tiers in and out of SKU with import/export.
Absolute tiers hold prices you type in per product. Relative (derived) tiers instead compute their prices from another source with a formula — those have their own model and edge cases, explained in Relative pricing tiers. To type a product's actual price into a tier, see Set a product's price.
Before you begin
Pricing-tier actions are permission-gated. You need the matching permission for each operation:
| Action | Permission |
|---|---|
| Create a tier | pricing_tiers.create |
| Edit a tier / set the default | pricing_tiers.update |
| Archive or unarchive (incl. bulk) | pricing_tiers.archive |
| Delete (incl. bulk) | pricing_tiers.delete |
| Import / export | pricing_tiers.import |
Buttons and row actions you lack permission for are hidden. See the Product permissions reference for the full matrix.
Browse and manage the tier list
Open Settings → Pricing Tiers. The list shows one row per tier with columns for ID, Name, Type (Absolute or Relative), Base Tier, Formula, Currency, Default, and the created/updated/archived timestamps.
- Search by ID, Name, or Currency, and use advanced filters (including a Type filter for Absolute vs Relative) to narrow the list.
- Archived tiers are hidden by default. The list applies an "exclude archived" scope, so a tier you archived disappears from the normal view. Switch the archived toggle to Archived (or All) to see them.
- Saved views and column sorting work as on any other list — see Browse, search & filter the products list for the shared controls.
Create an absolute pricing tier
- Click Create Pricing Tier.
- Enter a Name. Names must be unique across all pricing tiers — reusing an existing name is rejected.
- Leave Pricing Type on Absolute (the default). When you create a tier without choosing a type, SKU treats it as absolute automatically.
- Choose a Currency. Currency is required when you create a tier and must be a valid ISO currency code that exists in your currency list.
- Click Save.
The new tier appears immediately and starts empty — no product has a price in it yet. Add prices from each product's pricing screen; see Set a product's price.
You choose the currency once, when the tier is created. Editing a tier later doesn't let you change its currency — the field is dropped from the update so existing prices keep a stable currency. If you need a different currency, create a new tier.
For the full field list, allowed ranges, and the relative-tier formula fields, see the Pricing tier fields & guards reference.
Set the default tier
Exactly one tier is the default. It acts as the fallback price source and is cached per tenant for speed.
- Open the tier you want to promote (edit it), or use its row action.
- Turn on Set as default pricing tier and save.
When you set a new default, SKU automatically clears the flag on every other tier — you never end up with two defaults. Two rules constrain which tier can hold the flag:
- An archived tier can't be made the default. Unarchive it first.
- A relative tier can't be the default. The default must be an absolute tier, because relative tiers derive their prices from another source rather than holding their own. This is blocked both when setting the default and when trying to convert the current default to relative.
The Set as default toggle only appears when editing an existing absolute tier — you can't mark a brand-new tier as default in the same step; save it first, then set it.
Archive and unarchive a tier
Archiving reversibly hides a tier without deleting its data. Use it to retire a tier you no longer sell against while keeping its historical prices.
- In the tier's row, click the Archive action.
- Confirm. The tier drops out of the default (non-archived) list view.
To bring it back, switch the archived toggle to show archived tiers and click Unarchive on the row.
Two guards block archiving:
- You can't archive the default tier. Its Archive action is disabled with the hint "Default tier cannot be archived." Promote another tier to default first, then archive this one.
- You can't archive a tier that other active tiers derive from. If any active relative tier uses this tier as its base, archiving is refused and the message lists the dependent tiers by name (for example "Cannot archive: this tier is used as a base for: Wholesale, Distributor"). Archive or re-point those dependents first. See Relative pricing tiers.
Delete a tier
Deleting is permanent. A tier is only deletable when nothing depends on it — the list's delete precheck tells you the truth before you commit. Deletion is blocked (with a specific reason) when the tier is any of the following:
- The default tier — its Delete action is disabled with "Default tier cannot be deleted."
- In use by products — any product that carries a price in this tier blocks deletion; the reason names how many products use it.
- Referenced by a channel/listing import mapping — if an integration maps a listing field to this tier's price, deletion is blocked until the mapping is removed.
- A base for active relative tiers — the reason lists the dependent tier names, same as the archive guard.
If none of those apply, confirm the deletion and the tier (and its now-orphaned price rows) is removed. When you only want to hide a tier you might reuse, archive it instead of deleting.
Bulk archive, unarchive & delete
Select multiple rows with the checkboxes to reveal the bulk action bar, then choose Archive, Unarchive, or Delete.
- Apply to all — instead of hand-picking rows, you can apply an action to every tier matching your current filters. SKU resolves your filter set to the concrete list of tier IDs on the server, so the action hits exactly what the filtered list shows (not just the current page).
- Same guards apply per tier. Bulk archive still refuses the default tier and any tier that's a base for active dependents; those tiers are skipped with a warning naming them, while the rest proceed. Bulk delete honors the same in-use checks as a single delete.
- Pre-checks. Before running a bulk action the list calls a precheck that returns, per tier ID, whether it's deletable / archivable and — when it isn't — the reason. This is what powers the disabled actions and the explanatory tooltips, so you see blockers up front rather than as after-the-fact failures.
- The deletable pre-check reports every delete blocker: default tier, in-use by products, referenced by a listing import mapping, or a base for active dependents.
- The archivable pre-check flags the default tier up front. The "used as a base for active tiers" archive guard is enforced when the action runs — those tiers are skipped with a warning naming the dependents, and the rest proceed.
All bulk endpoints validate the submitted IDs against real pricing-tier records, so a stale or invalid ID is rejected rather than silently ignored.
Import & export pricing tiers
Use import/export to create or rename tiers in bulk from a spreadsheet. Both require the pricing_tiers.import permission.
Export
Export produces a spreadsheet with the tier's core fields:
| Column | Notes |
|---|---|
| ID | The tier's SKU ID. Keep this to update existing tiers on re-import. |
| Name | The tier name. |
| ISO Currency Code | The tier's currency (for example, USD). |
Import
- Prepare a spreadsheet. Name and currency_code are the required columns; include the ID column when you want to update existing tiers rather than create new ones.
- Upload the file and run Preview first. The preview validates the rows and reports errors (for example an ID that doesn't exist in SKU) before anything is written.
- Confirm to import.
Matching rules during import:
- If a row has an ID, SKU updates that tier. An ID that doesn't exist is skipped with an error — it won't silently create a new tier under a mismatched ID.
- If a row has no ID, SKU matches by Name: an existing tier with that name is updated, otherwise a new tier is created.
For the shared import/preview workflow and file format, see Import products from a spreadsheet and Export products.
Next steps
- Relative pricing tiers — how derived tiers compute prices from a base tier, supplier cost, or attribute, and how changes propagate.
- Set a product's price — enter a product's actual price in each tier.
- Pricing tier fields & guards reference — every field, allowed range, and guard in one table.
- Product permissions reference — the full permission matrix.
Video transcript
Pricing tiers are the price lists your products carry — a Retail tier, a Wholesale tier, a VIP tier — each in its own currency. Settings, Products, Pricing Tiers lists them, showing each tier's type, currency, and which one is the default. Add one with Create Pricing Tier. A tier's price can be absolute, or relative to another. Choose Relative, pick the base tier it follows, then set the percentage adjustment, optional rounding, and a fixed tweak for charm pricing. Every product then carries a price for each tier.