The operational question
Shopify stores a Cost per item on each variant. Supplier invoices store the commercial price the supplier actually billed. Those two numbers drift apart constantly.
The job is not “copy the invoice into Shopify.” The job is to decide which invoice figure should become unit cost, review uncertain values, and write only the approved result.
1. What Shopify Cost per item actually represents
Cost per item is the inventory cost Shopify uses for margin and profitability views. It is not the selling price. It is not VAT. It is not automatically a weighted-average or landed-cost valuation unless you have built that process around it.
In Admin it lives on the product variant. Internally it is the inventory item cost. Reports that depend on product cost are only as trustworthy as the last reviewed number you stored there.
The supplier invoice is often the best evidence of the latest actual purchase cost, because it is the commercial document the supplier expects to be paid against. Purchase orders, catalogue price lists and last year's Cost per item can all be stale.
2. Why invoice cost and Shopify cost often differ
Common reasons the two numbers do not match:
- the supplier changed price since the last receipt;
- a line-level or invoice-level discount was applied;
- freight, duty or handling appears as a separate line;
- tax is included on the invoice but Cost per item should be exclusive;
- the invoice is in a different currency from the store;
- the supplier billed cases while Shopify tracks eaches;
- bonus or free-of-charge units arrived with a charged quantity;
- a rebate sits off the invoice line entirely.
If you overwrite Cost per item with the first number OCR reads, you can bake the wrong policy into every later margin report.
3. Manual update workflow
- Receive the supplier invoice PDF or image.
- Identify the Shopify product or variant for each line.
- Validate billed quantity against what was received.
- Calculate the cost your policy says should be stored.
- Update Shopify Cost per item.
- Record what changed, who approved it, and which invoice it came from.
This is workable for a handful of SKUs. It breaks down when a grocery, beauty or multi-location retailer processes dozens of lines, mixed languages, pack conversions and repeated suppliers every week.
4. Bulk / CSV workflow
CSV updates are useful when a large, already-reviewed cost file needs to land in Shopify. They are a poor replacement for invoice understanding.
Bulk files introduce matching and overwrite risk: one wrong variant ID, one swapped decimal, one tax-inclusive column treated as net, and hundreds of products change at once. You still need a clean mapping from invoice lines to Shopify variants before the file is generated.
5. API / automation approach
A safe automation pipeline looks like this:
- Extract invoice header and line data from the document.
- Match each supplier line to a Shopify variant.
- Calculate the candidate cost using an explicit policy.
- Review uncertain extraction, matches and unusual changes.
- Write Cost per item only after approval.
- Log the invoice, the before/after values, and the write result.
Extraction is not authorization. A system can read a PDF correctly and still make a dangerous inventory or costing change.
6. What should actually become unit cost?
This is the decision most teams skip. Pick a policy and apply it consistently.
| Invoice figure | When it may be the right unit cost | When it usually is not |
|---|---|---|
| Gross supplier unit price | No discounts, tax exclusive, billed in eaches | Discounts, tax-inclusive prices, or case billing |
| Net price after line discount | You want actual purchase cost on that SKU | You still need to allocate invoice-level discounts |
| Tax-inclusive unit price | Your accounting cost is VAT-inclusive by policy | Most margin reporting wants tax-exclusive cost |
| Net plus allocated freight/duty | You deliberately store landed cost on the variant | Freight is tracked elsewhere or varies by shipment |
| Charged quantity including bonus units | You average cost across all units received | You keep FOC units off the unit-cost calculation |
Pack conversion comes first. If the invoice bills 5 cases of 12, Shopify usually needs a cost per each, not a cost per case.
7. Multi-currency invoices
A USD or EUR supplier invoice does not automatically equal the AED, SAR or KWD Cost per item in Shopify. Conversion needs an explicit policy: invoice-date rate, payment-date rate, or a contracted rate.
Rounding must be consistent, and the original invoice currency should stay in the audit trail. Do not silently reuse “today's” FX rate for a historical invoice.
8. Never blindly overwrite product cost
Extraction is not authorization. A confident OCR value is still only a proposal until a merchant reviews it.
- uncertain OCR values should not silently update Shopify;
- unusual cost changes should be surfaced, not buried;
- quantity and cost should be reviewable independently;
- duplicate invoices should be detected before a write;
- every write should be auditable.
9. Worked example
A Dubai grocery receives an AED invoice for sparkling water 330ml. Shopify tracks individual cans. The supplier bills cases.
| Input | Value |
|---|---|
| Invoice line | 5 cases × 12 cans |
| Gross case price | AED 28.80 |
| Equivalent each | AED 2.40 |
| Line discount | 10% |
| Net each before freight | AED 2.16 |
| Freight on this line's share | AED 0.60 each |
| Shopify Cost per item before | AED 2.10 |
If policy is “latest net invoice cost, tax exclusive, freight kept separate,” the reviewed Cost per item is AED 2.16. If policy is “landed cost on the variant,” it is AED 2.76. Both can be valid. Silently picking one is not.
Once your product cost is accurate, use our markup vs margin calculator to see how cost changes affect selling price and gross margin.
10. Automating the workflow
Salor Invoice extracts supplier invoices, matches lines to Shopify products, lets the merchant review quantity and cost changes, and applies only approved updates. It does not replace a full landed-cost or accounting system, and it does not write extracted values until they are reviewed.
Automate supplier invoice cost updates with Salor Invoice →