Home / Resources

Why Shopify cost of goods sold does not match QuickBooks in Canada

Shopify and QuickBooks can show different cost of goods sold even when the sales count looks right. The usual reason is that Shopify applies the cost stored on each variant when the sale occurs, while QuickBooks Online values inventory from recorded purchase layers and its inventory-costing method. Timing, missing costs, landed costs, returns, bundles and stock adjustments widen the gap.

The short answer: do not force Shopify's gross-profit report to equal QuickBooks by posting a plug. Reconcile units first, reconcile inventory value second, and let the approved accounting inventory method determine COGS. Shopify is the operational sales-and-quantity source; QuickBooks is the accounting ledger; a physical count is the independent proof of what is actually on hand.

What each system is actually measuring

The two systems use inventory information for different jobs. Shopify needs product and variant data to sell, fulfil and report on orders. QuickBooks needs purchase cost, quantities and accounting dates to value the inventory asset and recognize cost of goods sold. Those views can be connected, but they are not automatically identical.

Shopify quantity

Operational stock by product variant and location, affected by orders, returns, transfers and inventory adjustments.

Shopify cost per item

A product or variant field used in Shopify profit reporting. Shopify describes it as static data relevant to a specific point in time.

QuickBooks inventory

An asset built from recorded purchases, receipts, sales and adjustments under the file's inventory settings.

Physical inventory

The units the business can actually count at its stores, warehouse, fulfilment locations and other controlled locations.

Shopify says its profit reports require cost per item to be recorded when a product is sold. Its guidance also warns that the cost field is static and suggests using an accounting or ERP system when dynamic cost reporting is needed. QuickBooks Canada currently says QuickBooks Online applies FIFO to inventory, so purchases entered at different costs can produce a different COGS amount from one static Shopify cost.

The accounting equation behind inventory and COGS

A useful monthly control is:

Beginning inventory + inventory purchases and capitalized landed costs - cost of goods sold - approved write-downs or losses = ending inventory.

Units follow a parallel equation:

Beginning units + units received + saleable returns - units sold - shrinkage, damage and other approved adjustments = ending units.

These are related controls, not interchangeable ones. A store can have the correct unit count and the wrong dollar value, or the correct total inventory value spread across the wrong variants. Reconcile both.

Why Shopify COGS and QuickBooks differ

1. Shopify uses a static variant cost

Shopify's cost per item does not recreate historical purchase layers. If a variant cost is changed from $18 to $22, Shopify's reporting depends on the cost recorded when the sale occurred; it does not become a full inventory subledger. Missing costs can also cause Shopify COGS to display as zero for affected items.

2. QuickBooks uses recorded inventory purchases

QuickBooks COGS depends on inventory items, quantities and costs actually entered in the accounting file. If a purchase is categorized directly to an expense instead of entered through the inventory item, the quantity and inventory asset can be wrong even though cash was recorded.

3. Landed cost is incomplete or inconsistent

The supplier invoice is not always the full cost of bringing an item to saleable condition. Freight, duties, brokerage and other directly attributable costs may need treatment under the business's approved inventory policy. Shopify's example for a resale item's cost per item excludes taxes, shipping and other costs, so its margin view can differ from the accounting carrying cost by design.

4. Sales and returns hit the systems on different dates

An order date, fulfilment date, refund date and restock date can fall in different periods. A refunded item is not necessarily back in saleable inventory when the refund is issued. If the connector reverses revenue immediately but stock is restocked later, COGS and quantity can move in different months.

5. SKUs, variants or locations do not map one-to-one

Duplicate SKUs, blank SKUs, renamed variants, deleted products and multiple Shopify locations can break an otherwise sound sync. Shopify notes that historical inventory for deleted locations does not appear in its inventory reports. Preserve exports before deleting locations or variants that still support financial records.

6. Bundles and kits have no matching accounting build

Shopify may sell one bundle SKU while the warehouse consumes several component SKUs. If QuickBooks records the bundle as a single unrelated item, the sales quantity can import without relieving the correct component inventory or cost.

7. Negative inventory distorts cost timing

When sales are recorded before the related purchase receipt, the accounting system may calculate cost using incomplete layers and recalculate after inventory is received. Repeated negative quantities are usually a cut-off or workflow problem, not merely a reporting nuisance.

8. Manual adjustments were posted without evidence

QuickBooks inventory adjustments affect the inventory asset and an adjustment or shrinkage account. Intuit warns that editing them can materially affect the books. Every adjustment should have a date, reason, approver and source such as a count sheet, damage log or warehouse report.

Reports to collect before reconciling

Shopify says its month-end inventory snapshot reports quantity by variant, but historical inventory metrics begin only from October 1, 2023 and deleted locations are excluded. Export and retain the reports used for each close rather than assuming the dashboard will reproduce the same view years later.

An eight-step Shopify inventory reconciliation

1. Lock the cut-off

Choose one date and time, including time zone. Identify orders paid but not fulfilled, fulfilled but not imported, returns in transit, purchase orders received but not entered, and inventory transfers between locations. Do not compare reports that use different cut-offs.

2. Build a controlled SKU map

Map every saleable Shopify variant to one accounting item and, where needed, to warehouse or component SKUs. Flag blanks, duplicates, bundles, gift cards, samples and non-inventory items. Keep old identifiers in the map when products are renamed.

3. Prove opening quantities

Start from the prior month's approved ending quantity. If this is the first close, use a documented physical count and a reviewed opening-value entry. Do not begin with today's Shopify quantity while importing several months of earlier sales.

4. Reconcile quantity movement

For each material SKU, prove opening units plus receipts and saleable returns, less units sold and approved adjustments, equals ending units. Separate differences by cause: timing, missing receipt, missing sale, wrong location, bundle mapping, damage or unexplained shrinkage.

5. Reconcile purchase cost and landed-cost allocation

Confirm that supplier bills use inventory items and the correct dates. Apply the business's approved policy consistently to freight, duty, brokerage and other costs. Keep GST/HST treatment separate: recoverable input tax credits are not automatically part of inventory cost.

6. Let the accounting method calculate COGS

QuickBooks Online Canada currently describes its inventory tracking as FIFO: older recorded units are relieved before newer units. Do not overwrite the resulting COGS merely to match Shopify's static cost-per-item estimate. Investigate whether the quantities, purchase layers or cost policy are wrong first.

7. Record approved inventory adjustments

Post count differences, damage, samples and write-downs to the accounts approved by the accountant. Use the actual discovery or count date unless a period-end adjustment is formally approved. Never use inventory adjustments as a recurring plug for connector errors.

8. Tie the financial statements

The final QuickBooks inventory valuation should agree with the inventory asset on the balance sheet. COGS should flow to the profit and loss statement, and gross profit should be commercially plausible. Review the result alongside the profit and loss statement and balance sheet, not as an isolated report.

Worked example: one static Shopify cost versus FIFO

Assume a store begins the month with 100 units recorded in QuickBooks at $20 each. It buys 60 more units for $22 each and allocates $180 of approved landed cost to that shipment. The new layer therefore costs $1,500 in total, or $25 per unit. During the month, the store sells 120 units.

QuickBooks FIFO COGS

The first 100 units cost $20 each ($2,000). The next 20 units cost $25 each ($500). Accounting COGS is $2,500.

QuickBooks ending inventory

Forty units remain from the $25 layer. Ending inventory is $1,000.

Shopify at a static $22 cost

If Shopify cost per item stayed at $22, its report would show $2,640 of COGS for 120 units.

The explained difference

Shopify COGS is $140 higher because one static cost is not the same as the accounting purchase layers and landed-cost policy.

The answer is not to post a $140 journal entry merely to make the reports agree. Confirm the real units, purchases and cost policy. Shopify can remain a useful operational margin estimate while QuickBooks carries the approved accounting value.

Returns, exchanges and restocking

A refund reverses customer economics; a restock changes physical inventory. They are connected but not identical. For each return, determine whether the item was received, whether it is saleable, damaged or missing, and which location received it. Only saleable inventory should return to normal stock without a separate damage or write-down decision.

Exchanges can create two inventory events even when little or no cash moves: one unit comes back and another goes out. A payments-focused connector may not be enough to prove this quantity movement. Keep return and warehouse events in the SKU reconciliation.

Bundles, assemblies and manufactured products

For a bundle, define the bill of materials or component rule outside the payout workflow. One bundle sale should relieve the correct quantity of every component. If the accounting software or connector cannot do this reliably, use a controlled monthly assembly or component adjustment reviewed against the bundle sales report.

Manufactured goods need more than a supplier unit price. Raw materials, work in process, finished goods and eligible conversion costs may require a separate cost build. Shopify's cost per item can store an operational estimate, but it should not be treated as the complete year-end valuation without professional review.

Canadian tax and year-end considerations

The CRA says businesses need an annual inventory and use inventory to calculate cost of goods sold and net income. Its guidance allows specified inventory-valuation approaches and says that, after choosing a method, the business generally needs to use it consistently in later years. Other methods can apply in particular circumstances.

At year-end:

This is not a place for an unsupported percentage write-down. Keep the count sheets, SKU valuation, invoices, adjustment support and approval with the year-end file. For the wider close, use the e-commerce month-end checklist and the Canadian year-end bookkeeping checklist.

What to automate and what to review

A reliable system can sync sales and returns, enforce SKU mappings, flag negative quantities, compare location counts, import purchases, calculate known cost layers and produce an exception list. It can also warn when Shopify cost per item is blank or materially different from the accounting cost.

A person still needs to approve the inventory cut-off, landed-cost policy, damaged-stock treatment, bundle logic, write-downs, tax treatment and any adjustment that changes prior financial statements. Automation should preserve evidence and surface exceptions; it should not erase the difference between an operational estimate and an accounting valuation.

If the sales, inventory and accounting systems are not aligned, see LZ Financial's e-commerce bookkeeping automation service or request a free assessment.

Want to find where the numbers diverge?

Run the free diagnostic to identify likely timing, mapping and duplicate-entry problems, then include the inventory exception in your assessment request.

Run the free payout diagnostic →

Official references

Reviewed September 28, 2026. This guide provides general educational information, not accounting, legal or tax advice. Platform features and reports can change. Have a qualified professional approve inventory valuation, landed-cost, write-down, GST/HST and year-end treatments for your business.

Frequently asked questions

Why does Shopify COGS not match QuickBooks?

Shopify uses the cost stored on a product variant when it is sold, while QuickBooks Online calculates inventory cost from recorded purchases and its costing method. Missing costs, landed costs, timing, returns, bundles and adjustments can all create differences.

Which COGS number should a Canadian Shopify store use?

Use the amount produced by the business's approved accounting inventory method after quantities, purchase costs and adjustments are reconciled. Shopify's profit report is operationally useful, but it should not replace the accounting inventory subledger or year-end valuation.

Should freight and duty be included in inventory cost?

Some costs of bringing inventory to saleable condition may be included under the business's approved policy, while recoverable taxes and unrelated operating costs are treated separately. Confirm the policy and allocation method with the accountant and apply it consistently.

How often should Shopify inventory be reconciled?

At least monthly for financial reporting, with cycle counts more often for high-value or fast-moving SKUs and a documented physical inventory at year-end. Investigate differences while source records are still easy to trace.