The pricing team rolls out three segment-specific price lists for Enterprise, Mid-Market, and SMB. Two weeks later, an audit finds an Enterprise quote on the SMB price list because the rep manually picked the wrong one. The system did not catch it, the report did not flag it, and the discount cascaded into the renewal. Segment pricing is straightforward to set up and expensive to enforce. The enforcement is where most teams fall short.
How Price Lists Actually Resolve
When a user creates a quote or opportunity, the platform tries three sources for the price list, in order: the explicit lookup on the record, the default price list on the account, and the user’s default price list. The first non-null wins. There is no automatic resolution by segment, territory, or industry unless you build it.
This is the part that surprises new admins. Creating three price lists does not make Dynamics smart about which to pick. It just gives the user three to choose from.
Bind a Price List to the Account
The cleanest enforcement is to set the default price list on the Account based on segment. Use a workflow or Power Automate flow on Account create and update that picks the right price list from the segment optionset.
async function setPriceListBySegment(accountId, segment) {
const map = {
100000000: "PL-ENT-2026",
100000001: "PL-MID-2026",
100000002: "PL-SMB-2026"
};
const priceListName = map[segment];
if (!priceListName) return;
const lookup = await fetch(`/api/data/v9.2/pricelevels?$filter=name eq '${priceListName}'&$select=pricelevelid`).then(r => r.json());
const id = lookup.value[0]?.pricelevelid;
if (!id) return;
await fetch(`/api/data/v9.2/accounts(${accountId})`, {
method: "PATCH",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ "[email protected]": `/pricelevels(${id})` })
});
}
When a quote is created from the account, the price list pre-fills correctly and the rep cannot accidentally land on the wrong one.
Currency Per Price List
A price list is currency-specific. If you sell in USD, EUR, and GBP, you need three price lists per segment, for a total of nine. Putting product prices in one price list and converting at quote time defeats the audit trail and introduces FX drift between quote and invoice. Build the matrix once.
PL-ENT-2026-USD
PL-ENT-2026-EUR
PL-ENT-2026-GBP
PL-MID-2026-USD
...
The naming convention pays off when the pricing team needs to refresh annually.
Discounts and Discount Lists Together
Segment pricing and discount lists are independent features. The price list sets the base price. The discount list applies a volume or percentage discount on top. If your Enterprise price list already reflects an enterprise discount, do not also attach an Enterprise discount list, or the customer gets the discount twice.
Pick one mechanism per segment and document the choice. The cleanest is segment-specific price lists with no discount list, plus a manual override discount field that requires manager approval above a threshold.
Locking the Manual Override
Reps will type discounts directly into the line item. Lock the manualdiscountamount and discountpercentage fields with a business rule that requires a non-empty justification field, and route quotes above a discount threshold through an approval flow. Without this, the segment price list is theater.
Reporting Compliance
Build a daily report that compares the price list on each open quote to the default price list on its account. Anything that does not match is a flag for review.
<fetch>
<entity name="quote">
<attribute name="name" />
<attribute name="pricelevelid" />
<link-entity name="account" from="accountid" to="customerid">
<attribute name="defaultpricelevelid" />
<filter>
<condition attribute="defaultpricelevelid" operator="not-null" />
</filter>
</link-entity>
</entity>
</fetch>
Pipe this to Power BI and color-code mismatches. The pricing team will use it weekly.
Annual Refresh Workflow
Once a year, the pricing team updates all price lists. Build a deployable solution that contains all price lists and product prices, version it as Pricing.2026.04, and import to a sandbox first for sign-off. Push to production through the normal ALM pipeline. Never edit price lists directly in production.
What to do this week
Stand up the account-default price list workflow, build the compliance report, and lock the manual discount field behind an approval. Confirm every new quote this week pre-fills the correct price list without rep intervention.