Counterline Back to Counterline

Do Shopify draft orders use B2B catalog prices? I tested it.

The answer you will find repeated in forums and app listings is no: draft orders price at retail, because they do not know about B2B catalogs. I repeated it myself, in public, for weeks. Then I measured it, and it is wrong.

What I measured

Two runs against a real Shopify store with B2B enabled, a company, a company location, and a catalog with a price list attached to that location.

Through the API, on 17 September 2026. A draftOrderCreate whose line item carried nothing but a variantId and a quantity, and whose input carried a complete purchasing entity:

"purchasingEntity": {
  "purchasingCompany": {
    "companyId":         "gid://shopify/Company/…",
    "companyLocationId": "gid://shopify/CompanyLocation/…",
    "companyContactId":  "gid://shopify/CompanyContact/…"
  }
}

The line came back at $8.00. Retail on that variant is $10.00. Shopify resolved the catalog price on its own, with no price set by me.

The same mutation with no purchasingEntity at all priced the line at $10.00. That is the retail fallback everybody describes, and it is real. It is just conditional.

In the admin, on 23 September 2026. A draft order with the company location attached, against a price list with a 10% decrease and some fixed overrides:

Price typeRetailOn the draft order
Fixed price in the price list$10.00$8.00
Percentage adjustment (10% off)$75.00$67.50
Quantity break at 100 units$10.00$7.00

So it is not one narrow case. Fixed prices, relative adjustments and volume breaks all resolve.

Where the wrong answer came from

There is a forum thread from September 2023 where a developer reports exactly this problem: product is $10 on the page, $8 in the catalog, and the draft order comes back at $10. A Shopify staff member asked for reproduction steps. The thread went quiet. It has been cited ever since.

That report may well have been accurate in 2023. B2B was Plus-only then, catalogs attached directly to company locations, and market-level assignment for non-Plus stores did not arrive until April 2026. What nobody did, for three years, was re-test it.

I built product copy on that thread. It was in my App Store listing, on this website, in the app's own onboarding, and in a reply I posted to that same thread. All of it is now corrected. The lesson is cheaper to read than it was to learn: an unresolved forum thread is a question, not a finding.

So when do you need priceOverride?

For a price you negotiated away from the catalog. Not to get catalog pricing.

If you agree $7.25 on a line whose catalog price is $8.00, you must set priceOverride on that line. Shopify will otherwise resolve $8.00 from the catalog, which is correct behaviour for an ordinary B2B order and wrong for a negotiated one. This is the distinction that actually matters, and the blanket "draft orders price at retail" framing hides it.

Note that priceOverride is for line items built from a variant. originalUnitPriceWithCurrency is for custom line items, and using it in place of the other is a common way to end up with a total that looks plausible and is wrong.

If you are seeing retail with a complete purchasing entity

The mutation shape is probably not your problem. Things worth checking, in the order I would check them:

One related gotcha, if you query prices yourself

ProductVariant.contextualPricing takes a context, and that context needs country alongside companyLocationId. Omit the country and it returns prices that quietly disagree with what the buyer sees on the storefront. Nothing errors. The numbers are simply different, which is the worst failure mode money code has.

Also worth knowing: contextualPricing carries no provenance. It returns five fields, and none of them says whether a price came from a fixed entry or a percentage adjustment. If you need that distinction, it is PriceListPrice.originType, and it costs a second query.

What this does and does not settle

It settles that Shopify's B2B pricing is more capable than the folklore says. If you are building an integration that creates B2B orders, attach a complete purchasing entity and let Shopify do the pricing.

What it does not settle is quoting. A quote has to show a company their catalog price weeks before any order exists, has to survive a negotiation, and has to record what was offered. Shopify ships the companies, the catalogs, the price lists and the payment terms, and nothing to quote with. That gap is real, and unlike the other one, I have tested it.

I am Jack Petersen, and I build Counterline, a B2B quoting app for Shopify (App Store listing). It is a paid app, with a free plan on development stores. Everything above is measurable on your own store without it.