# Fix uncosted products (/guides/fix-uncosted-products)

## Why margins show — [#why-margins-show-]

COGS coverage is the share of revenue from items customers kept in the selected period that has a cost per item. Keel HQ requires at least **90%** coverage before it shows COGS.

Below that threshold, Overview withholds the **Contribution Margin** and **Net Margin** tiles and the margin layers. A monthly report withholds its **CM1**, **CM2**, **CM3** and **Net profit** P&L rows, plus COGS and Gross Profit in a store breakdown. Keel HQ shows **—** rather than treating missing cost as free. See [COGS Coverage](/reference/metrics#cogs-coverage) for the formula.

## Find what is uncosted [#find-what-is-uncosted]

<Steps>
<Step>

### Open the margin notice [#open-the-margin-notice]

On **Overview**, find the margin notice that says what percentage of revenue has a cost per item. Select **Fix**.

</Step>
<Step>

### Check the affected store when needed [#check-the-affected-store-when-needed]

The all-store notice opens all affected products. A notice for one storefront opens that storefront's products only.

</Step>
<Step>

### Review Top uncosted products [#review-top-uncosted-products]

The **Top uncosted products** dialog shows each product and variant, with a reason line for mystery boxes. Where Keel HQ can send you to Shopify, select the link beside that row.

It shows up to 10 variants, starting with the highest revenue in the selected period. Fix those products, then sync and reopen the dialog until coverage passes 90%.

</Step>
</Steps>

## Fix an ordinary product [#fix-an-ordinary-product]

Most rows are ordinary products with no reason line. Their Shopify **Cost per item** is blank. Select the row's link, then fill in **Cost per item** on that variant in Shopify.

## Fix each reason [#fix-each-reason]

Reason lines appear only for mystery boxes. Work from the reason on the row; Keel HQ can show more than one kind of problem at once.

| What the row says | What to do |
| --- | --- |
| A component added to this box isn't in your inventory, so it has no cost. | Add the missing box component to Inventory. |
| A component added to this box has no cost per item in Shopify. | Select the row's link, then set its cost per item in Shopify. |
| Keel HQ hasn't read which items the edit added yet; this fills in automatically. | Wait for Keel HQ to read the order edit. |
| No components were found on these orders, so the box's cost is unknown. | Wait while Keel HQ rereads the earlier edited orders. It retries orders it could not read yet. |

If the dialog says **No actionable uncosted products are available to fix in Shopify**, there is no product to update in Shopify for the selected period right now.

## Check it worked [#check-it-worked]

After changing a cost in Shopify, go to **Settings → Integrations**. An owner, admin or member can select **Sync Products** in the **Shopify** card under **Manual Sync**. Wait for **Products last synced** to update, then return to **Overview** and reopen the margin notice to confirm that coverage has recovered and the margin figures are showing again.

For an ordinary product, Keel HQ uses its current Shopify cost for the sales in the selected period after that product sync. Order-edit box components keep the cost captured at the time of sale.

## Other places that affect the list [#other-places-that-affect-the-list]

- **Settings → Goals → Data Quality** includes **Exclude zero-dollar orders from analytics**. Changing this switch changes which orders appear in the uncosted-products list.
