# Price Management

> Define pricing logic once in a commercial model, generate price lists from it, review every change before it takes effect, and publish approved prices to the people and systems that use them.

Source: https://revomo.ai/product/price-management/

---

## Govern every price, from model to published list.

Define your pricing logic once, generate price lists from it, review every change before it takes effect, and publish approved prices to the people and systems that use them.
See it in action[Book a pricing demo](https://revomo.ai/contact/?plan=Price%20Management)

- **01**Set the pricing logic
- **02**Price from cost and policy
- **03**Review every change
- **04**Publish the approved list
- **05**What’s included

Price & Quote Management*/* Fittings List Pricing*/* **Contractor Q1 2027**

Current

Records **4,820** in this price list

Records changed **214** in this price list

Avg. target margin **29.4%** average across line items

Avg. list price change **+0.2%** average across line items

All records *4,820* Needs my approval *214* Pricing Review · yours *214* Approved *4,606*

** | Item Number | Description | Product Group | Unit Cost | Target Margin | List Price | Program Discount | Net Price |
** | PVC-C200 | 2" PVC coupling | PVC fittings | $4.32 | 30.0% | **$6.43** +5.2% | 5.0% | $6.11 |
** | PVC-T075 | 3/4" PVC tee | PVC fittings | $1.05 | 30.0% | **$1.76** | 5.0% | $1.67 |
** | PVC-E200 | 2" PVC elbow 90° | PVC fittings | $2.40 | 30.0% | **$3.69** +5.1% | 5.0% | $3.51 |
** | PVC-CO400 | 4" PVC cleanout | PVC fittings | $9.10 | 30.0% | **$13.26** | 5.0% | $12.95 |
** | BV-100 | 1" brass ball valve | Brass valves | $6.04 | 28.0% | **$9.25** +2.8% | 3.0% | $9.32 |
** | BU-075 | 3/4" brass union | Brass valves | $3.31 | 28.0% | **$5.46** +3.2% | 3.0% | $5.30 |
** | BG-200 | 2" brass gate valve | Brass valves | $16.44 | 28.0% | **$23.69** +3.4% | 3.0% | $23.33 |
** | PVC-C100 | 1" PVC coupling | PVC fittings | $1.62 | 30.0% | **$2.57** | 5.0% | $2.44 |

Rows 1 to 8 of 4,820 5 shown changed since the previous revision

A price list built from a commercial model, partway through review after a cost increase. The data is illustrative.

Change
Copper rose from $4.20 to $4.62 a pound and a PVC vendor raised costs, so list prices moved on 214 of the list's 4,820 lines.

Review
They moved by about 3% to 5%, more than the 2% an automation may approve, so they wait in Pricing Review. The other 4,606 stay approved.

Next step
Approve or reject the 214 lines, then publish the new revision to the channels that use it.

01 · Set the pricing logic

### Build the pricing logic once.

The Fittings List Pricing model turns cost into price for every item: cost, a target margin from your policy, discounts and fees. Contractor Q1 2027 is one of three price lists generated from it.

Columns and formulas

#### Your pricing framework, written as columns.

Vendor and index costs, a target margin from your policy, list price, program discount and net price. Change a formula on the model and every price list built from it recomputes on its next refresh.

**Columns** Fittings List Pricing

Name | Type | Formula |
**Vendor Cost** | Money | From data |
**Index Cost** | Money | ` round ( 'Copper Weight' * lookup (source= "datasets" , name= "Commodity Indexes" , result= "Index Price" , match_by=[ 'Copper Index' : 'Index Code' ], sort_by= "-Effective Date" , agg= "first" ) + 'Zinc Weight' * lookup (source= "datasets" , name= "Commodity Indexes" , result= "Index Price" , match_by=[ 'Zinc Index' : 'Index Code' ], sort_by= "-Effective Date" , agg= "first" ) + 'Conversion Cost' , 2 )` |
**Unit Cost** | Money | ` if ( 'Product Group' == "Brass valves" , 'Index Cost' , 'Vendor Cost' )` |
**Target Margin** | Percentage | ` lookup (source= "rulesets" , name= "Margin Corridors" , result= "Target Margin" , match_by=[ 'Customer Segment' : 'Customer Segment' , 'Product Group' : 'Product Group' ])` |
**List Price** | Money | ` round (( 'Unit Cost' + 'Cost to Serve' ) / ( 1 - 'Target Margin' ), 2 )` |
**Program Discount** | Percentage | ` coalesce ( lookup (source= "datasets" , name= "Customer Programs" , result= "Discount" , match_by=[ 'Product Group' : 'Product Group' ]), 0 )` |
**Net Price** | Money | ` round ( 'List Price' * ( 1 - 'Program Discount' ) + 'Handling Fee' , 2 )` |

Generate price lists

#### One model, a list for every segment.

Split a model's data by a column, such as customer segment, and a background job creates one price list for each value.

**Generate price lists**

Setup Header Review

Pricing model Fittings List Pricing Split-by column Customer Segment

- Contractor Q1 2027 Customer Segment = Contractor
- Wholesale Q1 2027 Customer Segment = Wholesale
- Retail Q1 2027 Customer Segment = Retail

A background job creates the price lists. Track its progress in Jobs.

How it works: models, price lists and refresh
Models and lists
Columns and formulas are added on the commercial model. A price list holds rows and inherits the model's columns, so a change to a formula reaches every list built from it.

No fixed model types
Revomo does not ship model types. List, cost-plus, index-linked, contract and rebate pricing are models you configure with columns, formulas and lookups, grouped by a category you choose.

Rows, then refresh
Loading rows into a price list copies the data; a refresh computes the formulas. From a model, you can refresh every price list built from it at once.

Headers and breaks
Each list carries an effective date, an expiration date and fields you add, which can be set by formula. A quantity break column supports volume and tiered pricing.

02 · Price from cost and policy

### Let costs and policy set the price.

Brass costs follow the copper and zinc indexes through a formula, and the target margin comes from a decision table. When copper went from $4.20 to $4.62 a pound, the 1" brass ball valve's cost rose to $6.04 and its list price to $9.25.

Commercial Execution*/* Commercial Models*/* **Fittings List Pricing**

1" brass ball valve 0.42 0.18 $3.85 $6.04

3/4" brass tee 0.21 0.09 $1.60 $2.69

1/2" brass elbow 0.12 0.05 $1.10 $1.72

2" brass gate valve 1.35 0.58 $9.40 $16.44

3/4" brass union 0.28 0.12 $1.85 $3.31

**Edit column: Index Cost***Money*

Basic settings

Name **Index Cost** Data type **Money** Currency **USD ($)** Refresh policy **Recompute**

Formula

Describe the formula you want

** ** Formula check passed. Result type is checked when saving.

*1* round ( *2* 'Copper Weight' * lookup (source= "datasets" , *3* name= "Commodity Indexes" , *4* result= "Index Price" , *5* match_by=[ 'Copper Index' : 'Index Code' ], *6* sort_by= "-Effective Date" , agg= "first" ) *7* + 'Zinc Weight' * lookup (source= "datasets" , *8* name= "Commodity Indexes" , *9* result= "Index Price" , *10* match_by=[ 'Zinc Index' : 'Index Code' ], *11* sort_by= "-Effective Date" , agg= "first" ) *12* + 'Conversion Cost' , 2 ) Functions lookup round coalesce if case least sum previous Columns Copper Weight Zinc Weight Copper Index Conversion Cost No syntax issues Brass costs follow the copper and zinc indexes: each fitting's bill of materials priced at the latest index. The data is illustrative.

- **A function library** Conditions, math, text, dates, aggregates, lookups and the previous revision's value, each documented in the editor.
- **Lookups across Revomo** Match on your columns, take the latest index by date, or read a result from a ruleset.
- **Checked, or drafted for you** Verify a formula as you write it, describe one in plain language to draft it, or ask Copilot to explain it.

Decision tables

#### Policy as a decision table.

Target margins by customer segment and product group, one rule per row. "Any" matches every value, and a catch-all rule covers the rest. The List Price formula looks the target up.

**Margin Corridors** Rule Engine

Conditions | Results | |
Customer Segment | Product Group | Floor Margin | Target Margin | Priority |
== Contractor | == PVC fittings | 24.0% | 30.0% | 1 |
== Contractor | == Brass valves | 22.0% | 28.0% | 2 |
== Wholesale | == PVC fittings | 18.0% | 24.0% | 3 |
== Wholesale | == Brass valves | 16.0% | 22.0% | 4 |
== Retail | Any | 30.0% | 38.0% | 5 |
Any | Any | 20.0% | 27.0% | 6 |

Simulate

#### Check which rule a line will use.

A contractor buying brass valves matches rule 2: a 28% target margin, which is what the ball valve's list price uses.

**Simulate Ruleset**

Input Context
Customer Segment Contractor Product Group Brass valves
Simulation Results
Matched Rule Priority #2

Floor Margin **22.0%**

Target Margin **28.0%**

How it works: formulas and rules
Two checks
Verify checks syntax, functions and lookup sources as you write. Column names are resolved when you save, so a misspelt column is caught there.

Lookups bind by name
A lookup names its source, so renaming a dataset or column can leave a formula empty. Lineage shows what depends on a source before you change it.

Overlapping rules
The priority number sets the order rules are tried. There is no separate precedence chain or between operator: bands are rules in priority order, and contract over list is written as priorities or separate lookups.

Testing and versions
Simulate tests one input at a time. Backtesting against past quotes and running a draft beside the live version are not available today, and rulesets do not keep versions of their own.

03 · Review every change

### Review every change before it takes effect.

Recalculating Contractor Q1 2027 moved 214 of its 4,820 lines by about 3% to 5%. Moves of 2% or less would have been approved automatically; these wait in Pricing Review, and the other 4,606 lines stay approved.

Price & Quote Management*/* Fittings List Pricing*/* **Contractor Q1 2027**

Current

**Approval Workflow***Currently Pricing Review** Margin check*

Approval Lifecycle · 3 steps · Line Item · 214 of 4,820 records outstanding · Revision 2

- ##### Draft Open to anyone who can edit this entity *Cleared* Entered Oct 2, 2026 by Maya Chen
- 2 ##### Pricing Review Held by Pricing Managers 214 records here now *Ready* FIRES *Approve* on price list recalculated *0–2% Net Price* NOTIFIED Dana Ruiz · Lines that moved more than 2% need a decision
- 3 ##### Approved Open to anyone who can edit this entity 4,606 records here now *Queued*

**Approve every record waiting on you**

Only records waiting on you move. Anything else in the selection is left as it is and reported back. Reason (optional) Q1 cost increase from the vendor, checked against the margin corridors.
Cancel Approve

Approve (214 waiting on you) Reject

Each price list moves through the approval states its commercial model defines, record by record or as a whole.

- **Your states and actions** Name the states, mark which can be edited or recalculated, and set the roles or people allowed to take each action.
- **Line by line, or all at once** Reviewers see the records waiting on them and act on a selection or on all of them, with an optional reason.
- **Automate the routine** An automation approves small moves when a list recalculates and alerts an owner about the rest.

Refresh policy

#### Agreed exceptions survive the recalculation.

Each formula column says how it treats a hand-edited cell. With Preserve Edits, a price someone agreed by hand keeps its value when copper moves, until it is reverted.

**Refresh policy** Net Price

- **Recompute** Refresh re-runs the formula and overwrites every cell.
- **Preserve Edits** Refresh re-runs the formula except in cells someone edited, which keep their value until reverted.
- **Freeze** Refresh never recomputes this column; stored values stay as they are.

History and audit

#### Know what changed, and go back.

- **Versions** Take a snapshot before a change, open an earlier version, and restore it.
- **Revisions** Reopen an approved list as a new revision, keeping the previous one and, if you choose, the records already approved.
- **Audit log** Every action on a price list, with who, when, where and the values that changed.

How it works: policies, reviews and changes by hand
Setting up a policy
The lifecycle policy is configured in a form, with states, actions and transitions, and a flow preview of the result. Approvals can be switched off for a model.

Who can act
Each transition names the roles or people allowed to take it, or is reserved for automations. Every action follows those transitions; there is no separate override path.

Sending back
Actions are the verbs you define, such as approve, reject or return to draft. Approval steps do not carry deadlines today.

Changes by hand
To change many prices yourself, a bulk update filters records, sets each field by value or formula (a 4% increase is a formula), simulates the effect, then submits it for approval.

04 · Publish the approved list

### Send approved prices where they are used.

Once the 214 lines are approved, publish Contractor Q1 2027 to contractors as a branded document or a live link, and export it to the CRM your sales team works in.

Publishing

#### A branded price list in the format each channel needs.

A publishing template sets the title, header fields, columns, branding and page layout once. Generate the approved Contractor list as a document, or share a link with an expiry and an optional password.

**Generate Document** Contractor Q1 2027

Select Format
- **PDF**Print ready (.pdf)
- **Excel**Spreadsheet (.xlsx)
- **HTML**Web page (.html)
- **Weblinks**Live link (.parquet)

Create Share Link On · password protected Expires in (days) 30

Export

#### Push it to the CRM.

Choose a destination, configure the target table, and the export runs as a background job.

**Export** Contractor Q1 2027

Choose destination Configure target Start export

- Salesforce Connected destination
- Databricks Connected destination

Salesforce Connection Northline CRM New Table Name Contractor_Q1_2027

How it works: documents and exports
Formats
Documents are PDF, Excel or HTML, or a live link. A template can replace the previous version when you publish again.

Exports
Exports reach Databricks and Salesforce today and run as background jobs. For other systems, the method is agreed in the Activation and Success Plan.

05 · What’s included

### What’s included.

What Price Management gives you, what every subscription adds, and what to add later.

#### In Price Management

- **Commercial models and price lists** Pricing logic as columns and formulas, with a price list for each segment.
- **Rule Engine** Pricing policy as decision tables, tested with simulation.
- **Approvals and publishing** Line-by-line review, then documents, links and exports.

#### In every subscription

- **[Data & Context Studio](https://revomo.ai/product/data-context-studio/)** Your data, connectors and shared definitions.
- **[AI Agents & Automation](https://revomo.ai/ai-agents-automations/)** Automations, alerts and notifications.
- **[Copilot and governance](https://revomo.ai/platform/)** Copilot, permissions and audit across Revomo.

#### Add when you need it

- **[Decision Optimization](https://revomo.ai/product/decision-optimization/)** Recommend prices within your constraints, then govern them here.
- **[Quoting & Deal Pricing](https://revomo.ai/product/quote-management/)** Quote from the same price lists and margin targets.
- **[Contract Pricing & Renewals](https://revomo.ai/product/contract-management/)** Keep customer terms beside the lists they adjust.
- **[Rebates & Incentives](https://revomo.ai/product/incentives-management/)** Accrue rebates against the same prices.

Solutions it supports: [Set & Manage Prices](https://revomo.ai/solutions/price-lists-customer-specific-pricing/), [Price Increase Management](https://revomo.ai/solutions/price-increases-that-stick/), [Cost Recovery & Repricing](https://revomo.ai/solutions/cost-pass-through-repricing/).

FAQ

### Common questions

How are price lists and rules structured?

Around a commercial model. The model holds the columns and formulas, and each price list built from it holds the rows, such as one list per customer segment, and inherits those columns. Rulesets hold decision tables that formulas look up, such as target margins by segment and product group. Volume and tiered pricing use a quantity break column.
How does a price change get approved?

Through the lifecycle policy on its commercial model. The policy names the states a price list moves through, the actions that move it, and the roles or people allowed to take each action. Reviews run on the whole list or record by record; a reviewer acts on selected records or every record waiting on them, with an optional reason. Automations can take an action or send an alert when a condition matches.
How do approved prices reach our ERP or CRM?

Export a price list to a connected Databricks or Salesforce destination, generate a PDF, Excel or HTML document, or share a live link. For other systems, the method is agreed in the Activation and Success Plan.
What happens when someone edits a calculated price by hand?

Each formula column has a refresh policy. Recompute overwrites every cell on refresh, Preserve Edits keeps cells someone edited until they are reverted, and Freeze never recomputes. A column can show its change against the previous revision, and the audit log records who changed what.
What audit trail and change history is kept?

Each price list keeps an audit log of actions, with when, who, what and where, and the changes made. It also keeps versions: take a snapshot before a change, open an earlier version, and restore it if you need to. Each approval step shows when the list entered it and who moved it there.
How do I author pricing policy without writing code?

With rulesets: decision tables of conditions and results, one rule per row, entered by hand or imported. When rules overlap, a priority number sets the order, and rules can carry start and end dates. A formula reads the result with a lookup.
Can I test a change before it goes live?

Simulate a ruleset against an input to see which rule matches and what it returns. A bulk update simulates its effect on the affected records and price lists before you execute it, and can submit the change for approval. Backtesting a ruleset against past quotes is not available today.
Can I update many prices at once?

Yes, with a bulk update. Filter the records, choose how each field changes (replace with a value, apply a formula, clear it or keep it), simulate the result, then execute it with or without approval. A percentage increase is written as a formula.

### See a price move from model to published list.

Walk through commercial models, rules, approvals and publishing with a Revomo expert, on illustrative data or your own.
[Book a pricing demo](https://revomo.ai/contact/?plan=Price%20Management)[Explore the platform](https://revomo.ai/platform/)
