Acro Commerce

Symptoms and fixes

Why does the price on our website not match the invoice?

The difference between the two numbers names the cause. An exact list price means the connector synced Default Price rather than the contract price, a clean multiple means unit of measure, a round percentage means a price class, an odd few cents means tax, and a price that was right last month means a stale batch.

What is the ratio between the two numbers?

Do this before you open a ticket. Take one customer, one item, and one order where the two numbers disagreed. Write down four figures: what the website showed, what the invoice charged, the item Default Price in your ERP, and the effective sales price your order desk would have quoted that day. The relationship between them tells you which cause you have, and it takes about ten minutes.

The reason this works is that each of the five causes distorts the price in a different arithmetic shape. A pricing-layer problem gives you a clean list price. A unit problem gives you a clean multiple. A tax problem gives you a small remainder that changes by ship-to province or state. Nothing else looks like those.

Read the table with your four numbers in front of you. Where two rows both fit, you have two problems, which happens more often than people expect on a first launch.

The ten-minute price mismatch test: match the arithmetic to the cause
CriterionWhat you seeWhat it meansWhat to do
The website price is exactly the item Default Price, and the invoice is lowerThis is the most common cause we see, and it is a design limit rather than a bug.Web price equals the stock item Default Price to the cent. The invoice equals the negotiated price your order desk quotes.The connector is syncing the item default and not the effective sales price. On Acumatica this is the documented behaviour of the Shopify connector, not a misconfiguration.Decide which of the four pricing architectures you are buying. Nothing you change in the connector settings will fix this one.
Web price divided by invoice price is a clean whole number: 12, 24, 144, 1000The ratio is a packaging quantity. An each price where a case price belongs, or the reverse.A unit of measure mismatch between the sales unit and the base unit. The price synced against one unit and the order was placed in the other.Check the sales unit and base unit on that stock item and check which unit the connector published. Fix the item, then audit every item that has more than one unit.
The gap is a round percentage: 5, 10, 15, 20 per cent offBoth numbers are plausible prices and the difference is a discount rate you recognise.The customer moved price class or customer group and the prices attached to the new class did not follow, or the storefront is applying a group discount the ERP no longer applies.Look at the customer record in both systems. If the class or group matches and the price does not, the price data did not sync with the group assignment.
The gap is a few cents to a few per cent, and it varies by ship-to addressSmall, inconsistent differences. Two orders for the same item to two provinces disagree by different amounts.Tax. Either the storefront quotes tax-inclusive prices and the ERP is exclusive, or both systems calculate tax and round differently, or the ERP recalculated the tax the storefront had already charged.Compare the tax line, not the unit price. If the unit prices match and only the total differs, you have a tax question rather than a pricing question.
The website price was right last month and is right for older itemsNew or recently repriced items are wrong. Everything untouched is correct.A stale batch. The price list entity was not prepared and processed, or the scheduled job failed silently, or a single unsynced item failed the whole list.Check the last successful run and the error log before you change anything. A failed job that nobody watches looks identical to a connector that does not support your pricing.

Checked against: Acumatica community 17608: “Only Default Price is supported”, Acumatica community 6697: BigCommerce sales price sync with the wrong unit of measure, Acumatica community 22606: price list sync fails on an unsynced item

Cause one and two: is your contract price even leaving the ERP?

These two causes are both pricing-layer problems and they are the ones that do not announce themselves. Nothing errors. The item syncs, the order syncs, the number is simply wrong, and you find out when a customer who has bought at a negotiated price for four years sees list price and phones his rep.

The first is the Default Price limit. Asked directly whether the current effective sales price from the ARSalesPrice table could sync to Shopify instead of the Default Price, Acumatica’s own community answered “No. Only Default Price is supported.” Anything you set with a Sales Price Worksheet therefore lives in a table the connector does not read. Per-customer prices can still reach Shopify B2B as catalogues through the Price List entity, which is the path most teams end up on, and that is a different mechanism with different limits.

The second is the price class gap, and it is easy to mistake for the first. On the BigCommerce side, an Acumatica community answer from 2021 R2 states that the Customer Price Class entity “will update groups of customers in BigCommerce store (Customers>Customer Groups), but not the prices”, and that to move prices you prepare and process the Price List entity separately. So a customer can be sitting in the correct group on the storefront with none of that group’s prices behind them. The customer record looks right, which is exactly why nobody checks it.

If either of these is your cause, the fix is an architecture decision rather than a setting. The four options, and what each costs, are worked through on the Acumatica pricing reality check and on the contract pricing mechanic page.

Checked against: Acumatica community 17608: sync the current effective sales price to Shopify, Acumatica community 11823: price class updates groups, not prices

Cause three: which unit did the price sync against?

A Unit of measure conversion is the rule that says one case equals twenty-four eaches, so a customer can buy in the unit that suits them while stock is counted in the unit that suits the warehouse. mismatch is the cause that produces the most alarming numbers, because it is usually wrong by a whole packaging factor rather than by a discount. An each price on a case product looks like a catastrophic mispricing to a buyer and like a data entry error to everyone else.

The mechanism is that a stock item carries a base unit, which is how you hold and cost it, and a sales unit, which is how you sell it. Acumatica community threads record both halves of this going wrong on the connector: a sales price syncing against the wrong unit on BigCommerce, and a Shopify sync setting items on the store to the base unit rather than the sales unit. Those observations come from different releases, so check your own store rather than assuming your version behaves the same way.

The test is quick. Pick five items where the base unit and the sales unit differ, and five where they are the same. If the mismatch only appears on the first five, you have found it. If it appears on both sets, unit of measure is not your cause and you should go back to the table above.

One thing worth saying plainly: a unit problem is worse than a pricing-layer problem, because a pricing-layer problem quotes a price you would have accepted and a unit problem can quote one twelfth of it. If your first mismatch report is a unit problem, treat it as an incident rather than a backlog item.

Checked against: Acumatica community 12444: Shopify sales unit and base unit, Acumatica community 19822: sync sets items to the base unit, not the sales unit

Cause four and five: staleness and tax

A stale price is the cause people assume last and should check first, because it is free to rule out. Acumatica moves price lists when you prepare and process the Price List entity, manually or on an automation schedule, and the community answer describing that pattern says it is usually run overnight. So the question is not whether your connector supports your pricing, it is when your job last ran and whether it succeeded. One well-known failure, “Sync ID is not found for the record”, stops a whole price list when any single stock item on it has not already synced to the store, which means one deactivated item can freeze pricing for every item beside it.

Tax is the other cheap one to rule out. If the unit prices agree and only the totals disagree, stop looking at pricing. Acumatica recalculates the tax on imported orders by default, which means the amount your storefront charged and the amount your invoice shows can differ even when every price is correct. There is a documented way to stop that recalculation and it has consequences of its own. Separately, Shopify and Acumatica have been reported to disagree by a few cents on AvaTax through rounding, which produces a difference too small to be a pricing fault and too persistent to ignore.

Distinguishing these two takes one query. Sort your mismatched orders by date. Staleness clusters around a date, because it starts when a job failed or a price changed. Tax spreads evenly across dates and clusters by ship-to jurisdiction instead. If your mismatches cluster by geography, you have a tax problem and this page has done its job.

Checked against: Acumatica community 11823: prepare and process on an overnight schedule, Acumatica community 12996: stopping tax recalculation on imported orders, Acumatica community 4296: Shopify and Acumatica AvaTax rounding difference

What does each fix cost, and which one do you do this week?

Order these by cost, not by how annoying the symptom is. Two of the five are configuration and can be done this week by the person who already administers your ERP. Two are data work. One is an architecture decision that belongs in a project rather than in a ticket, and pretending otherwise is how a price problem turns into a six-month argument.

Five causes of a price mismatch, ordered by what the fix actually costs
CriterionThe fixWho does itWhat it costs
Stale batchRestore the schedule, clear the item that is failing the list, and put an alert on the job so a silent failure is not silent.Whoever administers the ERP, today.Hours. The only real cost is admitting nobody was watching the job, which is the normal state of an unwatched integration.
Unit of measureCorrect the sales unit and base unit on the affected items, republish, then audit every multi-unit item in the catalogue.ERP administrator plus someone who knows how you actually sell each item.Days, and the audit is the expensive half. Budget the data work, not the fix.
Tax inclusive versus exclusive, or recalculation on importDecide which system owns the tax calculation, then make the other one accept it. Test with a real order to a jurisdiction you actually ship to.Controller with the ERP administrator. This is a finance decision with a technical implementation.Days, plus a genuine risk of getting it wrong in a way your auditor cares about. Do not let this one be decided by a developer alone.
Price class moved without its pricesRe-run the price list entity for the affected class and reconcile the customer group membership on both sides.ERP administrator, with someone checking a sample of customers by hand.Days. Recurs every time you restructure classes unless you write the reconciliation into your release routine.
Default Price synced instead of the contract priceIf this is your cause, stop reading symptom pages and go and read the four options in full.Choose one of four architectures: sell online at list, restructure prices as catalogues, call the ERP for the price at runtime, or customise the connector.The people who decide budget, with an architect. Not a ticket.Weeks to months, and every option gives something up. This is the one to work through properly rather than quickly.

What if the website is right and the invoice is wrong?

This happens often enough to check before you rebuild anything, and it is the case nobody looks for because the website is the new system and the new system is assumed to be the guilty one.

Three things put a number on an invoice that the website never quoted. A rep applied a manual discount or a price override at order entry, which is invisible on the storefront and entirely legitimate. A freight, handling or small-order surcharge landed as an invoice line, so the unit prices agree and the totals do not. Or the order was invoiced against a different effective date than the day it was placed, which matters when a price change fell between the order and the shipment.

The test is to compare the sales order in the ERP with the invoice, rather than comparing the website with the invoice. If the sales order agrees with the website and the invoice disagrees with the sales order, your integration is fine and your order-to-invoice process is the thing to look at. That is a different department and a much cheaper fix.

Write the effective-date rule down whichever way it turns out. A distributor that reprices between order and shipment and has never said so in writing will have this argument with a customer eventually, and the answer should not be improvised on the phone.

The wider picture

This page answers one narrow question. Acro Commerce covers the strategy around it.

Common questions

Does the Acumatica Shopify connector sync customer-specific prices?
Not the effective price your order desk would quote. Acumatica’s own community, answering a direct question about syncing the current effective sales price from the ARSalesPrice table, says “Only Default Price is supported”, which strands anything set with a Sales Price Worksheet. Per-customer prices can still reach Shopify B2B as catalogues through the connector’s Price List entity, and that is the path most Acumatica teams end up on. It is a different mechanism with different limits, including how fresh the price is and how many catalogues your Shopify plan allows.
How do I tell a unit of measure problem from a pricing problem in one minute?
Divide the website price by the invoice price. If the answer is a clean whole number that matches a packaging quantity, such as 12, 24 or 144, it is unit of measure. If the answer is a discount rate you recognise, such as 0.85 or 0.9, it is a pricing layer. Unit of measure problems only appear on items where the sales unit and the base unit differ, so checking five of each kind confirms it immediately.
Our prices were right at launch and drifted. What changed?
Almost always the schedule rather than the connector. Acumatica moves price lists when the Price List entity is prepared and processed, normally on an overnight automation schedule, and that job can fail without anyone noticing. One documented failure, “Sync ID is not found for the record”, stops the entire price list when a single stock item on it has not synced to the store, so deactivating one item can freeze pricing across the list. Check the last successful run before you change any configuration.
Should we just show list price online and let the invoice be different?
It is a legitimate answer, and more companies do it than vendors admit, but only if you say so on the page. A price presented without qualification is a price your customer will hold you to, and a B2B buyer who discovers their contract price was not applied online loses trust in the whole storefront. If you take this route, label the number as list, show the contract price after sign-in or not at all, and keep negotiated accounts on the channel where their price is correct.
Can middleware fix this without changing the ERP or the platform?
It can fix the staleness and the mapping causes, and it can fetch a live contract price if you are prepared to pay for a real-time call on your product and cart pages. What it cannot do is invent a price that the ERP will not calculate on request, and it does not remove the decision about which system owns the price. Middleware moves the problem to a place where you can solve it, which is worth money, and it is not a substitute for deciding where price is calculated.

Last updated 2026-08-20. Facts on this page last checked against source 2026-08-20.