Skip to content

Copiara is coming to the Shopify App Store. It is not listed yet.

Copiara
Back to the journal
Pricing8 min read

Contract Pricing Software for Distributors

A negotiated price is a promise to one customer. What contract pricing software has to handle before a distributor can safely show prices online.

By Amir Hessabi

Contract pricing software resolves the correct negotiated price for a specific buying account at the moment they look at an item, using the agreements that account is actually on, and then records which agreement produced that number. It is not a discount percentage on a customer record. It is a resolution order plus an audit trail.

That second half is the part most systems skip. If a system can display a price but cannot say where the price came from and when it expires, it is not doing the job. The real test is not the screen. It is the phone call four months later when a buyer disputes an invoice line and somebody has to explain the number.

Where do a distributor's negotiated prices actually live today?#

In more places than anyone wants to admit.

  • Customer price records in the ERP, some of them entered years ago
  • Manufacturer-funded special pricing agreements, tracked separately because the money comes from a different place
  • A signed PDF in a shared drive, which is the only copy of what was actually agreed
  • A rep's spreadsheet, which is the working copy the rep actually trusts
  • The part that exists only in one person's head, usually the person who negotiated it

These sources disagree because each was created by a different event on a different date, and none of them expire on their own. A percentage typed into a customer record in 2022 is still paying out today unless somebody remembered to go turn it off.

That negotiated layer is not a rounding error, either. Deloitte, writing on special pricing agreements for distributors in June 2026, notes that SPA dollars for a distributor are often larger than net income dollars. The prices you negotiate and the rebates you claim against them are not a discount program sitting off to the side of the business. For a lot of distributors they are the business.

Here is the uncomfortable part. The only reason the wrong price does not go out today is that a human sits between the buyer and the number. A rep looks it up, sanity checks it against what they remember, and types it into a quote. That human is exactly the human the buyer is trying to route around when they ask for online ordering.

And they are asking. Sana Commerce's 2026 B2B trends roundup reports that 75 percent of B2B buyers say they would switch to a supplier offering a better online buying experience, while only 17 percent of manufacturers currently use their data to personalize the buyer journey. Those are vendor-published figures and worth reading as directional rather than as neutral industry data, but the direction has not been in serious dispute for several years. Buying expectations moved to self-serve faster than the negotiated pricing layer moved out of spreadsheets, and the gap between the two is the whole problem.

How should a price resolve for one specific buyer?#

Pick an order and make it explicit. A workable one, and the one most distribution businesses are already following informally:

  1. Account-specific contract price. This account, this item or product family, under a signed agreement.
  2. Price list or tier assignment. The list this account sits on, which may be inherited from a parent company on a multi-location account.
  3. Volume break for the quantity on the line. The quantity actually being ordered, right now, on this line.
  4. List price. The fallback when nothing else applies.

First match wins, and the winner gets recorded on the line.

Work an example through it. Take a 6205-2RS bearing. The numbers below are illustrative, not a real price sheet.

At list, the buyer sees the catalog price, because nothing else applies to them. Put that same account on a 12 month agreement covering that manufacturer's bearing line and the price drops to the agreement price, and the line should now carry the agreement's identifier, not just a lower number. Now the buyer orders 40 of them and crosses a 25 unit break. Whether the break applies depends on a decision you have to make deliberately: does the volume tier stack on top of the contract price, or does the contract price already represent the negotiated floor?

There is no universally right answer, but there is a rule that keeps it sane. Quantity breaks apply to the line. Account agreements apply to the relationship. Mixing them into one blended percentage destroys your ability to explain either one, and explaining them is the whole job.

Why is a discount percentage on the customer record the wrong shape?#

Because a percentage carries none of the information the agreement actually contained.

It has no scope. Real agreements cover a product family, a single manufacturer, or a named list of parts. A percentage on the account applies to your entire catalog, including the items where you have no margin to give.

It has no end date. Agreements expire, get renegotiated, and get renewed at different terms. A percentage field has no opinion about the calendar and keeps paying out silently until a human notices.

It has no source. When part of the price is funded by the manufacturer rather than by you, you need to know which lines are claimable. A blended percentage erases the distinction between margin you chose to give up and margin somebody else is reimbursing you for.

It cannot express the shapes people actually negotiate. A fixed net price, a discount off list, a cost-plus arrangement, and a tiered break are four different things with four different behaviors when your cost or list price moves. Flattening all of them into one number means every one of them breaks differently and quietly.

What has to happen to the price the moment an order is placed?#

It freezes.

A historical document must never re-resolve against today's agreements. If it does, last quarter's order silently rewrites itself the next time somebody updates a price list, and your order history stops being a record of what happened.

The same doctrine applies to a quote that becomes an order. The order carries the price the quote agreed to. If a rep gave a one-time concession to win the deal, that concession should be carried as its own recorded component rather than baked into the unit price where nobody can find it again six months later. A negotiated number you cannot decompose is a number you cannot defend, renew, or learn from.

There is a concrete test for any system, and it takes about ten minutes to run against whatever you have now. Pull an order from four months ago. Reproduce every number on it without knowing what has changed since. If you cannot, your pricing is not stored. It is being recalculated, which means it is being guessed.

What has to be true before you show a price on a screen?#

Here is the short version, in checklist form. Every line has to hold before a number is safe to display to a buyer without a rep in front of it:

  • The price is resolved for that account and no other
  • It is scoped to the right products, not applied catalog-wide by accident
  • It has a start date and an end date
  • It names the agreement it came from
  • It survives onto the invoice unchanged
  • A buyer from a different account can never see it, under any URL, in any search result, in any export

That last one is a security boundary, not a pricing feature. Customer-specific pricing leaking across accounts is one of the few mistakes in distribution that damages two relationships at once.

The pricing layer comes first#

The reason a distributor cannot simply switch on self-serve ordering is not the front end. It is that the number a buyer is owed is the output of a negotiation living in four places at once, some of it funded by the manufacturer rather than by you.

A catalog with a discount field can display a price. It cannot defend one four months later, and defending it is the part distribution actually needs. That is the difference between a generic ecommerce suite retrofitted for wholesale and software that was built with the contract in mind from the start.

Self-serve ordering is not a storefront bolted onto a catalog. It is the moment the pricing layer stops having a human standing in front of it. Get the resolution order explicit, get the audit trail stored, and the price on the screen becomes a reporting problem instead of a risk.

If you sell on Shopify, some of this is already yours. Shopify B2B gives every paid plan companies, payment terms, and volume pricing, and it holds price lists in catalogs assigned to company locations. That covers a standing agreed price. What it does not cover is the negotiation that produces one, or the defense of it afterward: there is no quote flow on any Shopify plan, and a price that came out of a back and forth has nowhere to live except an email thread. It is also worth knowing that where two catalogs overlap on one company location, Shopify resolves to the lowest price, so overlapping assignment is a real hazard rather than a theoretical one.

Copiara is being built as a Shopify app around that gap. Quoting carries the negotiation, holds every version, enforces a margin floor, and pushes the accepted result back as a Shopify draft order with the agreed prices locked, so the order carries what it resolved to and the number is defensible four months later. Copiara is not on the Shopify App Store yet. If this is the shape of your pricing problem, come talk to us.

Before the listing goes live

See Copiara on your own Shopify store.

If cross-referencing, negotiated quotes, or buyer approvals sound like your buyers' problem, get on the early access list.