COGS Management - Product Cost Tracking
Manage Cost of Goods Sold in MerchantFlow to calculate accurate profit margins. Add COGS individually, in bulk, sync from Shopify inventory data, and schedule future supplier price changes with effective dates.
COGS Management
Cost of Goods Sold (COGS) tracking in MerchantFlow is the foundation for calculating accurate product-level profit margins. COGS represents the direct cost of producing or purchasing each product you sell, and without it, MerchantFlow cannot determine true profitability. You can add COGS individually, in bulk using percentage or flat-rate rules, enter quantity-tiered price breaks, sync costs directly from Shopify inventory data, schedule future supplier price changes with effective dates, and review the full cost history for each SKU.
This page is the starting point for cost tracking. Five deep-dive guides cover the surrounding configuration:
- Importing COGS - CSV, BeProfit, and store cost sync
- COGS Accuracy - effective dates, source precedence, coverage, and recompute behavior
- Price Breaks - quantity-tiered supplier pricing and the Bundles measured setting
- Fulfillment Costs - the separate fulfillment line: 3PL, percentage, and per-product methods
- Country Fulfillment Rates - per-destination rates and quantity tiers
What Is COGS?
Cost of Goods Sold is the direct cost associated with each product you sell:
- Product manufacturing or wholesale cost
- Shipping from supplier to your warehouse
- Import duties and tariffs
- Packaging materials
Why it matters: Without accurate COGS, you cannot calculate true profit. A product with $1,000 revenue might only generate $100 profit if COGS and ad spend are high.
How to Access COGS Management
Navigate to Profit > COGS (/dashboard/cogs) to manage product costs. The page is a single product table, not a set of tabs.
Header actions:
- Enter costs in - a searchable currency picker that sets what every cost input on the page means
- "Analyze Margins" - opens the Gross Margin Analysis modal
- "Schedule Price Change" - creates a future-dated cost entry
- "Import" - opens the Bulk Import COGS modal (CSV, BeProfit, Shopify, WooCommerce tabs)
- "Bulk Edit COGS" - opens the Set Missing COGS modal, which carries a "Needs COGS" / "All products" view toggle
KPI row: Cost Coverage, Portfolio Gross Margin, and Missing SKUs. Use "Filter Products" to narrow the table by Cost Status (including a Missing COGS filter) and Cost Range.
Cost Settings, Right on the COGS Page
A "Cost settings" card sits at the top of the COGS page, above the KPI row, so you can see and change the settings that decide how your costs are calculated without leaving the page. It covers four controls, each with an info icon explaining the options:
- Fulfilment - your fulfilment cost method (see Fulfillment Costs)
- Country rates - whether per-country fulfilment overrides are on (see Country Fulfillment Rates)
- Bundles measured - which quantity a price-break or country-rate tier compares against: "Per order line" (default), "Per product in the order", or "Across the whole order" (see Price Breaks)
- Market costs - Off by default, meaning one cost per product whatever market the order ships to. Switched On, you can set a different cost per destination market on the same SKU (for example NZ, AU and US), and an order shipping to a market with no cost of its own falls back to the default cost. This is also what lets Margin by Region report a COGS ratio that genuinely differs by country rather than a store-wide average
Each control explains itself when it cannot be changed: the Fulfilment method is disabled with a note whenever a 3PL that covers all of your orders is connected, since carrier-reported costs always win, and Country rates is disabled unless the method is Per product with no such 3PL connected (a market-scoped 3PL such as Supply Chain Fusion only covers its own countries, so it leaves both available) - with a one-click "Switch to Per product" button when that is the only thing blocking it. Bundles measured is never gated; it applies regardless of your fulfilment configuration. A note under the card reminds you that changing any of these settings recalculates your past profit -- Market costs says so in its own words: "Turning this on or off recalculates past profit for every order that has a market cost."
Understanding COGS Coverage Metrics
The coverage report shows how well your COGS data covers your business:
- Product Coverage: Share of active variants in your catalogue that have a cost entry (e.g. 75 of 100 variants = 75%). This is the number shown in the Cost Coverage KPI tile, and it is a catalogue metric - it does not look at orders.
- Unit Coverage: Share of sold units whose order line resolved to a cost (e.g. 850 of 1,000 units = 85%)
- Revenue Coverage: Share of revenue with a known cost (e.g. $50,000 of $60,000 = 83%) - the only revenue-weighted figure of the three
Why revenue coverage matters: High-revenue products impact profitability calculations more. Focus on adding COGS to your best sellers first.
How to Add COGS
Method 1: Bulk Update (Recommended)
For multiple products at once:
- Go to Profit > COGS
- Click "Bulk Edit COGS" to open the Set Missing COGS modal (it opens on the "Needs COGS" view; switch to "All products" to change costs that are already set)
- Select products using checkboxes, or use "Select all {n} products matching this filter"
- Choose a mode: Individual Costs, % of Price, Flat Rate, or Target Margin
- Enter the value - every row in the list previews the cost it will receive before you save
- Click Apply
To change costs across a date range instead, select products in the table and use the Bulk Update COGS action described under Bulk Update for Historical Dates.
Method 2: Individual Entry
For single products:
- Find the product in the COGS table (expand it to reach its variants)
- Click the cost to open the inline editor
- Enter the cost amount
- Optionally set an effective date - leave it blank for today, or use "Schedule Price Change" for a future date
- Save
Method 3: Sync from Shopify
If you use Shopify inventory tracking:
- Go to Profit > COGS
- Click "Import", then the Shopify tab
- Choose "Fill in missing costs" (default) or "Replace all costs with my store values"
- Click "Sync from Shopify" - MerchantFlow reads each variant's "Cost per item" from the Shopify inventory item
- Review the synced costs in the table
MerchantFlow also re-runs this sync automatically after every product sync, always in fill-in mode, so your manual entries are never overwritten by it.
Requirements:
- Shopify integration connected
- Inventory tracking enabled in Shopify
- Cost per item entered in Shopify admin
Variant-Level COGS
For Shopify products with multiple variants (size, colour, material), MerchantFlow tracks COGS per variant SKU, not just at the product level. This matters whenever variants of the same product have different supplier costs.
Editing Variants Inline
In the COGS table, click any product with more than one variant to expand the row. Each variant SKU appears with its own cost, effective date, and history. Edits at the variant level only affect that SKU; the parent product row shows the cost range across its variants -- one figure when they all match, otherwise low - high -- with a "Mixed" badge when variants disagree and "Mixed currencies" when their costs are denominated in different currencies.
Note: With the per-product fulfillment method enabled, the variant editor also shows an amber "Fulfilment cost per unit" input next to the cost field. That value is not COGS - it feeds the separate fulfillment line of your P&L. See Fulfillment Costs.
Underneath each variant's cost, a "Price breaks" link opens a quantity-tiered pricing ladder for that variant - useful whenever your supplier charges less per item at higher quantities. This is available for every variant regardless of your fulfilment method. See Price Breaks for the full guide, including how bundles sold as separate line items are measured.
Bulk Updates with Variant Pricing
When you open Bulk Edit COGS on a multi-variant selection, the modal lets you:
- Enter a single cost that applies to every selected variant (% of Price, Flat Rate, or Target Margin), or
- Use Individual Costs so each variant SKU receives its own value in one save.
If you enter values for some variants but not others, the untouched variants keep their existing COGS. The save validates that no variant is left with a non-numeric or negative cost before submitting. Setting costs on a very large selection asks for confirmation first, because it writes a cost entry per product and recalculates profit from the effective date.
You can also set a cost for every variant of one product at once, using the "Set cost for all {n} variants of this product" action inside the expanded row - it applies only to that product. Tick individual variants first and the same action narrows to "Set cost for {n} selected variants".
Bulk Update for Historical Dates
Selecting products in the table exposes a "Bulk update COGS" toolbar action, which opens the Bulk Update COGS modal. It carries an Effective date field with Today / Last 7 days / Last 30 days / Year start presets, so you can apply a new cost from a date in the past (for example, when a supplier reissues an invoice covering the previous month).
Before you save, the modal tells you exactly what will happen:
- "{n} cost entries on or after {date} will be deleted for the selected items. This cannot be undone." - you must tick "I understand existing history will be replaced" to continue
- "Orders from {date} through today will be recalculated automatically.", with the count of orders that fall in the window
Future dates are rejected here - the error reads "Effective date cannot be in the future. Use Schedule Price Change for future dates."
Use backdating sparingly: it triggers a recalculation of every order from the effective date forward, which can briefly delay the next P&L refresh.
Live Products vs Drafts and Archived
By default, both the store cost sync and the coverage calculation consider live products only - drafts and archived products are excluded, so your coverage percentage reflects what your storefront is actually selling rather than your full historical catalogue.
To include them in a sync, tick "Include drafts and archived" on the Shopify or WooCommerce tab of the import modal. Its hint reads: "By default, only live products are synced. Tick this to also load COGS for drafts and archived products."
Effective Dates, History, and Upcoming Changes
MerchantFlow resolves COGS by effective date. For any order or report date, it uses the most recent cost entry whose effective date is on or before that date. This means historical P&L keeps the correct historical cost, while future-dated supplier changes activate automatically when their date arrives.
Schedule a Future Supplier Price Change
- Go to Profit > COGS
- Add or edit the COGS entry for the SKU
- Enter the new cost and choose a future effective date
- Add notes such as the supplier quote, invoice period, or contract reason
- Save
Future-dated entries appear in the Upcoming Price Changes panel until they become active.
Review Cost History for a SKU
Open Cost History for any SKU to see:
- Previous, current, and scheduled costs in one timeline
- Percentage changes between cost revisions
- Effective dates and any notes saved with each change
Bulk Update Methods Explained
Percentage and target-margin rules derive from your store-currency sale prices, so they always write costs in your store currency - the "Enter costs in" picker does not apply to them. Products with no sale price cannot be updated by these two modes.
Percentage of Price
Apply COGS as a percentage of the product's sale price.
Use when: You have consistent margins across products.
- Example: All products cost 40% of retail price
- A $100 product gets $40 COGS
- A $50 product gets $20 COGS
The percentage must be between 0 and 100.
Best for: Products from the same supplier or category with similar margin structures.
Flat Rate
Apply the same fixed cost to all selected products.
Use when: Products have similar costs regardless of price.
- Example: All t-shirts cost $15 to produce
- Both $30 and $50 t-shirts get $15 COGS
Best for: Products with standardized manufacturing costs.
Target Margin
Calculate COGS based on your desired profit margin.
Use when: You know what margin you want to achieve.
- Example: Target 60% margin on all luxury items
- A $100 product needs $40 COGS (100 x (1 - 0.60) = 40)
Formula: COGS = Price x (1 - Margin)
The target margin must be between 0 and 99 percent.
Best for: Premium products where you have strict margin requirements.
How Profit Is Calculated with COGS
Once COGS is added, MerchantFlow calculates:
Gross Profit:
Gross Profit = Net Revenue - COGSGross Margin:
Gross Margin % = (Gross Profit / Net Revenue) x 100Ad spend is deducted later in the waterfall, at the contribution margin line, together with fulfillment and payment fees - see the P&L Overview for the full calculation.
Example:
- Product sells for $100 (net revenue after refunds)
- COGS is $40
- Gross profit = $100 - $40 = $60
- Gross margin = ($60 / $100) x 100 = 60%
- With $15 ad spend, contribution margin = $60 - $15 = $45
Best Practices for COGS Management
1. Start with High-Revenue Products
Focus COGS entry on your top sellers first. These have the biggest impact on profit calculations. 20% of products typically generate 80% of revenue -- get accurate margins on these first.
2. Use Bulk Operations
Save time by grouping products with similar cost structures:
- All products from Supplier A: 35% percentage rule
- All t-shirts: $12 flat rate
- All premium items: 65% target margin
3. Add Reasons to Every Entry
Always add a reason when creating or updating COGS for an audit trail:
- "Q4 2025 supplier pricing"
- "Updated from November invoice"
- "Estimated cost for new product"
4. Review Coverage Regularly
Check your coverage metrics monthly. Targets:
- Revenue coverage: above 90%
- Unit coverage: above 80%
- Product coverage: above 75%
5. Sync from Shopify Monthly
If using Shopify inventory tracking, sync regularly to catch supplier price changes.
Troubleshooting COGS Issues
Coverage shows 0% despite entries
Cause: No order data synced yet. Solution: Wait for the first order sync, or trigger a manual sync.
Bulk update does not work
Cause: Selected products are missing prices. Solution: Ensure all products have valid sale prices in your e-commerce platform.
Shopify sync returns "0 costs synced"
Cause: Shopify inventory items do not have costs entered. Solution:
- Go to Shopify admin
- Products > [Product Name] > Variants
- Click "Edit" on variant
- Enter "Cost per item"
- Try sync again
Costs show a USD code beside them, and COGS looks too high, on a non-USD store
Cause: The entries were saved before the "Enter costs in" picker existed (August 2026) and carry a USD label even though you typed the numbers in your store currency. The COGS page shows the code beside any cost whose currency differs from your store currency, and profit converts such costs at each order's daily exchange rate, which inflates COGS.
Solution: Contact support. The entries are relabelled to the currency you entered them in - the numbers are not changed - and profit is recalculated. See the currency rules in COGS Accuracy. Costs you save now always carry the currency shown in the picker, so this does not recur.
Frequently Asked Questions
Do I need COGS for every product?
Not necessarily. Focus on products that drive your revenue. MerchantFlow's coverage metrics help you prioritize which products to add costs for first.
What if I do not know exact costs?
Use estimated costs as a starting point. Industry averages (40% for apparel, 50% for electronics), percentage-of-wholesale rules, or competitor research all provide reasonable estimates. You can refine later.
Can I import COGS via CSV?
Yes. Go to Profit > COGS, click "Import", and use the CSV tab - the file needs a sku (or variant_id) column plus a cost column. MerchantFlow also supports BeProfit exports (matched by Shopify product ID, falling back to SKU) and one-click cost sync from Shopify or WooCommerce. See Importing COGS for the full column reference and import options.
Does COGS include shipping to customers?
No. COGS is the cost to acquire or produce the product, including freight from your supplier to your warehouse. Shipping sold orders to customers is a fulfillment cost - its own line in the P&L, configured separately. See Fulfillment Costs.
How often should I update COGS?
Update when supplier prices change, you switch suppliers, import duties change, or you renegotiate wholesale terms. Most businesses review COGS quarterly.
What if my Shopify sync does not bring any costs?
Verify that inventory tracking is enabled in Shopify, cost per item is entered in Shopify admin (Products > Inventory tab), and your MerchantFlow integration has proper permissions.
Can I schedule supplier price changes ahead of time?
Yes. Set a future effective date when adding or editing a COGS entry. MerchantFlow will keep showing the current active cost until that date, then switch to the new value automatically.
Will editing COGS rewrite historical profit?
No. MerchantFlow uses the cost that was active on the order date, so future changes affect future orders while historical reports keep the earlier cost history. The exception is a past Effective date in the Bulk Update COGS modal, which is designed to rewrite history when a supplier invoice covers a previous period. For the full resolution rules - and why pages can briefly disagree while profit recalculates - see COGS Accuracy.
How do I set different costs for size or colour variants?
Open the product in the COGS table and expand the row. Each variant SKU is listed with its own cost, effective date, and history. You can edit variants individually or use Bulk Edit COGS in Individual Costs mode to set a different cost for every variant in one save.
Why did some of my older COGS entries disappear?
The Bulk Update COGS modal deletes every existing cost entry dated on or after the effective date you pick, for the products you selected - it tells you the exact count and asks you to confirm before saving. That is the only routine flow that removes history; ordinary edits and imports add a new dated entry instead.
Related Guides
- Importing COGS - CSV, BeProfit, and store cost sync
- COGS Accuracy - effective dates, precedence, coverage, and recompute
- Price Breaks - quantity-tiered supplier pricing
- Fulfillment Costs - 3PL, percentage, and per-product methods
- Country Fulfillment Rates - per-destination rates and quantity tiers
- P&L Overview - complete profit tracking
- Ad Spend Tracking - track marketing costs
- Profit Margins - analyze profitability
- Margin by Region - country-level margin and POAS
- Shopify Integration - connect your store
- Expense Tracking - track operating expenses
Last updated: September 23, 2026
Last updated on
Daily P&L Breakdown - Day-by-Day Profit Table
See every P&L line item day by day in MerchantFlow. Filter by revenue, margin, and COGS coverage, expand any day for detail, and export the table for accounting or investor reporting.
Importing COGS - CSV, BeProfit, and Store Cost Sync
Bulk import product costs into MerchantFlow with CSV files, BeProfit exports, and one-click Shopify or WooCommerce cost sync.