Automatic pricing rules

Overview
Pricing rules adjust sales prices automatically — for example along the competition or towards a target margin. A rule has three parts: what it applies to, how it calculates, and which limits it must not cross.
The limits are the most important part. A rule without a floor eventually calculates its way into a loss without anyone noticing — which is why the floor is part of the rule, not an after-the-fact report.
Core tasks
Create a rule. You define the scope (products, categories, channels), the calculation method and the limits.
Check the effect. Before going live, the rule shows which prices it would change.
Suspend a rule. Rules can be deactivated without deleting them — the scope then stays documented.
Fields in detail
A repricing rule changes selling prices automatically. That is powerful and risky at once — which is why the limits below are not decoration but the actual content of the mask.
| Field | Required | Values / format | What it does |
|---|---|---|---|
Name name | yes | text, max. 160 characters | What the rule is called. |
Channel channelKey | no | text, max. 100 characters | Which sales channel the rule applies to. Different marketplaces demand different prices — that is exactly what the field is for. |
SKU prefix skuPrefix | no | text, max. 60 characters | Which articles the rule acts on. Empty means all. |
Rank sortOrder | no | number | What wins when several rules match. |
Brand brandId | no | one of your brands | For which brand. |
Active active | no | yes/no | Whether the rule has effect. A new rule belongs created off and checked in a trial run. |
The calculation
| Field | Values / format | What it does |
|---|---|---|
Base baseSource | purchase price or selling price | What is calculated from. Calculating from the purchase price is margin-driven, from the selling price market-driven. |
Strategy strategy | calculation chain (default) or market undercut | How the rule finds the price: by calculating (base, markup, fees) or by following the cheapest competing offer. |
Undercut by (%) undercutPercent | 0 to 99 | By what percentage the cheapest competing offer is undercut. Market undercut only. |
Undercut by (amount) undercutAmount | amount, 0 or greater | By what fixed amount it is undercut. Market undercut only. |
Maximum age of the market reading marketMaxAgeHours | 1 to 168 hours | How old the reading of the competing offer may be at most. If it is older the rule does not apply — better no new price than one based on the day before yesterday. |
Markup (%) markupPercent | percentage | The markup on the base. |
Surcharge surchargeAmount | amount | A fixed amount on top, for packaging say. |
Channel fee (%) channelFeePercent | 0 to 99 | What the marketplace keeps. Without this figure you calculate yourself rich: the price taken is not the price received. |
Shipping share shippingAmount | amount | What shipping cost is to be built into the price. |
Rounding rounding | none, to …,99, to …,95, whole amounts | What ending prices are rounded to. |
Purchase price costAmount | amount | The cost the calculation runs against. |
The limits
| Field | Values / format | What it does |
|---|---|---|
Minimum margin (%) minMarginPercent | 0 to 99 | How much margin must remain at least. |
Price floor floorAmount | amount, 0 or more | How low the price may fall. Without a floor a rule sells below cost — minimum margin and floor together are the actual guard. |
Price ceiling ceilingAmount | amount, 0 or more | How high it may rise. |
Result resolvedPrice | amount | The calculated price. Visible in the trial run before it takes effect. |
Assumed competing offer marketPrice | amount, simulation only | Simulation only: the market price to calculate with. Without it a market-undercut rule returns no result in the simulation — and that is the answer: without a reading it does not apply in day-to-day operation either. |
Every run is logged: which price changed and why. That is the way back when a rule does something nobody wanted.
Settings & permissions
- View:
repricer.rule.view - Create and change:
repricer.rule.manage
Module flag: module.repricer. The rules feed into the system's price resolution — they do not replace it, they set a value the usual resolution then uses.
FAQ & troubleshooting
A price does not change. Check the limits first: the rule is probably hitting the floor.
Two rules apply to the same product. Then order decides. Make the scopes non-overlapping — otherwise the price depends on evaluation order.
The channel price differs. A channel can override the price; the rule then acts on the base price, not on the channel price.