Campaigns

Customize the Post-Purchase offer page

A complete reference for the Post-Purchase customizer — timer, layout, titles, buttons, and labels, with defaults and edit recipes.

The Post-Purchase customizer controls everything a shopper sees on the offer page that appears right after payment but before the order-confirmation screen. This page is a full reference for every setting in that customizer — what each one does, its exact default value, and the edge cases that catch merchants out. To set up the offer itself (which products, which discount, which conditions), start with the Post-Purchase setup guide. For how offers are ranked and how the downsell fallback fires, see Post-Purchase advanced.

The offer page renders inside an isolated frame (an iframe) that Shopify hosts. Your theme's CSS cannot reach into it, so the only way to change how the page looks is through the settings on this page. That isolation is also why your styling stays consistent no matter which theme you run.

How the customizer is organized

The customizer groups its settings into four areas: Titles & descriptions, Buttons & labels, Layout, and Countdown timer. Every field below maps to one setting on the offer. Defaults are the values a brand-new Post-Purchase campaign ships with, so if you never open the customizer you get exactly the behavior described in the "Default" column.

There are two parallel sets of title and description fields: one pair for the main offer (the first thing a shopper sees) and one pair for the downsell (the fallback shown after a shopper skips the main offer). Everything else — buttons, labels, layout, and the timer — is shared across both views.

Titles & descriptions

These fields control the headline and supporting copy at the top of the offer. The title and description fields are rich-text — you can apply formatting (size, alignment, bold) and they support template tokens (see Template tokens reference).

SettingDefaultWhat it does
TitleUpgrade Your Order! (24px, centered)The main offer's headline. Rich text; supports {{product_title}}.
Downsell titleSave More on Your Order! (24px, centered)The headline shown on the downsell view after a shopper skips the main offer. Rich text; supports {{product_title}}.
DescriptionAdd this favorite to round off your selection. (16px, centered)Supporting copy under the main title. Rich text; supports {{product_title}}.
Downsell descriptionGet this special deal to complement your order at a discounted price. (16px, centered)Supporting copy for the downsell view. Rich text; supports {{product_title}}.
Title spacer5The amount of vertical space below the title block.
Description spacer5The amount of vertical space below the description block.

Use {{product_title}} in any of these fields to drop the offered product's name straight into your copy — for example a title of Add {{product_title}} for 20% off personalizes the headline to whatever variant the shopper is being offered.

Buttons & labels

These settings control the buy button, the skip action, and every small piece of label text on a product card. Button text fields take plain text; there is one label, the discounted-price label, that supports a token.

Buy button

SettingDefaultWhat it does
Buy button textBuyThe label on the button that accepts the offer.
Added button textAdded!The label shown briefly after the item is successfully added to the order.
Adding button textLoading...The label shown while the add is being processed.
Include price on buttonfalseWhen on, appends the offer price to the buy button (for example Buy — $24.00). Off by default.

Skip action

SettingDefaultWhat it does
Skip button textSkipThe label on the decline / skip control.
Skip button positionbottomWhere the skip control sits — top or bottom of the offer. Default bottom.
Skip button plainfalseWhen on, renders the skip control as plain text instead of a full button. Off by default.

Inline labels

SettingDefaultWhat it does
OR divider labelORThe text in the divider between the buy and skip actions.
Quantity input labelQuantityThe label above the quantity selector on a product card.
Options select labelOptionsThe label above the variant/options selector on a product card.
Discounted price label(Save {{ percentage }})The text shown next to a discounted price. Supports the {{ percentage }} token, which is replaced with the actual discount percentage.
Free product labelFreeThe text shown in place of a price when the offered product is free.
Free shipping labelShippingThe text shown by the free-shipping indicator (see Layout).

The {{ percentage }} token in the discounted price label is the only token that label fields accept. With the default (Save {{ percentage }}), a 20% offer renders as (Save 20%). Keep the token in your custom text, or the saving figure disappears.

Layout

Layout settings decide how product cards are arranged and how much of each card is shown. The arrangement automatically adapts to how many products the offer contains.

SettingDefaultWhat it does
Card layouthorizontalOrientation of a single product card — image and details side by side (horizontal) or stacked (vertical).
Products per row2How many product cards sit in a row when the offer has more than one product.
Show thumbnailstrueWhether product images appear on the cards. On by default.
Show all thumbnailsfalseWhen on, shows the full image gallery for a product rather than a single thumbnail. Off by default.
Hide quantity inputfalseWhen on, removes the quantity selector so the shopper can only take the offered quantity. Off by default.
Include free shippingfalseWhen on, displays a free-shipping indicator on the offer. Off by default.

Single product vs. multiple products

The offer page picks its layout automatically based on product count:

  • One product uses a dedicated single-product layout — a single large card. Products per row has no effect here.
  • Multiple products use a grid/list controlled by Products per row. With the default of 2, cards line up two across; raise it to fit more per row, lower it to 1 to stack them.

Products per row only applies when the offer actually contains more than one product. If you set it expecting a tighter grid but your offer only has a single product, you'll see no change — the single-product layout ignores it.

Free shipping on multi-product offers

When Include free shipping is on, a free-shipping indicator appears using the Free shipping label (default Shipping). On multi-product layouts this indicator is shown as part of the offer's shipping treatment for the bundle of products, so shoppers see the free-shipping benefit once for the offer rather than repeated on every card.

Countdown timer

The timer turns the offer into a time-limited deal. It is off by default — you must enable it. When on, it shows a banner counting down, and it changes the offer's behavior when it expires (see the edge case below).

SettingDefaultWhat it does
Enable timerfalseMaster switch for the countdown. Off by default.
Timer duration5Countdown length in minutes. The default is a 5-minute window.
Hide timer bannerfalseWhen on, hides the visible banner while the timer still runs underneath. Off by default.
Timer textOffer ends in {{timer}} (18px, centered)Rich-text banner copy. Use the {{timer}} token where the live countdown should appear.
Timer colorwarningBanner color theme — warning, info, success, or critical. Default warning.

How the timer behaves at runtime

Once enabled, the timer behaves like this:

  • Timer duration is set in minutes, but the banner counts down in seconds, displayed as MM:SS (so a duration of 5 starts at 05:00).
  • The current countdown value is persisted as the page runs, so it keeps ticking down consistently across the whole offer page rather than resetting.
  • The {{timer}} token in your timer text is replaced live with the current MM:SS value on every tick.

When the timer reaches 00:00, the offer page automatically closes (finishes) and the buy buttons are disabled. A shopper who runs out the clock can no longer accept the offer — the page moves on to the order-confirmation screen. Because the page closes itself at zero, set a duration generous enough for a shopper to read the offer, weigh it, and act. A too-short timer (for example one minute) can slam the window shut before a hesitant shopper finishes deciding. The default 5 minutes is a safe starting point; only go shorter if you genuinely want hard urgency and accept that some shoppers will be timed out.

Template tokens reference

Three tokens are available, and each is valid only in specific fields. Using a token in a field that doesn't support it leaves the raw text in place.

TokenReplaced withValid in
{{timer}}The live countdown value, formatted MM:SSTimer text
{{product_title}}The offered product's titleTitle, Downsell title, Description, Downsell description
{{ percentage }}The offer's discount percentageDiscounted price label

Edit example recipes

A punchy, time-pressured deal that closes fast.

Turn the timer on

In the Countdown timer group, switch Enable timer on.

Set a 3-minute window

Set Timer duration to 3. The banner will start at 03:00 and count down in seconds.

Make the banner urgent

Set Timer color to critical so the banner reads as time-sensitive, and keep Timer text as Offer ends in {{timer}} (or rewrite it, keeping the {{timer}} token).

Reinforce on the button

Turn on Include price on button so the price is visible at the moment of decision, and leave Hide timer banner off so the countdown stays in view.

At 00:00 the page closes and the buy button is disabled. Three minutes is deliberately tight — only use it when you want hard urgency and accept that slower shoppers will be timed out.

A relaxed offer with no countdown pressure.

Leave the timer off

In Countdown timer, keep Enable timer off (its default). With no timer, the page never auto-closes — the shopper accepts or skips on their own time.

Soften the copy

In Titles & descriptions, set a welcoming Title such as One more thing for {{product_title}} and a reassuring Description.

Make skipping easy

In Buttons & labels, set Skip button plain on so declining feels low-pressure, and leave Skip button position at bottom.

Two product cards laid out next to each other.

Build a two-product offer

In the offer setup, include two products. With more than one product, the page switches to the grid/list layout automatically.

Set two per row

In Layout, set Products per row to 2 so the two cards sit side by side.

Pick a card orientation

Set Card layout to vertical so each card stacks its image above its details — usually cleaner when two cards share a row. Keep Show thumbnails on so each product shows its image.

Products per row only takes effect with multiple products. A single-product offer always uses the single-product layout and ignores this setting.

Troubleshooting

The Post-Purchase customizer panel showing the Titles, Buttons, Layout, and Countdown timer setting groups with a live preview of the offer page.
The Post-Purchase customizer with a live preview of the offer page.

Next steps

On this page