---
title: "Why a quote converts at the wrong price on Shopify: diagnose it by the size of the difference"
description: "A quote became a Shopify draft order at a different price? Measure the gap: catalog price, exchange rate, tax, an extra discount or a cent - and the fix."
url: "https://www.quotway.com/blog/quote-converts-at-wrong-price"
type: "blog post"
category: "For Shopify agencies"
published: "2026-10-09"
verified: "2026-10-09"
shopify_api_version: "2026-10"
audience: "Shopify agencies and developers handling a converted quote whose draft order, invoice or order shows a different price"
scope: "Draft orders, invoice checkout and orders created from an accepted quote at API 2026-10: price overrides and catalog prices, the price lock on send, exchange rates and presentment money, tax inclusion and exemption, automatic discounts and codes, discount allocation and cents, split drafts, shipping, deposits, and after-order changes"
locale: "en"
source: "QuotWay - B2B Quote & Negotiation App for Shopify"
---

# Why a quote converts at the wrong price on Shopify: diagnose it by the size of the difference

When a quote converts to a Shopify draft order at the wrong price, measure the difference before you look for the cause: where it shows, at which stage, and how big it is. A line at exactly the catalog price, every amount off by the exchange rate, a total higher by exactly the tax line, a total lower by exactly one discount nobody quoted, a cent per line - each of those shapes has its own documented cause in Shopify, and the size points to it before you open a single setting.

This page is that diagnosis: a table that starts from the observed difference, the Shopify fields that confirm each cause, the fix, and the results Shopify documents as *expected* - a price lock on send, a re-price after editing a foreign-currency draft, a tax-exempt buyer charged the full tax-included price - kept apart from real faults. [What breaks between quote time and conversion time](/blog/quote-to-draft-order-failure-modes) is the design side of the same problem: what to build so the difference never happens.

Everything about Shopify below was checked against Shopify's own pages on 9 October 2026 at API version 2026-10; sources are at the end.

## First, measure the difference
Three numbers, in this order:

1. **Where it shows.** A line price, an order discount, the subtotal, tax, shipping, the amount due now, a missing or extra line - or only a report in the shop's currency.
2. **The stage it first appears at.** The calculated draft (`draftOrderCalculate` on the input you stored), the saved draft, the invoice checkout, or the order. If the calculated draft is already wrong, the input is wrong; if only the checkout or the order differs, something changed after creation.
3. **Its shape.** Subtract and divide before you guess: Y − X equal to one discount or the tax line, Y ÷ X equal to the exchange rate or to (1 + a tax rate), a difference of one cent per line, one whole line.

Then read the row that matches.

## The difference, by shape
| # | The buyer accepted X; you see Y | Stage | Shape | Causes, in the order to rule out | Confirm with | Fix |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | A line at the store's or the company catalog's price | Calculated or saved draft | Catalog price − agreed price, variant lines only | No `priceOverride` on the line; the agreed price sent in the custom-line field on a variant line; the line re-added in the admin | Line `priceOverride` is null; `originalUnitPriceSet` = the catalog price; `allVariantPricesOverridden` is false | Send `priceOverride` in the draft's currency on every negotiated variant line ([shape 1](#catalog-price)) |
| 2 | Right on the draft, different at the invoice checkout | Invoice checkout | The product's or catalog's new price | A catalog-priced line with prices unlocked when the invoice went out; the draft edited after sending | No `priceOverride`; the lock on send; `updatedAt` later than the invoice | Override the price, or lock on send; never edit after sending ([shape 2](#catalog-price)) |
| 3 | Every amount, or the order discount, off by a factor near the exchange rate | Draft | × the rate | A price sent in another currency (converted automatically); the draft edited later (re-priced at the current rate); no presentment currency set; a fixed discount read in shop currency | `presentmentCurrencyCode`; each `priceOverride.currencyCode`; `appliedDiscount.amountSet` shop versus presentment money | Fix the currency at quote time and create the draft in it; don't edit a saved foreign-currency draft ([shape 3](#exchange-rate)) |
| 4a | Total higher by the whole tax line | Draft or checkout | = `totalTaxSet` | The exemption wasn't applied; a tax-exempt buyer on tax-included prices | `taxExempt`, `taxesIncluded`, the location's tax settings | Put the company location on the draft; price exempt buyers explicitly on tax-included stores ([shape 4](#tax)) |
| 4b | Tax differs by a rate difference | Draft, checkout or order | Base × (rate₁ − rate₂) | A different shipping address; the billing address used when no shipping address exists; a checkout address outside the market; from 2026-10, an address change on the order | `taxLines[].rate`, the addresses | Ship-to on the draft; compare at conversion |
| 4c | Line prices divided or multiplied by (1 + the home tax rate) | Draft | ÷ or × (1 + rate) on catalog-priced lines | Tax-inclusive or dynamic tax-inclusive market pricing; the quote and the draft disagree on `taxesIncluded` | `taxesIncluded` on the quote versus the draft | Quote on the same tax basis as the buyer's market |
| 5 | Total lower by one exact amount nobody quoted | Draft or checkout | = one platform discount | Automatic discounts accepted; a code the buyer entered at checkout; the same discount sent as a line and an order discount; a cart transform on a Plus store | `platformDiscounts` (title, code, automatic); the order's `discountApplications` | Set `acceptAutomaticDiscounts` and `allowDiscountCodesInCheckout` explicitly; one discount, one place ([shape 5](#discounts)) |
| 6 | A quoted discount missing or smaller | Draft | = the missing discount, or the percentage of a smaller base | An ineligible code (skipped); a shipping or buy-X-get-Y code; a discount function with network access; a percentage applied after line discounts | The `DraftOrderDiscountNotAppliedWarning` in `warnings`; `appliedDiscount.amountSet` | Carry a negotiated discount as the price or as one order discount; read the warnings on every calculate |
| 7 | Order lines look undiscounted, but the total is right | Order | Each line gross by its share of the order discount, a cent either way | Reading `discountedUnitPriceSet`, which excludes order-level and code discounts; per-line allocation cents | `discountAllocations`; `priceAfterAllDiscountsBeforeTaxesSet` | Reconcile on totals and allocations; never re-sum lines ([shape 7](#cents)) |
| 8 | Split drafts sum to the accepted total ± a cent per draft, or ± a shipping charge | Drafts | ≤ 1 cent per draft, or a whole shipping charge | Each draft's share of a fixed discount rounded on its own; each draft taxed and shipped on its own | Each draft's subtotal against its accepted subset | Expected within a cent per draft; shipping per draft by design |
| 9 | Shipping different | Draft or checkout | = a rate difference | No rate preselected, so the buyer chose at checkout; a product added after the invoice; a shipping discount code (unsupported on drafts) | `shippingLine`, `totalShippingPriceSet` | Preselect the agreed rate, sent with its currency ([shape 9](#shipping-deposit-lines)) |
| 10 | Amount due now isn't the deposit percentage of the invoice | Draft or checkout | Deposit percentage of the subtotal only | Shopify's help puts the deposit on the subtotal, excluding tax and shipping; its API reference says order total | `amountDueNowSet`, `amountDueLaterSet` | State the basis to the buyer |
| 11a | A line missing | Draft or order | One whole line | The line is still open on the quote - not declined - and converts when accepted; from 2026-10, a buyer-requested removal after the order | The quote's accepted lines; `Order.requestedOrderEdits` | Convert the next accepted lines; handle requested edits |
| 11b | An extra line at 0.00 | Draft or invoice | One line, zero | A price-hidden line - shown to the buyer as "Included" - converting at zero | The quote line's visibility | Expected: a price-hidden line must be zero ([why](#shipping-deposit-lines)) |
| 12 | Order total no longer equals the draft's | Order | A refund, an edit or a tax recalculation | Comparing `current*` fields (after refunds and edits) with the draft; from 2026-10, tax recalculated when an unfulfilled order's address changes | `originalTotalPriceSet` versus `currentTotalPriceSet` | Compare like with like ([after the order](#after-the-order)) |
| 13 | A payout, report or ERP in the shop's currency differs | After capture | The exchange rate at transaction time | Shop money is an estimate on a multi-currency draft | `presentmentMoney` versus `shopMoney` | Reconcile in the presentment currency |

## The line is at the catalog price
**Shape 1.** For a variant line, Shopify uses `priceOverride` "in place of the product variant's catalog price in this draft order". The custom-line price field, `originalUnitPriceWithCurrency`, "is ignored when `variantId` is provided" - so a negotiated price sent there on a variant line silently becomes the catalog price. With a company location on the draft, the catalog price is the company's ("prices ... automatically reflect the settings for that company"), which makes the mistake look plausible. One Boolean catches the whole class: when every variant line was negotiated, `allVariantPricesOverridden` on the calculated draft must be true.

**Shape 2.** A draft's prices are unlocked by default. Sending an invoice or sharing a checkout link locks them by default "unless you manually set it to be unlocked", and unlocking updates the draft with the product's or catalog's current price. A lock stops rises and falls alike. A line carrying a `priceOverride` has its own price and isn't exposed to catalog changes in the first place; the lock matters for catalog-priced lines. And never edit a draft after the invoice went out: `draftOrderUpdate` after a checkout started unlinks that checkout. A change after acceptance is a new proposal and a new draft, not an edit.

## The difference is an exchange rate
A draft has one `presentmentCurrencyCode`. A price override in another currency "will be converted over to match the draft order's presentment currency". The rate on a local-currency draft is calculated when the draft is created and holds for the invoice - but Shopify's help says that editing a saved draft re-prices the whole order at the current rate. On a multi-currency draft, presentment money "is the source of truth for what a customer is going to be charged and `shop_money` is an estimate".

Order discounts deserve their own check. For a `FIXED_AMOUNT` applied discount, Shopify's 2026-10 reference says `value` is "a fixed amount in your shop currency"; a separate `amountWithCurrency` field takes an amount "in the specified currency". So a fixed discount meant in the buyer's currency, sent as `value`, can arrive converted from the shop currency. Read `appliedDiscount.amountSet` - both its shop and presentment money - against the amount you meant, and test fixed discounts on a draft in a non-shop currency before relying on them. A percentage discount has no currency to get wrong.

## The difference is tax
Classify a tax difference by its ratio; each ratio has one documented mechanism.

- **The whole tax line (4a).** The exemption didn't reach the draft. A company location's exemption applies when the location is on the draft; the draft's `taxExempt` is overridden by the customer's own tax-exempt field when a customer is applied. And on tax-included pricing, "if you set a customer to be tax exempt ... then the customer is still charged the full listed product price" - expected, by Shopify's rule. [Tax exemption on Shopify B2B](/blog/shopify-b2b-tax-exemption) covers where exemptions live.
- **A rate difference (4b).** Draft taxes follow the shipping address, falling back to the billing address when there is none; a checkout address outside the draft's market is charged the destination's rate. From API 2026-10, changing the shipping address of an unfulfilled order with `orderUpdate` recalculates its tax and can leave a balance due or refundable.
- **Prices divided by (1 + the home rate) (4c).** Tax inclusion is set per market, and when a tax-inclusive store sells into another region Shopify deducts the home tax rate from catalog prices. If the quote and the draft disagree on `taxesIncluded`, every catalog-priced line moves by that factor.

[The failure-modes post](/blog/quote-to-draft-order-failure-modes#two-numbers-one-threshold) explains why a quote's tax is an estimate and how to compare it at conversion.

## The difference is a discount
**An extra discount (shape 5).** Match the unexplained amount against the calculated draft's `platformDiscounts` or the order's `discountApplications` - Shopify records every non-custom discount there with its title, code and whether it was automatic. The sources to check:
- `acceptAutomaticDiscounts: true` applies eligible automatic discounts "in addition to discount codes and custom draft order discounts". In the admin, automatic discounts aren't applied to drafts unless you tick the option; the API input documents no default, so set the field explicitly.
- Discount codes at the invoice checkout are off by default per draft; Shopify warns that with them on, drafts "risk potentially being discounted more than you anticipate".
- On B2B, automatic discounts and codes "apply as additional discounts on top of" catalog prices.
- A custom order discount is applied on top of line discounts - "be careful not to duplicate the discount".
- On a Plus store, a cart transform function runs on draft orders too, and can change a line's price.

**A missing or smaller discount (shape 6).** A code the draft isn't eligible for "will be skipped during calculation", and the calculate result says so: `DraftOrderDiscountNotAppliedWarning` names it by `discountTitle` and `discountCode` (the `priceRule` field was removed at 2026-10). Shipping codes and buy-X-get-Y codes aren't supported on drafts, and discount functions with network access don't run on them. A percentage order discount is a percentage of the order subtotal, applied on top of line discounts, so it comes out smaller than a quote that took the percentage of the gross lines.

## The difference is a cent
On the order, the per-line fields answer different questions. `discountedUnitPriceSet` "doesn't include order-level or code-based discounts", so every line of an order with an order discount looks undiscounted while the total is right. The order discount's share of each line is in `discountAllocations` ("the final calculated discount amount applied to each line"), and `priceAfterAllDiscountsBeforeTaxesSet` gives the line after all of them. Allocation produces cent amounts per line, so a quote's own pro-rata and Shopify's can differ by a cent per line while the totals agree: reconcile on totals, and [never re-sum the rows](/blog/never-sum-the-total-from-the-rows) into a "should be".

When one quote converts into several draft orders, each draft's share of a fixed discount is rounded on its own, so the drafts can sum to the accepted total plus or minus a cent per draft. Each draft is also taxed and shipped on its own.

## Shipping, the deposit and whole lines
- **Shipping (shape 9).** A preselected shipping line can't be changed by the buyer at checkout; with none preselected, the buyer chooses from the available rates. A product added after the invoice doesn't update a calculated rate. `ShippingLineInput.price` is deprecated at 2026-10; `priceWithCurrency` takes precedence and carries its currency.
- **The deposit (shape 10).** Deposits are a Shopify Plus feature. Shopify's help says a deposit is "a percentage of the order subtotal only - it doesn't include taxes or shipping"; the API's `DepositInput` says order total - [the reference](/reference/shopify-b2b#payment-terms) records the contradiction. `amountDueNowSet` is what the buyer pays now.
- **A missing line (11a).** If the buyer accepted part of a quote, only the accepted lines convert. A line they haven't decided on is still open on the quote - not declined - and converts when it is accepted. From 2026-10, a buyer can also ask to remove unfulfilled lines after the order, through order editing.
- **A line at zero (11b).** A line whose price was hidden on the quote - the buyer saw "Included" - converts at 0.00. It must be zero: buyer totals come from the stored quote figure, never summed from the displayed rows, so a hidden line priced above zero would reveal its price by subtraction.

## After the order exists
The order's `totalPriceSet` and `subtotalPriceSet` are the amounts before returns; the `current*` fields are after refunds, returns and edits; `originalTotalPriceSet` is the total at creation. Compare the draft with the original, and explain any gap to the current total from refunds, edits, buyer-requested edits and - from 2026-10 - tax recalculated after an address change. A payout or an ERP in the shop's currency will differ from what the buyer paid by the exchange rate at the time of the transaction; reconcile in the presentment currency. [When the quote and the Shopify order disagree](/blog/quote-to-order-out-of-sync) catalogues everything that drifts after the order exists.

## Where QuotWay fits
QuotWay sends every negotiated variant price as `priceOverride` in the quote's currency, creates the draft in that currency, and sends a whole-quote discount as one order-level discount. A company-aware quote carries the company location as the purchasing entity, with the location's tax exemption. The convert screen shows Shopify's calculated subtotal, tax, shipping and total for the merchant to read, and holds the conversion when the tax Shopify calculates drifts from the quote's beyond your threshold - see [converting a quote to a draft order](/docs/converting-to-orders/convert-a-quote-to-a-draft-order). Since 30 September 2026 a whole-quote discount also counts toward the price floor and discount approvals, so an order discount can't take a line below the floor unnoticed ([floor price and discounts](/docs/negotiation/floor-price-and-discounts)).

The drift check compares tax, shipping and inventory - not line prices or discounts. So the table above is still worth running on a converted quote whose total surprises you; [the 50-test launch plan](/blog/shopify-b2b-launch-test-plan) has the draft-order tests to repeat after a fix. Plans are on the [pricing page](/pricing), and conversion is described on [convert quotes to orders](/features/convert-to-orders).

## FAQ

### Why does a Shopify draft order show the catalog price instead of the negotiated price?

The variant line has no `priceOverride`. Shopify ignores the custom-line price field (`originalUnitPriceWithCurrency`) when a `variantId` is provided, so a negotiated price sent there becomes the catalog price - the company's catalog price if a company location is on the draft. Send `priceOverride` and check `allVariantPricesOverridden` on the calculated draft.

### Why did the price change when the buyer opened the draft-order invoice?

The line was priced from the catalog and the draft's prices were unlocked when the invoice went out, so it picked up the product's or catalog's current price. Sending an invoice locks prices by default; a line with a `priceOverride` isn't affected. Editing the draft after sending also unlinks the checkout.

### Why is a fixed discount wrong on a draft order in another currency?

Shopify reads a fixed-amount `appliedDiscount.value` in the shop's currency and offers `amountWithCurrency` for an amount in another currency. A discount meant in the buyer's currency, sent as `value`, can arrive converted. Compare `appliedDiscount.amountSet` in both currencies with what you meant, and test on a non-shop-currency draft.

### Why was a tax-exempt B2B customer charged the full price?

On tax-included pricing, Shopify charges a tax-exempt customer the full listed price - that is its documented rule. If the total is higher by the whole tax line on tax-excluded pricing, the company location's exemption didn't reach the draft.

### Why is the order discounted more than the quote?

An automatic discount or a code was applied on top of the negotiated prices. Match the extra amount against `platformDiscounts` on the draft or `discountApplications` on the order, and set `acceptAutomaticDiscounts` and `allowDiscountCodesInCheckout` explicitly on drafts made from quotes.

### Why wasn't a discount code applied to my draft order?

The draft wasn't eligible for it, so Shopify skipped it and said so in a `DraftOrderDiscountNotAppliedWarning` naming the code. Shipping and buy-X-get-Y codes aren't supported on draft orders, and discount functions with network access don't run on them.

### Why don't the order's line prices show the quote's discount?

`discountedUnitPriceSet` on an order line excludes order-level and code discounts. The order discount's share of each line is in `discountAllocations`; read those, and reconcile on the total.

### Why is a line missing, or why is there a line at 0.00?

First check whether a missing line is one the buyer hasn't decided on - it is still open on the quote and converts when accepted. A line at 0.00 is one whose price was hidden on the quote: it must be zero, because the buyer's total comes from the stored quote figure, not from the displayed rows.

## Sources

Shopify pages, read on 9 October 2026 at API version 2026-10:

- [DraftOrderLineItemInput](https://shopify.dev/docs/api/admin-graphql/2026-10/input-objects/DraftOrderLineItemInput) - `priceOverride`, the custom-line price ignored on variant lines, currency conversion of overrides
- [DraftOrderInput](https://shopify.dev/docs/api/admin-graphql/2026-10/input-objects/DraftOrderInput) - `presentmentCurrencyCode`, `acceptAutomaticDiscounts`, `taxExempt`, discount codes
- [DraftOrderAppliedDiscountInput](https://shopify.dev/docs/api/admin-graphql/2026-10/input-objects/DraftOrderAppliedDiscountInput) - fixed amounts in shop currency; `amountWithCurrency`
- [DraftOrder](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/DraftOrder) and [CalculatedDraftOrder](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/CalculatedDraftOrder) - presentment money as the source of truth, `allVariantPricesOverridden`, `platformDiscounts`, `warnings`, amounts due now and later
- [DraftOrderDiscountNotAppliedWarning](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/DraftOrderDiscountNotAppliedWarning) - skipped codes named by title and code
- [LineItem](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/LineItem), [DiscountAllocation](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/DiscountAllocation) and [Order](https://shopify.dev/docs/api/admin-graphql/2026-10/objects/Order) - per-line price fields, allocations, original versus current totals, requested order edits
- [ShippingLineInput](https://shopify.dev/docs/api/admin-graphql/2026-10/input-objects/ShippingLineInput) - `price` deprecated, `priceWithCurrency`
- [Cart Transform API](https://shopify.dev/docs/api/functions/2026-10/cart-transform) and [Discount Function API](https://shopify.dev/docs/api/functions/2026-10/discount) - functions on draft orders
- [Release notes 2026-10](https://shopify.dev/changelog/release-notes/2026-10) - `priceRule` removed from discount warnings; `orderUpdate` tax recalculation
- [Creating draft orders](https://help.shopify.com/en/manual/fulfillment/managing-orders/create-orders/create-draft), [sending draft-order invoices](https://help.shopify.com/en/manual/fulfillment/managing-orders/create-orders/send-draft) and [discounts on draft orders](https://help.shopify.com/en/manual/fulfillment/managing-orders/create-orders/discounts) - price lock on send, exchange rate fixed at creation and re-priced on edit, tax by address, automatic discounts and codes, custom discounts
- [Creating B2B orders using draft orders](https://help.shopify.com/en/manual/b2b/checkout-and-orders/draft-orders) - company prices, preselected shipping, deposits on the subtotal
- [B2B discounts](https://help.shopify.com/en/manual/b2b/catalogs/discounts) - discounts on top of catalog prices
- [Including or excluding tax in prices](https://help.shopify.com/en/manual/taxes/include-exclude-taxes) - tax inclusion per market, home rate deducted, tax-exempt customers on tax-included pricing
- [Exchange rates](https://help.shopify.com/en/manual/international/pricing/exchange-rates) - conversion at the time of the transaction

QuotWay behaviour is described from its public documentation and the app's source, read on 9 October 2026.
