Skip to content

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 going into a BOM. Modeled either as a virtual material with unit cost equal to the hourly rate (per-unit, scales with order quantity) or as a per-work-order adder field (per-batch lump sum, doesn't scale). 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.

  • 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 post-sync results
  • Common gotchas

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 going into a BOM. Modeled either as a virtual material with unit cost equal to the hourly rate (per-unit, scales with order quantity) or as a per-work-order adder field (per-batch lump sum, doesn't scale). Read more → to a BOM 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.

The flow always starts with selecting BOMs from the list. Even syncing a single BOM goes through the same dialog.

  1. Open the Bill of Materials list page.

  2. Select the BOMs to sync. Tick the checkbox next to each BOM you want to sync, or check the header checkbox to select all.

  3. Open the bulk-actions menu. Click the More Actions button (visible when at least one BOM is selected) and pick Sync Cost to Shopify.

  4. Wait for the dialog to load Shopify costs. Assemblified fetches the current cost in Shopify for each selected variant so you can compare before/after.

  5. Review the preview table. Each row shows the variant with three numeric columns:

    • Current Cost (Shopify) — what’s in Shopify right now.
    • Current Cost (Raw Materials) — Assemblified’s calculated total cost (rolled up from components).
    • New Cost — editable. Defaults to the calculated cost; round it or override if needed.

    You can also remove rows from the sync entirely (e.g., “skip this one for now”) and restore them.

  6. Sync. Click Sync to Shopify. A progress indicator runs through the batches. Assemblified handles Shopify rate-limit throttling automatically with retries.

  7. Read the summary. After the sync, the dialog shows a per-row status (Updated, Skipped, or Error) plus aggregate counts.

  8. Optional: download a report. The summary screen has two download buttons:

    • Download PDF Report — a printable summary suitable for accounting handoff.
    • Download Spreadsheet — same data as a spreadsheet for further analysis.

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 to non-linked BOMs (those without a Shopify product binding are skipped).

When a row in the post-sync summary shows Skipped, Assemblified records a reason:

ReasonWhat it means
Cost unchangedThe new cost equals the current Shopify cost. Assemblified suppresses no-op writes to save Shopify API quota.
No variant IDThe BOM isn’t linked to a Shopify variant — nothing to update on Shopify’s side.
Not found in ShopifyThe variant the BOM points at no longer exists in Shopify (deleted, archived, etc.).
No inventory item IDThe variant exists but has no inventory item. Rare; usually a misconfigured product.
Removed by userYou took the row out of the sync in the preview step.

Errors are different — those mean the sync was attempted but Shopify rejected it (e.g., transient API failure). The error count is surfaced separately so you can retry just those.

The “Current Cost (Raw Materials)” 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 going into a BOM. Modeled either as a virtual material with unit cost equal to the hourly rate (per-unit, scales with order quantity) or as a per-work-order adder field (per-batch lump sum, doesn't scale). 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.

  • Bulk only — repeat the call-out. No detail-page button. Even syncing one BOM goes through the list page → select → More Actions.
  • 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. If you want to preserve a hand-set cost, edit the New Cost value in the preview table before syncing.
  • 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.
  • Audit trail exists internally. Each sync creates an internal audit record. There’s no UI table to browse history today; download the PDF or spreadsheet at sync time if you need a record.
  • Large batches take time. Each batch is up to 250 variants and is rate-limited per Shopify’s quota. If you sync 5,000 BOMs, expect minutes, not seconds.