Sync BOM cost to Shopify
When you set up a BOMBill of MaterialsA bill of materials tells Assemblified how to build one unit of a finished good. When a customer orders the finished-good variant, Assemblified deducts the right component quantities from inventory automatically. Read more → , Assemblified knows the rolled-up cost of one finished good — sum of components, including labourLabour costThe cost of human work, modelled as a cost factor of kind "labour" — a rate per unit of time you attach to a bill with a quantity per output unit. A work order prefills labour from its bills; an operator can override it. Read more → if you’ve modeled it. Shopify stores its own per-variant cost per item used for inventory valuation and Shopify-side margin reports. When the two drift, your reports lie.
This guide walks through pushing Assemblified’s calculated cost to Shopify in bulk.
On this page
Section titled “On this page”- When to sync (and why it matters)
- Where the action lives — bulk only, not per-BOM
- Step-by-step walkthrough with the dialog
- What gets pushed (and what doesn’t)
- Reading the results
- Common gotchas
When to sync
Section titled “When to sync”Sync after any of:
- You finish setting up a batch of new BOMs and want Shopify’s “cost per item” to reflect their actual build cost.
- A component price changed (your supplier raised the wax cost) and the BOM’s total cost moved.
- You added labourLabour costThe cost of human work, modelled as a cost factor of kind "labour" — a rate per unit of time you attach to a bill with a quantity per output unit. A work order prefills labour from its bills; an operator can override it. Read more → to a BOM — as an additional cost or via the virtual work-hour pattern — and want Shopify reports to include it.
- You ran a periodic cost review and adjusted unit costs across many materials.
The point is keeping Shopify’s cost of goods aligned with reality so your Shopify-side margin reports, valuation, and accounting don’t drift.
Where the action lives
Section titled “Where the action lives”The flow always starts with a selection on the list. Even syncing a single finished good goes through the same dialog.
Step-by-step
Section titled “Step-by-step”-
Open the finished-goods list.
-
Select the finished goods to sync. Tick each row you want, or use the header tick to select the page. You can also apply a filter or saved view first and select everything it matches — the sync works from your selection, whichever way you made it.
-
Open the bulk action bar’s Cost menu and pick Sync cost to Shopify.
-
Wait for the preview to load. Assemblified reads the current cost in Shopify for each selected variant so you can compare before and after.
-
Review the preview table. One row per finished good:
- Shopify cost — what’s in Shopify right now.
- Calculated — Assemblified’s rolled-up cost, rounded to cents.
- New cost — editable. It starts at the calculated figure; type over it to round or override.
- Change — the difference that will be written.
Rows are ticked, not removed. Assemblified pre-ticks every row it can push whose cost would actually change; untick anything you want to leave alone, or tick a row back on. A row Shopify holds no cost for is deliberately not pre-ticked — a missing cost isn’t the same as a cost of zero, so you decide whether writing one is right.
Two rows can’t be pushed at all and carry a badge saying why:
Badge What it means No Shopify link The finished good isn’t linked to a Shopify variant, so there’s nothing to write to. Not in Shopify The linked variant no longer exists in Shopify (deleted or archived), or it has no inventory item. These rows stay visible for context but can’t be ticked — not even by the header tick.
If any selected finished good carries additional costs, an Include additional costs checkbox appears above the table. It’s off by default — leave it off to push materials only, tick it to push the full cost to make (materials + labour + overhead). Ticking or unticking it recomputes every row’s New cost and clears any edits you typed by hand, because a number you typed against one basis shouldn’t be pushed as if you’d typed it against the other.
Under the table, a line tells you where you stand: “12 of 40 can be pushed.”, plus a count of rows with no Shopify link.
-
Push. The primary button names the number it will write — Push 12 costs. While it runs, the dialog stays open and can’t be dismissed, and a progress bar moves as each batch goes out. Assemblified sends up to 250 rows per batch and handles Shopify’s rate-limit throttling with retries.
-
Read the result. The dialog reports how many costs were pushed and then lists what happened to each row, naming every finished good that was skipped or failed along with Shopify’s own message.
-
Optional: download the report. Download report (.csv) saves one line per pushed row — finished good, product, variant, SKU, previous cost, new cost, change, status and message — for your records or an accounting handoff. Open it in any spreadsheet app.
-
Close with Done. A confirmation appears once the dialog closes.
What gets pushed
Section titled “What gets pushed”Just one thing per variant: the cost per item field on the variant’s inventory item.
What’s NOT pushed:
- Selling price (untouched).
- Other variant fields (compare-at price, weight, taxable, etc.).
- A bulk total or aggregate — each variant gets its own variant-specific cost.
- Anything for rows carrying a No Shopify link or Not in Shopify badge.
Reading the results
Section titled “Reading the results”Each row in the result list lands on one of three outcomes:
| Outcome | What it means |
|---|---|
| Pushed | Shopify accepted the new cost per item. |
| Skipped | The new cost already matched what Shopify holds, to the cent. Assemblified doesn’t spend a write on a no-op. |
| Failed | Shopify rejected the write — the row carries Shopify’s own message so you can see why. Fix the cause and re-run the sync over just those finished goods. |
The record comes first
Section titled “The record comes first”Every sync writes a record of what it changed — which finished goods, the old cost, the new cost, and whether additional costs were included — before the first cost reaches Shopify.
If that record can’t be written, the sync is refused and nothing is pushed at all. You’ll see “The audit record could not be written, so nothing was pushed.” Nothing in Shopify changed, so it’s safe to simply try again.
A large sync goes out in batches of up to 250, and each batch writes its own record first. If a record fails between batches, the dialog stops right there and says how many costs were pushed before it stopped — those are in Shopify, the rest are not. The result list under that message names any row Shopify refused.
Reading the math
Section titled “Reading the math”The Calculated column comes from the same calculation used everywhere else in the app:
line_cost = quantity × unit_cost × (1 + waste% / 100)total_cost = sum(direct raw material lines) + sum(sub-assembly lines, recursive)If you’ve added a labourLabour costThe cost of human work, modelled as a cost factor of kind "labour" — a rate per unit of time you attach to a bill with a quantity per output unit. A work order prefills labour from its bills; an operator can override it. Read more → material via the virtual work-hour pattern, it’s a regular line item in the rollup — its cost is included in the value pushed to Shopify.
Additional costs are not in that column, and are pushed only when you tick Include additional costs:
pushed_cost = total_cost + (additional costs, only if the checkbox is ticked)Everything is rounded to cents on its way to Shopify.
Common gotchas
Section titled “Common gotchas”- Bulk only — repeat the call-out. No detail-page button. Even syncing one finished good goes through the list → select → Cost → Sync cost to Shopify.
- One sync covers at most 2,000 finished goods. Select more than that and Assemblified refuses the whole sync up front, telling you both numbers. Narrow the selection with a filter and run it in passes.
- Manually edited Shopify costs drift back. If you set a custom cost in Shopify directly and then run this sync, Assemblified’s calculated cost wins and overwrites your manual value. To preserve a hand-set cost, either untick that row or type the value you want into New cost before pushing.
- The checkbox resets. Include additional costs starts unticked every time the dialog opens. There’s no shop-level default.
- No auto-sync. Settings has no toggle for “push automatically when cost changes”. Sync is always manual.
- Currency assumption. The push assumes the cost value is in your shop’s currency. Assemblified doesn’t convert — make sure your component unit costs are in the same currency as the shop.
- Large selections take time. Costs go out in batches of up to 250 and are rate-limited per Shopify’s quota. A sync of a couple of thousand finished goods takes minutes, not seconds — leave the dialog open until it finishes.
Where to next
Section titled “Where to next”- Track building cost — include labour in the cost before syncing.
- Check BOM margin and cost breakdown — see what’s rolling up before you sync.
- Composition — how the per-component math works.