Check the row status first
When a product didn't get a new price, the answer is almost always in the run's row status or under Needs attention on the dashboard. The plugin would rather skip a row and tell you why than guess.
The common causes, in order of likelihood
- Manually re-priced (drift). Someone changed the price by hand since the plugin last wrote it. The product is protected until you release it — the button is in Needs attention.
- Locked. "Lock price" is ticked. Cost updates, price doesn't.
- Manual sale price. A hand-entered sale price protects the whole product until removed (status "skipped — manual sale").
- Above the confirmation threshold. The change awaits your tick — automatic runs always skip such rows and list them in the report.
- Cost missing or zero. No cost, no calculation — the product is listed as skipped, never priced at zero.
- No rule matches the product (Pro with scope-only rules) — check the rule's category/supplier.
- Rate held by the sanity threshold — confirm the rate under Settings.
- Unmatched import row. The identifier matched no product — see the unmatched-rows tab; the order is product_id → supplier_sku → gtin → sku.
Trashed products are skipped by runs but keep their cost data — restore from trash and everything is intact. Permanently deleted products are cleaned out of the cost table automatically.