A Studio Product block linked to your WooCommerce store can mint its own single-use coupon per recipient, scoped to that one product — no Purchase history segment or project-level Discount offer required.
MailInApp already has a project-level Discount offer for targeting a whole matched audience with one coupon. This is the narrower tool: a discount that lives on the Product block itself, tied to whichever real product you imported from your WooCommerce catalog, minted automatically for every recipient of that email, and applied straight on that product's own page.
Step 1 — Connect WooCommerce
On your own WordPress site, go to WooCommerce → Settings → Advanced → REST API and create a key with Read access. Back in MailInApp's Settings → Integrations, paste your store URL and that key to connect. MailInApp only ever creates coupons through your store's own Coupons REST resource — it never asks for write access beyond that.
Step 2 — Import the product into a Product block
In the Studio, add a Product block and open its Import from store search. Pick the real item from your synced WooCommerce catalog rather than typing a URL by hand. Importing does three things at once: fills in name, description, image and price; switches Checkout to Link to external store checkout; and fills in External product page URL from the product's own page URL. All three matter for the next step — a hand-typed URL has no real store product id behind it, so the discount toggle stays hidden until you import.
Step 3 — Turn on Per-product discount
With a real imported product on the block, a Per-product discount toggle appears in the Inspector. Turn it on and set:
- Discount type — percentage or fixed amount off.
- Discount value — the actual number.
- Expires (days after send) — how long a minted coupon stays valid.
This is independent of any project-level Discount offer the project might also have — a send can carry both, neither, or one without the other.
Step 4 — Send, and MailInApp mints a coupon scoped to just this product
Right before each recipient's email renders, MailInApp creates a coupon through your store's Coupons REST API: single-use (usage_limit: 1), restricted to that recipient's own email address (email_restrictions), and restricted to just this product via WooCommerce's product_ids field rather than your whole cart. The block's own Buy now link is rewritten automatically to carry it — nothing to template with a merge tag by hand, since a block id isn't something you can type into a heading.
Step 5 — The shopper lands back on the exact product, coupon already applied
The link applies the coupon as a query parameter aimed straight at this product's own page — not the generic /cart/ URL the project-level offer's own link uses. That's deliberate: the email showed them one specific item, so the discounted link should land them on that same item, not make them re-find it. As with the project-level offer, self-application isn't guaranteed on every custom checkout theme — worst case, the shopper enters the code by hand, and the link is never dead either way.
Attribution works the same as any other store click
The link still carries the same utm_campaign your project's other outbound links do. An order placed with the coupon attributes back to this send through WooCommerce's own built-in Order Attribution metadata (on by default since WooCommerce 8.5), the same way any other WooCommerce click-through order does — see tracking Shopify orders, checkouts & revenue for how that attribution actually works end to end (WooCommerce works identically once connected).
If minting fails for a recipient
Their email still sends. If the live API call hiccups or a token needs reconnecting, that recipient's Buy now just falls back to the block's plain, undiscounted product link — never a broken link, and never a blocked send.
How this differs from the project-level Discount offer
The Send page's Discount offer targets a whole matched audience — often paired with a Purchase history segment — with one coupon scope picked from a dropdown (store-wide or one product). This feature skips all of that: it's scoped to whatever product the block itself carries, needs no audience filter, and mints for anyone who receives the email. Each keeps its own cooldown marker too, so a per-product discount on one item never blocks another item's discount, or the project-level offer, for the same contact. See Win back past buyers with purchase-history segments & discount codes for the audience-targeted version of this pattern.
Getting started
Connect WooCommerce, import one real product into a Product block, turn on a modest Per-product discount, and send it to a small list first to confirm the redemption link lands where you expect. See Product block, WooCommerce integration, and Store-native discounts for the full reference.