Import Product Costs from a CSV or Excel File
Actualizado el 28 de agosto de 2026
If you have many products, filling in costs in a spreadsheet is faster than typing them one by one. Download a prefilled template, add your costs in Excel or Google Sheets, and upload the finished file.
Step 1: Download the Template#
On the Product Costs page, click the small arrow next to the Cost sync button and choose Download Template.
First choose which products to include:
| Option | Use when |
|---|---|
| All products | You want one file with every product and variant, e.g. for a full cost review. |
| Products missing costs | You only want to fill the gaps: variants that have no cost assigned yet. |
Then pick a file format. CSV opens in any spreadsheet app; Excel (XLSX) is the native Excel format. Click Generate Template. The download starts automatically when the file is ready, and you can optionally have a download link sent to your email.
Step 2: Fill In Your Costs#
Open the file in your spreadsheet app. Each row is one product variant. The identifying columns are prefilled; you fill in the cost columns. Each row needs a variant_id or a sku so Profitario knows which variant it belongs to. The template has both; if you build the file yourself, the sku column alone is enough.
| Column | Required | What to enter |
|---|---|---|
variant_id | One of | Identifies the variant. Prefilled by the template. Used first when present. |
sku | One of | Your SKU as set in Shopify. Used to match the row when variant_id is empty or unusable. |
product_title | No | Prefilled for your reference. |
variant_title | No | Prefilled for your reference. |
unit_cost | No | What one unit of this variant costs you, as a plain number, e.g. 8.40. |
handling_cost | No | Optional per-unit handling fee (pick, pack, fulfillment). Leave empty if you track none. |
currency | No | Three-letter currency code, e.g. USD or EUR. Leave as prefilled unless your costs differ. |
A filled-out file looks like this:
| variant_id | sku | product_title | variant_title | unit_cost | handling_cost | currency |
|---|---|---|---|---|---|---|
| 3100000101 | NW-PIL-SAND | Linen Throw Pillow | Sand | 8.40 | 0.60 | USD |
| 3100000103 | NW-PIL-CHAR | Linen Throw Pillow | Charcoal | 8.90 | 0.60 | USD |
| 3100000107 | NW-TWL-WHT | Organic Cotton Bath Towel | White | 6.80 | 0.00 | USD |
| 3100000105 | NW-COF-SET | Ceramic Pour-Over Coffee Set | Default | 24.50 | 1.20 | USD |
| 3100000114 | NW-MUG-SET4 | Stoneware Mug Set of 4 | Default | 16.20 | 0.90 | USD |
Enter costs per single unit, in plain numbers without currency symbols. Use a period as the decimal separator, e.g. 8.40, not $8,40.
Excel may convert long variant IDs into scientific notation, e.g. 3.1E+09, which breaks matching on upload. If you edit in Excel, format the variant_id column as Text (or as a number with 0 decimal places) before saving, and save as CSV or XLSX without changing the header row.
Step 3: Upload the File#
Back on the Product Costs page, open the same menu next to Cost sync and choose Import Costs, then click Next to reach the upload step. Drag your file into the upload area or click it to browse. CSV and XLSX files are accepted.
Profitario reads the file immediately and shows how many rows it parsed. If some rows have problems, a warning shows how many are affected; the remaining rows are still usable.
Below the row count, Match rows by decides which column identifies the variant:
| Option | Use when |
|---|---|
| Variant ID | The file is the downloaded template. Preselected whenever the file has a variant_id column. Exact and unambiguous. |
| SKU | You built the file from your own SKU list. Preselected when there is no variant_id column. Rows are matched to the variant with the same SKU in Shopify. |
Each option shows how many rows have that column filled, so you can see what a choice will skip. An option whose column is not in the file is greyed out.
If the upload is rejected, check for these causes.
- Missing required columns. The file must contain a
variant_idor askucolumn with the header spelled exactly as in the template. Keep the template's header row unchanged. - Invalid numbers.
unit_costandhandling_costmust be plain positive numbers. Remove currency symbols, thousands separators, and text like "n/a". - Invalid currency.
currencymust be a three-letter code such asUSD. Leave the cell empty to use your store currency. - Too many broken rows. If more than half the rows fail validation, the whole file is rejected. This usually means a formatting problem affecting every row, such as the wrong delimiter or a shifted header.
Step 4: Check the Preview#
The Preview step lists every row with a status, so you can see exactly what will happen before anything is saved. The note at the top sums it up, e.g. "13 of 13 rows will be applied".
| Status | Meaning |
|---|---|
| Ready | The row will be applied. |
| No cost | unit_cost is empty. The row is skipped. |
| Invalid | The row has a problem, e.g. a non-numeric value or an empty match column. Hover the badge to see the reason. |
| Not found | SKU matching only: no variant in your store has this SKU. Check the spelling; the match is exact, including upper and lower case. |
| Duplicate | The same variant appears again further down in the file. Only the last row per variant is used. |
Skipped rows never block the import: you can apply the ready rows and fix the rest in a later upload.
Step 5: Apply the Costs#
Finally, choose how the imported costs affect your orders:
| Option | What it does |
|---|---|
| New orders only | Keeps your existing cost history. The imported cost applies from now on; past orders keep their current cost. |
| All orders | Replaces the existing costs and applies the imported cost to all past orders too. Historical reports update. |
If your shop uses cost zones, the zone picker at the top of this step decides where the costs go. It is preselected to the zone tab you opened the wizard from; Default writes the shop-wide costs that every zone without its own cost inherits, a zone writes only that zone and leaves Default and the other zones unchanged. Upload one file per zone to import different costs per region.
Click Apply to Default (or Apply to the chosen zone). When the import finishes, you see how many costs were created or updated. Rows whose variant_id or sku matches nothing in your store are listed and skipped. Imported costs show a blue CSV badge in the Source column, and profit is recalculated for affected orders.
Importing replaces the current cost of each ready row's variant, including costs you entered by hand. With New orders only the previous cost is kept in the history; with All orders it is replaced entirely.
Preguntas frecuentes
¿Te ha resultado útil este artículo?

