Pricing & Margin
Pricing & Margin is the third tab in the Orders & Credits area. It does in bulk what the purchase order detail page does one product at a time: pick a committed purchase order, review each line's landed cost, choose a target landed margin, and let Alfred back-calculate the list price for every product — then publish the new list price and unit cost (COGS) straight to Shopify in a single action. Everything is measured against landed cost — unit cost plus the PO's allocated shipping, duties, fees, and credits — so the margins you set are the margins you actually earn. Prices and costs write to your live store's base price, protected by a raise-only default, a re-check against the current Shopify value at publish time, a confirmation step, and a full audit trail you can roll back with one click. Purchase orders in a foreign currency are converted to your store currency at a near-live, editable exchange rate before anything is priced or published.
What Publishing Writes to Shopify
List price
Proposed price → Shopify
Publishes only the proposed list price to each variant's base price. Your recorded unit cost (COGS) is left untouched. The lowest-risk option, and a good first pass to eyeball the new prices in Shopify.
Unit cost (COGS)
Landed cost → Shopify
Publishes only the landed cost per unit to each variant's Cost per item, so Shopify's own profit and margin reports reflect your true landed cost. List prices stay exactly as they are.
Both price and cost
The full update
Writes both the proposed list price and the landed unit cost in one atomic call per product. Because it changes the most, it asks you to type PUBLISH to confirm before it runs.
Safe by default
Guardrails on every publish
Price decreases are excluded unless you explicitly allow them; each line is re-read from Shopify at publish and skipped if it changed since you loaded; each product's variants are written atomically; and a complete before/after snapshot is saved so the whole batch can be reverted.
Key Concepts
Landed Cost & How Margin Is Measured
Every number on this page is built on landed cost — a product's unit cost plus its per-unit share of the purchase order's shipping, duties, other fees, and any discounts or credits. Margin is measured against that landed cost, exactly the way the PO detail page's Margin column does, so what you set here is what you'll actually earn: margin % = (list price − landed cost) ÷ list price. Set a target and Alfred inverts the same formula to find the price that hits it: required price = landed cost ÷ (1 − target%). Which costs count toward landed cost is controlled by the Configure costs toggles on the purchase order itself; deselect one there and it drops out of the landed cost here automatically. Lines whose landed cost is unknown or zero can't be priced, and are surfaced as skipped rather than mispriced.
Target Margin ⇄ Proposed Price
The Target margin and Proposed price columns are two views of the same decision, and both are editable. Type a target margin and Alfred fills in the proposed price that achieves it; type a proposed price and the target margin re-derives from it — the proposed price is always the source of truth for what will publish. Set a target margin and a rounding rule at the top of the page, then Apply it to every selected line at once. A price you type by hand is flagged with a small dot and protected: a bulk Apply skips your hand-edited rows unless you tick 'Include hand-edited rows'. The target margin defaults to 50%, and you can change it any time.
Currency-Aware Rounding
Prices generated from a target margin can be rounded to a rule you choose, and the options adapt to your store's currency. For a two-decimal currency (USD, EUR, GBP…) you get Exact (to the cent), Up to .99, Up to .95, Up to .50, and Up to whole. For a zero-decimal currency like JPY or KRW — where charm endings such as .99 are meaningless — you instead get Exact and round-up-to-nearest 10 / 100 / 1,000. Rounding only ever applies to prices Alfred generates; a price you type by hand is used exactly as entered. And it always rounds up, never down, so you never quietly undershoot the margin you asked for.
Foreign-Currency Conversion
When a purchase order is priced in a different currency than your Shopify store, Alfred converts it. Shopify keeps one base price and one cost per product, both in your store's currency, so a foreign-currency PO can't be published as-is. A conversion panel appears with a near-live exchange rate (fetched for you and shown with its date) that you can override with your own; the entire table — costs, margins, and proposed prices — then reads in your store currency, and publishing writes store-currency values. Costs are converted at exactly the rate you see, so the COGS written equals the COGS shown, and the rate is recorded on the publish for the audit trail. If the currencies differ and no valid rate is in place, those lines are held back rather than published at the wrong value.
What Publishes, and the Guardrails
Publishing writes to your live store, so it's deliberate and reversible. You choose what to write — list price only, unit cost (COGS) only, or both (both asks you to type PUBLISH). Only lines linked to a Shopify product and variant can publish; custom or unmatched PO lines are shown as skipped. Alfred writes the base price, not Market-specific prices. Four guardrails run on every publish: price decreases are excluded unless you tick 'Allow price decreases'; each line is re-read from Shopify at publish and skipped if its price or cost changed since you loaded the page (so you never clobber an edit made elsewhere); each product's variants are written in one atomic call, so a rejection fails that product cleanly rather than half-applying; and a complete before/after snapshot is saved so the batch can be rolled back. Afterward you get a summary — how many list prices and unit costs updated, and any failures — plus a result banner.
The Line Table: Filter, Sort, Customize, Select
The line table is a full working surface. Search products by name, SKU, or variant, and filter by vendor, product type, collection, or tag to narrow to just the lines you want — every bulk action (select-all, Apply, Publish) then applies to the filtered set, and a 'showing X of Y' note keeps it honest. Show, hide, and reorder columns from the Columns button; four per-line cost columns (allocated shipping, duties, other fees, and discounts) are available and hidden by default. Sort by any column. Rows start unselected — tick the ones you want, or use the header checkbox to select every linked line. Each line shows its unit cost, landed cost, current Shopify price, current gross and landed margins, and its State (ready, would-decrease, no change, or skipped).
Publish History & One-Click Rollback
Every publish is recorded. Open Publish history to see each event with its date and time, who ran it, and how many lines were published, failed, or skipped. Click an event to drill into a per-line before → after view — the exact old and new list price and unit cost for every product, the result of each line, and the exchange rate if the PO was converted. Made a mistake? Revert the event and Alfred restores each product's previous list price and unit cost from the snapshot, records the revert as its own event, and marks the original reverted. Reverts are all-or-nothing per line — a line is only restored if every side that was published has a saved prior value — so you never end up with a half-rolled-back product.
Costs Come From the Purchase Order
Pricing & Margin doesn't set costs — it reads them from the purchase order. The four additional cost buckets (shipping, duties, other fees, and discounts & credits), their allocation methods, and which of them count toward landed cost all live on the PO and are edited there via Configure costs on the Landed Cost card. Whatever you configure and save on the PO flows straight through to Pricing & Margin, so the landed cost you price against here always matches the PO. To change a cost or toggle one in or out of landed cost, open the PO (use the 'PO detail page' link under the costs, or the View PO button), make the change, and save — it's reflected here on the next load.
How to Use
1. Open Pricing & Margin and pick a purchase order
In Alfred, go to Orders & Credits and open the Pricing & Margin tab, then choose a purchase order from the picker at the top. Only committed orders appear — submitted through received (drafts and cancelled POs are excluded), because received orders carry the final landed costs that make the best basis to price against. You can also jump here straight from a PO: on the purchase order's Landed Cost card, click Bulk manage to open Pricing & Margin with that PO already selected and loaded.
2. Review the landed costs
The header shows the PO's four cost buckets — discounts & credits, shipping, duties & fees, and other fees — each with its allocation method and whether it counts toward landed cost. The table lists every line with its unit cost, landed cost per unit, current Shopify price, and current gross and landed margins. If a cost looks wrong, or you want to include or exclude one, open the PO detail page (the link under the costs, or View PO), fix it under Configure costs, and save — it flows back here.
3. If the PO is in another currency, set the rate
When the PO currency differs from your store currency, a conversion panel appears with a near-live exchange rate. Check the rate and its date, or type your own to override it. The whole table then reads in your store currency, and publishing writes store-currency values. A converted PO can't publish until a valid rate is in place.
4. Set a target margin and apply it
Enter a target landed margin at the top (it defaults to 50%) and pick a rounding rule, then click Apply to the selected lines to fill in a proposed price for every selected linked line. Watch the Target margin and Proposed price columns move together. Hand-edited rows are protected from Apply — tick 'Include hand-edited rows' if you want the target to overwrite those too.
5. Fine-tune individual prices
Type directly into any line's Target margin or Proposed price to adjust it — the other column re-derives, and the row is flagged as hand-edited so future bulk Applies leave it alone. Use search, filters, and column sorting to focus on specific products, and show the allocated-cost columns from Columns if you want the shipping / duties / fees / discount breakdown per unit.
6. Publish to Shopify
Select the lines to publish (rows start unselected; use the header checkbox to take all linked lines), then click Publish. Choose what to write — Proposed Price to List Price, Landed Cost to Unit Cost (COGS), or both — and, if you need them, tick Allow price decreases. Publishing both asks you to type PUBLISH to confirm. Alfred re-checks each line against Shopify, writes the changes, and shows a summary of how many list prices and unit costs were updated, plus any failures.
7. Review results and roll back if needed
A toast and a result banner summarize what published. Open Publish history to see the event, click into it for the per-line before → after detail, and — if something's off — Revert the event to restore every product's previous price and cost from the snapshot. The revert is recorded as its own event, so the history stays a complete record.
Tips & Best Practices
- ✓Margin here is landed margin, not markup on unit cost — it's measured against the fully-loaded landed cost, so a 50% target already accounts for shipping, duties, and fees.
- ✓Publish List price first as a dry run: it's the lowest-risk action, and it lets you eyeball the new prices in Shopify before you also touch costs.
- ✓Leave 'Allow price decreases' off unless you mean it — it's the guardrail that stops a bad target from cutting every price.
- ✓If a line won't publish, check its State: custom or unlinked lines can't publish, a decrease is excluded unless you allow it, and 'changed since load' means the value moved in Shopify — reload to pick up the new one.
- ✓Hand-edited prices are protected from bulk Apply — the small dot marks them. Use 'Include hand-edited rows' to deliberately overwrite them with a fresh target.
- ✓To include or exclude a cost from landed cost for the whole PO, do it once on the purchase order under Configure costs; it applies everywhere, Pricing & Margin included.
- ✓Revert restores the values captured at publish time, not the current ones — so it puts back exactly what was there before you published.