All posts
Functional4 min read

Negotiated Customer Price Agreements and Special Pricing in Odoo

Create customer-specific price agreements in Odoo - locking negotiated prices per product for key accounts, setting validity periods, and ensuring reps always apply the contracted rate.

Customer Price Agreements in Odoo#

Key accounts often negotiate special pricing that differs from your standard pricelist. Rather than relying on reps to remember - or apply manually - Odoo customer price agreements lock negotiated rates per product, automatically applied to every order.

Creating Customer-Specific Pricing#

Method 1 - Customer Pricelist:

Sales → Configuration → Pricelists → New:

  • Name: Acme Corporation - Negotiated Rates
  • Currency: USD
  • Lines:

- Widget Pro: $89.00 (vs. standard $100)

- Widget Standard: $52.00 (vs. standard $60)

- Implementation Services: $130/hr (vs. standard $150/hr)

Customer Record → Sales & Purchase tab → Pricelist: Acme Corporation - Negotiated Rates

Every SO for Acme automatically uses these prices.

Method 2 - Vendor Pricelists on Customer Record:

Product → Sales tab → Customer Prices → Add a Line:

  • Customer: Acme Corporation
  • Min Quantity: 1
  • Price: $89.00
  • Start Date: 2027-10-01
  • End Date: 2028-09-30

This is per-product negotiated pricing - useful when only a few products have special rates.

Price Agreement Validity#

Set validity dates on customer-specific prices:

  • Start: 2027-10-01 (contract begins)
  • End: 2028-09-30 (contract expires)

After expiry: Odoo falls back to the standard pricelist - rep is shown the standard price (which may be higher), prompting a renewal conversation.

Rep Override Controls#

Limit reps' ability to further discount already-negotiated prices:

Sales → Configuration → Settings → Pricelists → Discount Policy: Hide Discount

  • Customer sees the negotiated price as the "list price" (no visible discount)
  • Rep cannot add further discounts without a manager override

Contract Renewal Alerts#

Sales → [Customer] → Schedule Activity 60 days before agreement expiry:

  • Activity: "Price agreement renewal - Acme Corporation expires 2028-09-30"
  • Assigned to: Account Manager

Early renewal conversations are more successful than last-minute negotiations.

Reporting on Special Pricing#

Sales → Reporting → Sales Analysis → filter by customer with special pricelist:

  • Revenue at negotiated rates vs. standard rates
  • Discount impact: what is the revenue gap vs. standard pricing?
  • Volume growth: did the special pricing drive the expected volume increase?

If a customer's volume didn't grow as expected: negotiate harder at renewal or revert to standard pricing.

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free