Import Product Costs from a CSV or Excel File

Aggiornato il 28 agosto 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:

OptionUse when
All productsYou want one file with every product and variant, e.g. for a full cost review.
Products missing costsYou 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.

ColumnRequiredWhat to enter
variant_idOne ofIdentifies the variant. Prefilled by the template. Used first when present.
skuOne ofYour SKU as set in Shopify. Used to match the row when variant_id is empty or unusable.
product_titleNoPrefilled for your reference.
variant_titleNoPrefilled for your reference.
unit_costNoWhat one unit of this variant costs you, as a plain number, e.g. 8.40.
handling_costNoOptional per-unit handling fee (pick, pack, fulfillment). Leave empty if you track none.
currencyNoThree-letter currency code, e.g. USD or EUR. Leave as prefilled unless your costs differ.

A filled-out file looks like this:

variant_idskuproduct_titlevariant_titleunit_costhandling_costcurrency
3100000101NW-PIL-SANDLinen Throw PillowSand8.400.60USD
3100000103NW-PIL-CHARLinen Throw PillowCharcoal8.900.60USD
3100000107NW-TWL-WHTOrganic Cotton Bath TowelWhite6.800.00USD
3100000105NW-COF-SETCeramic Pour-Over Coffee SetDefault24.501.20USD
3100000114NW-MUG-SET4Stoneware Mug Set of 4Default16.200.90USD

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:

OptionUse when
Variant IDThe file is the downloaded template. Preselected whenever the file has a variant_id column. Exact and unambiguous.
SKUYou 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_id or a sku column with the header spelled exactly as in the template. Keep the template's header row unchanged.
  • Invalid numbers. unit_cost and handling_cost must be plain positive numbers. Remove currency symbols, thousands separators, and text like "n/a".
  • Invalid currency. currency must be a three-letter code such as USD. 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".

StatusMeaning
ReadyThe row will be applied.
No costunit_cost is empty. The row is skipped.
InvalidThe row has a problem, e.g. a non-numeric value or an empty match column. Hover the badge to see the reason.
Not foundSKU matching only: no variant in your store has this SKU. Check the spelling; the match is exact, including upper and lower case.
DuplicateThe 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:

OptionWhat it does
New orders onlyKeeps your existing cost history. The imported cost applies from now on; past orders keep their current cost.
All ordersReplaces 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.

Domande frequenti

Questo articolo ti è stato utile?

Articoli correlati

Rispettiamo la tua privacy
Utilizziamo i cookie per migliorare la tua esperienza. Continuando a utilizzare il nostro sito, acconsenti al nostro utilizzo dei cookie.

Cliccando su "Accetta tutto", acconsenti al nostro utilizzo dei cookie.

Scopri di più
Import Product Costs from a CSV or Excel File - Profitario