Where costs come from
When Balanik imports an order, it reads the cost recorded on each order line. It checks these sources in this order and uses the first one it finds:
- SkyVerge Cost of Goods
- WPFactory Cost of Goods
- WooCommerce’s built-in cost field
A cost of zero in WooCommerce’s built-in field counts as missing, because it can’t tell an unset cost from a free product. Balanik never copies the cost from your current product settings onto old orders.
Already use one of these plugins? You may not need to do anything. Check the Products tab for products marked Cost missing on some orders.
Enter costs in Balanik
Use this when no cost plugin recorded a cost, or when older orders were placed before you started recording one.
Open Balanik and go to the Products tab.
Find the Add missing product costs card. It lists products in the selected period that have orders without a recorded cost. If nothing is missing, open Enter product costs in Balanik instead.
Type the Unit cost per unit, excluding tax.
Set From to the first day the cost applies. It can’t be later than today.
Press Save. The cost fills matching order lines from that date onward.
The card shows up to 30 products at a time. Search the product list to find others. Costs you saved appear under Product costs set in Balanik.
To record a price change from your supplier, save a new cost with a later From date. Orders before that date keep the earlier cost. Saving a cost with the same date replaces the old one.
Import costs from a CSV file
To add many costs at once, open Import product costs from a CSV at the bottom of the Products tab. Choose the file, set Costs apply from, and press Import costs.
The file needs a header row and one row per product or variation:
skuorproduct_idto identify the product. A variation’s ID or SKU works too.cost: the cost per unit, excluding tax.from(optional): the first day the cost applies, as YYYY-MM-DD. Rows without a date use Costs apply from.
| sku | cost | from |
|---|---|---|
| LAMP-01 | 12.50 | 2026-01-01 |
| LAMP-02 | 14.00 | 2026-01-01 |
| SLICER-PRO | 31.75 |
Balanik also accepts these header names:
- For the product:
idorvariation_id. - For the cost:
unit_cost,cogsorpurchase_price. - For the date:
dateorvalid_from.
Write costs as plain numbers with a decimal point, such as 12.50, and no thousands separator. A file can be up to 1 MB and 5,000 rows. After the import, Balanik lists any SKUs it couldn’t find.
How Balanik uses these costs
- Recorded costs always win. A cost saved by a cost plugin is never overwritten.
- Only empty lines are filled. Your Balanik cost applies to order lines with no recorded cost, from its date onward. Older orders pick it up without a new import.
- No back-filling. An order placed before your earliest date keeps no cost. Set the date early enough to cover the orders you need.
- Variations first. A cost on a variation is used before a cost on its parent product.
- Missing costs are flagged. Lines without a cost are left out of profit, never counted as free. The Overview shows an Incomplete chip and a note with the number of lines.
To check where a cost came from, open the Orders tab and press Explain profit on an order. The Cost source column shows SkyVerge, WPFactory, WooCommerce or Balanik product cost.