Set Your Cost Prices

Category: Analytics & FinancialsLast updated: 9/2/2026

Overview

COGS (cost of goods sold), Net Profit and Profit Margin all depend on one thing: a cost price set per SKU. Without it, Indexync has no way to know what a sale cost you, so those figures show an em-dash instead of a number. This article covers the three ways to set a cost price, and the one rule that matters most before you start.

Applies to: All plans

The forward-only rule, first

Costs apply only to orders placed after you set a cost price. They are never applied retroactively to orders that already happened. If you set a cost price today, every order from before today still shows an em-dash for cost, profit and margin, and it will keep showing an em-dash indefinitely: Indexync does not go back and re-cost old orders.

This is deliberate, not a bug. A cost price you set today reflects what the item costs you today. Applying it backwards to an order from three months ago, when your actual cost may have been different, would silently invent a number rather than report the honest gap. Read the em-dash as "this order has no recorded cost," not as "something is broken."

Example: you set a S$7.20 cost price on a SKU on August 7. Orders for that SKU from August 8 onward show cost, profit and margin normally. Orders from August 6 and earlier still show an em-dash on every profit figure, on the Financials page and on the Product Performance table, and they always will.

The practical takeaway: set cost prices as early as possible for any SKU you want accurate profit on, and expect a gap in your historical data for anything already sold before you did.

Setting a cost price in the Product Modal

Open a product and go to the Master Product tab. Every variation row has a Cost column next to Price. Enter the amount your cost is optional, so you can leave it blank for SKUs you haven't costed yet.

Product Modal Master Product tab showing the Cost column next to Price, with cost prices entered for two variations and one left blank

Cost price is product-scoped: it lives on the Master Product tab and is the same across every marketplace listing for that SKU, it does not have a per-channel override. Bundle parent products don't get a Cost column at all: a bundle's cost comes from its component items, so set the cost on those items instead.

Setting cost prices in bulk with the Bulk Update grid

If you're updating many listings at once, the Bulk Update grid has a Cost Price column alongside your other editable fields. Type a value directly into the cell, or paste a column of values from a spreadsheet. Clearing a cell removes the cost price rather than setting it to zero, so a SKU you haven't costed always reads as genuinely missing, never as free.

Bulk Update grid showing the Cost Price column with values entered for most rows and an em-dash on two rows with no cost set

Importing costs from a spreadsheet

For a large catalog, importing a spreadsheet is usually faster than editing rows one at a time. From the Products page, open Bulk Actions and choose Import Costs (Excel/CSV). A window titled Import cost prices opens. The file needs exactly two columns: Seller SKU and Cost Price. Currency is not a column in the file: it's taken from your account's main currency in Settings > Account, so every cost you upload is priced in the same currency you've set there.

Upload your file, and Indexync shows a review table before anything is saved: rows are marked ready or flagged with an issue, and nothing is written until you click Import. Values round to 2 decimal places automatically, so a stray third decimal in your spreadsheet gets rounded rather than rejected.

A few rows can't be imported:

  • A bundle parent SKU is refused: "This is a bundle. Its cost comes from the items inside it, so set the cost on those items instead."
  • A SKU that doesn't match any product is refused, as is a SKU that matches more than one product (give each one its own SKU first).
  • A blank Seller SKU or blank Cost Price cell is skipped.

Rows with issues are skipped on import; everything else in the file goes through.

Import cost prices review table showing four ready rows and two rows with issues, including a bundle-parent rejection and a not-found SKU

Cost price and your Shopify store

Cost price is yours: it is never shown to buyers on any channel. There is one place it leaves Indexync. If a product is listed on Shopify, Indexync writes the cost into that product's Cost per item field in your Shopify admin whenever it syncs, so the figure you keep here and the one Shopify shows you stay the same. Shopify treats that field as private to you, the same as Indexync does.

Shopee, Lazada and TikTok have no equivalent field, so nothing is sent to them.

Where cost prices show up afterward

Once a SKU has a cost price and has sold since then, you'll see it reflected in:

  • The Profit and Loss statement and GMV Split card on the Financials page: COGS and Net Profit stop showing an em-dash for the orders that have a cost.
  • The Product Performance table's COGS, Net Profit and Profit Margin columns.
  • The Product Analysis tab's Payout & Fees KPI cards for that product.

If any of these still show an em-dash after you've set a cost price, check whether the orders in your current date range were placed before you set it: that's the forward-only rule at work, not a missed step.

Troubleshooting

Financials or Product Performance still shows an em-dash after you set a cost price. This is the forward-only rule at work, not a missed step. Check whether the orders in your current date range were placed before you set the cost:

  • If they were, the em-dash is correct and permanent for those orders.
  • If they were placed after, refresh the page. If it's still blank, re-check the SKU has a saved cost in the Product Modal.

A row in your cost import file was skipped. Open the review table before you click Import; every skipped row carries the reason:

  • Bundle parent SKU: set the cost on the bundle's component items instead.
  • SKU not found, or matches more than one product: give the SKU a unique match first, then re-import.
  • Blank Seller SKU or blank Cost Price: fill in the missing cell and re-import just that row.

A cost price you set doesn't seem to apply to a marketplace listing. Cost is product-scoped, not per-channel: one cost price covers every marketplace listing for that SKU. If you expected a different cost on a specific channel, there's no per-channel override to set.

FAQ

Why does my Financials page still show an em-dash after I set a cost price?

Costs are forward-only. An order placed before you set the cost never gets one, even after you set it. Check your date range: if it covers orders from before you added the cost, the em-dash is expected, not a bug.

Can I set a different cost price per marketplace for the same SKU?

No. Cost price lives on the Master Product tab and applies to every marketplace listing for that SKU. There's no per-channel override.

Does Indexync send my cost price to Shopee, Lazada or TikTok?

No. Shopee, Lazada and TikTok have no cost field, so nothing is sent to them. Shopify is the one exception: Indexync writes your cost into Shopify's Cost per item field, which stays private to you there too.

What happens if I import a spreadsheet with a bundle parent's SKU in it?

That row is skipped. The review table flags it with a message telling you to set the cost on the bundle's component items instead, since a bundle's cost is calculated from what's inside it.

Can I go back and add costs to old orders?

No. Cost prices apply only to orders placed after you set them. Indexync does not re-cost orders that already happened, even retroactively.

Related Articles

Need More Help?

Visit our Feedback page, WhatsApp us, or email hello@indexync.com with your account details and any questions about setting cost prices.