The Catalog (/products/catalog) is where you set per-SKU cost, stock, and tracking settings. Ecom Forward auto-syncs your Shopify products nightly, you don't manage the catalog itself. You just layer operational metadata on top: COGS, low-stock thresholds, notes, and flags.
The table
- Product, title, vendor, product type.
- Inventory, live from Shopify.
- Units 30d / 60d, velocity indicators.
- Last sold, date of last order containing this SKU (or “None” in gray).
- Avg sell 30d, computed from revenue/units in the last 30 days.
- COGS tier-1, your per-unit cost. Click to edit.
- Margin %, live, computed from avg sell price and tier-1 COGS.
- Days left, estimated stock runway.
- D/S, dropshipper flag (affects stock alerts).
- Low stock, your threshold.
- Notes, free text, team-visible.
Setting COGS
COGS is what lets the P&L compute real profit. Without it, your gross profit line is revenue-only.
- Click a product's COGS tier-1 cell.
- Type your unit cost in your COGS currency (defaults to store currency).
- Press Enter to commit. The margin column updates immediately.
For products with many SKUs, use the Quick filter: Needs COGS to find every product still without a value.
Tiered COGS for bundles and multi-unit SKUs
Some products cost less per unit when bought in bulk, either because you buy COGS in volume or because the product is a bundle. Open the product from the Catalog and set:
- Tier 1, default unit cost.
- Tier 2, kicks in when the customer orders N+ units.
- Tier 3, kicks in for even larger orders.
- Units per order, for bundle products where one order = N SKU units.
When COGS is recomputed (overnight or on-demand), Ecom Forward picks the right tier per order based on units sold.
Pulling cost straight from Shopify
If you already keep a Cost per item on your Shopify variants, you don't have to retype it. In single-store view, turn on Use cost from Shopify at the top of the Catalog. Each sync then fills any blank cost from Shopify, and it never overwrites a cost you typed yourself. A typed cost always wins.
Cost per variant (sizes / colours)
When sizes or colours cost you different amounts, a single product-level cost isn't accurate. Click Set per variant under the COGS cell (or on the product page) and type a cost for each variant. From then on, COGS uses the exact per-variant cost for the units actually sold.
Note
Your transaction fee, measured from your payouts
Payment processing is a real cost, and a store that never sets a fee % has it counted as zero — which makes profit read higher than it is. You don't have to work the number out yourself. If you use Shopify Payments, open Stores → your store → Settings → Reporting & business and, under the transaction fee field, you'll see “Measured from your Shopify payouts: 2.34%” with a one-click Use 2.34% instead.
It's worked out from your actual payouts over roughly the last 90 days — the fees Shopify really took, divided by what it really processed — so it reflects your plan, your card mix and your country rather than a rule of thumb.
Note
Two honest limits. It only covers Shopify Payments— PayPal, Mollie and Klarna fees never reach Shopify at all, so if you use them, fold their cost into the % yourself. And if no measurement appears, it usually means payouts haven't synced yet, or your store doesn't use Shopify Payments; we show nothing rather than a guess.
Heads up
Tracking shipping separately from cost
By default, your fulfilment shipping cost lives inside COGS. If you'd rather see it on its own line, flip Track shipping separatelyin Store Settings. Ecom Forward then works out a per-day shipping figure and shows it as its own line on Daily Profit and the P&L. Because we already know what the customer paid for shipping, free-shipping-over-X nets out automatically.
Right underneath that switch you choose how your shipping is charged, because carriers bill in two different ways and using the wrong one distorts your profit:
- Per product sold — a Shippingcolumn appears in the Catalog where you set a cost per product, exactly like COGS. Each day becomes units sold × that cost. Right when heavier items genuinely cost more to send.
- A flat rate per shipment— you enter one cost per parcel and each day becomes orders × that rate. Right when your carrier charges the same for a parcel no matter what's in it.
Note
Whichever you pick, click ↻ Recompute COGS on Daily Profit afterwards to apply it to past days, and you can still override any single day by typing over its Shipping cell.
One honest limit on the flat rate: we count one shipment per order, because that's what Shopify tells us. If you routinely split one order across several parcels, or combine several orders into one, the figure reads slightly low or high — the per-day override is there for the days that matter.
Break-even ROAS target
Set a break-even ROAS target per product (a column in the Catalog), the ROAS you need on that product's ads to come out ahead. Ford reads it: if a product's real break-even (from its margin) is higher than the target you set, he'll flag that you're likely losing money on its ads unless you raise the price or cut the cost. See unit economics for what break-even ROAS means.
Inventory and stock alerts
Inventory levels auto-sync nightly from Shopify. Set a low-stock threshold per product so the restock signal fires at the right time for your business.
- Days-of-stock column estimates how long current inventory will last at the 30-day velocity.
- Restock signal fires at <14 days (watchout) and <7 days (alert).
- No-stock-tracking flag, for digital products or infinite-inventory items that shouldn't trigger stock alerts.
- Dropshipper (D/S) flag, same idea: drop-shipped SKUs don't have local stock, so stock alerts are disabled.
Bulk editing
For stores with hundreds of SKUs, bulk editing is essential.
- Check the box on each row you want to edit (or the header box to select all filtered rows).
- A sticky bulk action bar appears at the bottom.
- Apply: Tier-1 COGS, low-stock threshold, D/S toggle, or notes.
- Click Apply to N products.
Tip
Quick filters
- All
- Needs COGS, products without tier-1 COGS set.
- Dead stock, products with inventory but zero 60-day sales.
- Low margin, avg sell price vs COGS margin <10%.
- New in Shopify, products created in the last 7 days.
- Dropshipper, flagged as D/S.
After editing COGS historically
If you update a product's COGS and want past Performance rows to reflect the new value, click ⟳ Recompute COGS on the Performance page header. This rebuilds every row where COGS is still auto-derived.
Note