Skip to main content

Pricing

The Prices tab changes many prices at once: choose the products, describe the price change as a recipe, check every new price in a list, then apply it now, schedule it, or send it for approval. Every price job appears in the history and can be reverted like any other job. Single prices are still edited in the sheet.

The tab needs the permission "Change prices" (see Permissions).

The page​

The page has three panels and a footer:

PanelContents
ProductsWhich products are changed.
Price changeThe recipe: steps from top to bottom, optionally in rules with conditions.
CheckEvery product with its old and new prices, the change, the margin and notes.

The footer has the buttons "Discard", "Schedule…" and "Apply N price changes".

The check is calculated on the server whenever the recipe or the products change (about a second after you stop typing). What you check is exactly what is applied. Large selections are calculated in the background; the check shows the progress. Under every step the panel shows what the step did to an example product of the check ("KW-10001: €192.99 → €201.67"), so you see the effect while you edit.

Products​

SourceWhat it selects
FiltersThe sheet's filters (search, manufacturer, category, tag, sales channel, active, quality, translations), plus price filters: price from/up to (default currency, gross), list price set or not, purchase price set or not. No filter means all products.
From the sheetSelect products in the sheet and click "Change prices…" in the selection bar. "Select all matching" hands over the sheet's filters instead of a list.
Dynamic product groupAll products of a dynamic product group.
Product numbersPaste numbers (one per line, or separated by commas or semicolons) or read them from a file (first column of a CSV). Numbers without a product are listed after the check.

"Include variants" adds the variants of the selected main products. A variant that takes its price from its main product is not a row of its own: it changes together with the main product (the row shows "+3 variants"). A variant with its own price is a row of its own.

Gross or net​

"Gross prices" or "Net prices" chooses the side the recipe calculates with. The other side follows from the tax rate of the product, like the administration does for linked prices. Margins are always calculated on net prices: (net price − purchase price) / net price.

Steps​

A step has a price (the target), an operation and the inputs the operation needs. Steps run from top to bottom; each one sees the result of the one before. Drag a step by its handle to move it, or focus the handle and press Alt with the arrow keys.

Prices (targets)​

TargetNotes
PriceDefault currency.
List priceThe strike-through price.
Purchase priceThe cost price (purchasePrices).
Lowest price (30 days)The regulation price for the EU price indication rules. Gross.
Price in currency / List price in currencyAn explicit price in another currency, instead of the currency factor. Gross.
Advanced pricesQuantity tiers per rule (product_price).

Operations​

OperationExampleNotes
Change by %price +4.5 %Negative for a decrease.
Change by amountprice −2.00
Set toprice = 19.99
Calculate fromlist price = price × 1; price = purchase price × 1.8Base: price, list price, purchase price, or a value from a file.
Target marginprice so that the margin is 35 % on the purchase priceRows without a purchase price are "not possible".
Roundto .99, to a step of 0.05, or per price bandSee Rounding.
Removelist price emptyNot for the price itself.
Never below / never aboveprice ≥ purchase price + 15 %; price ≤ 99.00A limit: the purchase price plus a percentage and/or an amount, or an amount. A capped row gets the note "Capped by a limit".
Limit the changeat most ±20 %Against the price before the recipe.
Lowest price of the last 30 dayslowest price := lowest of the historyFrom the price history.
Create quantity tiersrule "Wholesale": from 1 −0 %, from 10 −5 %Advanced prices from the price (or list price). The first tier starts at 1.
Remove tiersall tiers of a ruleOptionally only one tier ("from quantity").

"Only when this price is empty" (on set, calculate from, target margin, lowest price) leaves products that already have a value alone, for example "list price := price, only when there is no list price yet".

A variant that inherits its price only gets its own price from a step that defines the whole value (set, calculate from, target margin); "+4.5 %" does not copy the main product's price into every variant. Currency prices that follow the currency factor stay that way unless a defining step sets them (note "Currency factor").

Rounding​

ModeExample
To an ending.99 → 12.34 becomes 12.99 (up), 11.99 (down or nearest); 9.00 → 131 becomes 129.00
To a step0.05 → 12.31 becomes 12.35 (up)
Per price bandbelow 10 → .99, below 100 → .90, above → 9.00

Direction: nearest, up or down. A rounded price is never 0. The rounding editor shows a few example values. Set to, change by %/amount, calculate from, target margin and create tiers can round their result right away ("Round the result"); limits can round a capped price (up for a minimum, down for a maximum).

Rules (conditions)​

With "Add rule with conditions" the recipe gets rules: "if these conditions, then these steps". A rule without conditions matches every product ("Otherwise").

ConditionCompares
Categoryis in / is not in (the category or one below it)
Manufacturer, Tag, Propertyis / is not, has / does not have
Current priceis between (in the recipe's basis)
Current marginis between (%)
Product typemain product or variant
Custom fieldequals a value

All conditions of a rule must match. The "Rules" setting decides how rules combine. "First matching rule" (default) prices a product with the first rule that matches; "All matching rules in order" runs every matching rule. A rule below a rule without conditions never runs with "first matching rule"; the panel says so. The check shows which rule priced each row and has a rule filter. Products no rule matched stay unchanged ("Unchanged, no rule").

Values from a file​

"Values from a file" uploads a CSV with a product number (or EAN or manufacturer number) and a value, for example new purchase prices from a supplier. Choose the product column, what it contains, the value column, the decimal separator and whether the values are net or gross. Steps use the value with the base "Value from the file", for example "purchase price := value from the file" followed by "price: target margin 30 %". The check says how many rows of the file matched a product. A product without a value in the file keeps its value (the calculation shows "no base value").

Check​

The summary above the list counts the prices that become higher, lower or stay unchanged, other changes (only the list price or the cost changed), rows that are not possible, conflicts and warnings, with the average and median change. Click a number to filter the list.

The filters below it are "All", every note that occurs, excluded rows, the rule and a product number search. The distribution below the list shows how many products change by how much; click a bar to filter by that range (the outer bars collect the outliers).

The list shows 100 rows per page. Each row has the product number, name and variant options, the old and new price, every other price the recipe changes (list price, purchase price, lowest price, currency prices, number of tiers), the change in % and as an amount, the margin before and after, the rule and the notes. Sort by product, change or rule.

KeyAction
↑ ↓ Home EndMove through the rows
SpaceInclude or exclude the row
EnterSet the new price by hand
IShow how the price was calculated (every step with its result)
EscClose the calculation or the input

Warnings never block. The row stays included and you decide. "Exclude N items with warnings" excludes all of them at once.

WarningWhen
Large changeThe price changes more than the limit (recipe setting, otherwise the configuration, default 50 %).
Price 0The new price is 0.
List price not aboveThe list price is not above the new price (the strike-through has no effect). The list price is not removed automatically.
Below purchase priceThe new price is below the purchase price.
Low marginThe margin is below the limit (recipe setting or configuration).
Large roundingA rounding step moved the price by more than 5 %.
Changed recentlyAnother price job changed the same price in the last N days (recipe setting, default 14).
Set manually last timeThe last price job set this price by hand; the recipe would overwrite it.
InformationMeaning
Capped by a limitA "never below/above" or "limit the change" step changed the result.
Variants followVariants inherit this price and change with it.
Currency factorA currency price follows the factor and stays derived.
Set manuallyThe price was set by hand in this check.
No ruleNo rule matched.

A row is "not possible" (with a filter of its own) for a target margin without purchase price, a list price on a variant without its own price, or a negative result.

To set a price by hand, click the new price (or press Enter) and type another value. Every other changed price of the row (list, purchase, lowest 30 days, currency prices) can be clicked the same way. Values are entered in the recipe's basis; in a net recipe the lowest price and currency prices are stored gross with the product's tax rate. The server plans the row again with the same validation and notes and marks it "Set manually". A later price job on the same product warns "Set manually last time".

The check settings in the Price change panel set the limits of the warnings: the change in %, the margin in % and the number of days for "Changed recently". Empty fields use the configuration.

"Export check (CSV)" downloads the list as it is filtered, in your administration language, for sign-off: price, list price, purchase price and margin before and after, plus a pair of columns for every other price the recipe changes (lowest price of the last 30 days, prices and list prices per currency, number of advanced price tiers).

Apply, schedule, approval​

"Apply" saves the prices. Up to 100 products are saved right away, larger jobs run on the message queue (see Jobs, limits and retention). Prices that changed after the check are reported as conflicts and not overwritten. The job appears in the history as "Supplier increase (1,189 products)" with the type "Prices". Open it there to see the same check, export it or revert it.

"Schedule…" applies the job at a date and time. For a timed sale, "Restore the previous prices automatically" brings the previous prices back at an end time. The end is the revert of the job, planned when the start was applied and applied at the end time. Prices that someone changed during the sale are not touched and are reported as conflicts. "Now" applies at once and only schedules the end. The end needs the permission "Revert changes". Scheduled jobs run with Shopware's scheduled tasks (lae_product_studio.pricing_schedule, every 5 minutes) and the message queue worker.

In the history, a scheduled job shows its date. "Unschedule" puts it back to review, "Discard" cancels it. An applied sale shows when it ends, with a link to the end job and "Do not restore". Once the end ran, it says that the previous prices are back, or how many products kept their sale price because their price was changed during the sale (open the end job to see them). In the history, the columns of an applied job read "Before" and "After".

When "Approval needed from this many price changes" or "Approval needed from an average change of (%)" is set in the configuration (card Pricing), applying or scheduling a larger job sends it for approval instead. The job waits in the history ("Waiting for approval", with who asked and why). A user with the permission "Approve price changes" opens it, sees the same check and approves or rejects it with an optional comment. Approving applies the job (or schedules it, when it was scheduled). Nobody approves their own job, except administrators. A rejected job changes nothing.

Recipes​

A recipe is the price change (and optionally the product selection) saved under a name with "Save", "Save as…" and "Delete". "changed" next to the name means the recipe on the page differs from the saved one. Personal recipes are only visible to you; "Share with all users" makes a recipe visible to everyone with the Prices tab, and everyone with "Save and share price recipes" may change it. A recipe saved with a file keeps the file's column settings; upload the file again when it is gone.

Built-in examples (not stored, save a copy to keep changes):

ExampleSteps
Supplier increaseprice +4.5 %, round up to .99, never below purchase price + 15 %
Start sale −20 %list price := price (only when empty), lowest price of the last 30 days, price −20 %, round down to .99
End saleprice := list price, remove list price and lowest price; use it from the history ("End sale…" on the start job)
Round all prices to .99round to the nearest .99
Reprice to 35 % margintarget margin 35 % on the purchase price, round up to .99

"Plan again" in the history opens the job's recipe on the same products (for filter, product group and job selections). "End sale…" on an applied sale without a planned end opens "End sale" for that job's products.

Price history​

Product Studio records every price change of every product (from any source: Product Studio, the product page, imports, the API), per currency, from the moment it is installed; activation stores the current prices once. History older than "Keep price history (days)" (default 400) is removed. It powers "Lowest price of the last 30 days" and the price history chart on the product page (Product Studio card): the gross price and list price in the default currency over the last 90 or 400 days, with the lowest price of the last 30 days. "Show as a table" lists the same data. A variant without its own price shows the history of its main product.

Permissions​

Additional permissions, group "Product Studio":

PermissionAllows
Change prices (Prices tab)Open the Prices tab, plan, apply and schedule price jobs. Includes product write permissions (product:update, product_price:*).
Save and share price recipesSave, share and delete recipes.
Approve price changesApprove or reject price jobs that wait for an approval.

Reverting a price job and the automatic end of a sale need "Revert changes".