Blog
August 12, 2026

Build a Remarketing Engine on Shopify

How to build a remarketing engine on Shopify: instrument events, capture identity, choose channels, set expiry. A stack for fashion stores, not a one-off campaign.

Aaron
Aaron
11 mins read

A shopper tries on a linen dress, adds the sand color in medium, gives an email address, then buys from her phone that evening. By Tuesday morning she is in an abandoned-cart flow, an SMS queue, and an ad audience. Three systems noticed her interest. None noticed that the job was finished.

A Shopify remarketing engine is a connected operating system that records meaningful product intent, joins it to a permitted customer identity, selects the right channel, and stops when the intent expires or the shopper buys. Build it in that order. A larger collection of campaigns does not make a better engine.

Shopify operator mapping product events, customer identity, remarketing channels, and expiry rules

Useful remarketing begins with a trustworthy event and ends with a trustworthy stop rule. Editorial image in Classic Antla disposable-camera style.

Start with an event contract, not a flow builder

The first operator task is deciding which customer actions are reliable enough to cause work elsewhere. Opening Klaviyo first is tempting because the canvas looks productive. It also encourages teams to automate whatever data happens to be available.

Write an event contract before touching a destination. For each event, specify its name, trigger, required properties, identity state, consent requirements, exclusions, and expiry. Keep the names literal enough that a new team member can understand them without consulting the person who installed the pixel.

For a fashion store, the initial event set can stay compact:

EventRequired contextOperator use
Product viewed repeatedlyProduct ID, variant ID, count, timestampLow-pressure browse follow-up
Size or fit detail openedProduct ID, detail viewed, timestampResolve a fit question
Virtual try-on completedProduct ID, variant, result reference, timestampRestore a personal visual decision
Product added to cartCart ID, product, variant, quantity, timestampContinue an active basket
Checkout startedCheckout ID, line items, timestampAddress late-stage friction
Order completedOrder ID, line items, customer reference, timestampSuppress every related recovery path

Across more than 500,000 Antla try-ons, shoppers who completed a preview converted at 3.8%. That is the rate among try-on users, not the store-wide conversion rate. The event deserves testing as deliberate product evaluation, while the later order remains the final signal.

Do not fire high_intent because someone scrolled 60 percent of a product page. Record what actually happened. The engine can rank events later, while a vague label permanently removes the evidence needed to challenge the ranking.

Shopify’s conversion-rate guidance notes that store performance varies with traffic source, device, category, price, and other context. Event quality needs the same discipline. Compare repeated views, try-ons, cart additions, and checkout starts inside your own store instead of borrowing somebody else’s universal intent score.

The deeper implementation choices are covered in event fuel for a Shopify remarketing engine. At build time, the test is simple: can an operator inspect one event and tell which product decision the shopper was making?

Capture identity after the shopper has received value

An event is useful while anonymous. It can restore state onsite, improve merchandising analysis, and help the team understand where decisions stall. It cannot become permission for an email or text merely because the browser has been assigned an ID.

Ask for identity at a moment that makes sense to the shopper. Saving a cart, preserving a wishlist, receiving a back-in-stock notice, or keeping a completed try-on all create a fair value exchange. A generic popup shown before the visitor has seen the garment mainly proves that the popup software loaded.

Keep four records separate:

  1. Session identity: The browser or session that produced the behavior.
  2. Customer identity: A known Shopify customer or submitted email address.
  3. Channel permission: Consent for email, SMS, or another owned channel.
  4. Event ownership: Evidence that the known person belongs to the earlier session and product action.

That fourth record is the join. When a shopper submits an email after completing a try-on, attach the recent try-on event to the profile with its product, variant, and timestamp. Do not import every anonymous action from a shared device and quietly call it personalization.

Antla’s email capture feature lets fashion stores offer additional try-ons in exchange for an email address. The useful asset is not just the address. It is the address joined to a deliberate apparel action, with a clear route back to the selected garment.

Identity also needs a merge policy. A customer may browse anonymously, identify through email, log in later, and purchase on another device. Decide which identifiers your stack can reconcile and how quickly an order suppresses product-level follow-up across them. If the answer is “eventually,” keep the early automation modest.

Give each channel one job

Once events and identity are trustworthy, choose destinations. The channel should fit the event, available permission, required detail, and cost of interruption. It should not win because one vendor had the most persuasive onboarding call.

Onsite state is the quietest destination. Restore the last product, selected variant, cart, or private try-on when the shopper returns. It works for anonymous sessions and asks for no inbox attention.

Email has room for product imagery, fit notes, measurements, delivery context, and a saved try-on. It is the sensible owned-channel default when email permission exists and the product decision needs explanation.

SMS is concise and immediate. Reserve it for explicitly opted-in shoppers with strong, recent intent, such as an expiring cart or requested stock update. Postscript provides Shopify-focused SMS tooling, but access to a text box is not evidence that a text should be sent.

Paid audiences help when an identified email is unavailable or owned-message permission is absent, subject to platform rules and privacy choices. Use product-aware audiences and exclusions. A store-wide audience of everyone who visited in the last 180 days is storage, not strategy.

Klaviyo’s help center documents the platform mechanics for profiles, events, segments, and flows. Keep that implementation work downstream of the event contract. The handoff pattern for connecting Klaviyo, SMS, and ads should carry one consistent payload rather than inventing a different version of customer intent in every tool.

Add arbitration before the second message

Double-messaging happens because each destination asks, “Is this person eligible for me?” The engine needs a prior question: “Has another channel already taken this job?”

Create a small decision table that runs before activation:

ConditionPreferred actionSuppress
Shopper returns in the same sessionRestore onsite stateEmail, SMS, ads for the moment
Known email, detailed fit hesitationSend one useful emailSMS until response window closes
Explicit SMS consent, urgent stock eventSend concise SMSSame-day email carrying the same message
No owned-channel permissionUse eligible paid audience or onsite stateEmail and SMS
Relevant purchase completedStop recoveryAll product-level remarketing

Store an activation timestamp, event ID, product ID, channel, and message purpose. Before another system sends, have it check those fields plus current purchase state. This does not require a heroic central data platform. A consistent profile property or shared suppression feed is enough for a first version.

Use priority rules for collisions. Checkout usually outranks cart, cart outranks try-on, and try-on outranks a single browse. If a shopper tries on one dress but checks out with another, the order line items decide whether the original interest remains eligible. Store-wide suppression is safer at first; product-level nuance can follow once the order join is dependable.

Expiry is part of the build, not cleanup

Old intent is where relevant personalization turns strange. Nobody needs a February reminder about the velvet party dress inspected for New Year’s Eve.

Set expiry by event and merchandise reality:

  • A single product view might live for one to three days.
  • Repeated views or a fit-detail action may remain useful for several days.
  • A cart or checkout event needs fast suppression and a short recovery window.
  • A completed try-on can last longer when the result is saved, but should still respect stock, season, and product availability.
  • A stock alert ends when the requested variant sells out again or the customer buys it.

These are starting hypotheses, not universal settings. Occasionwear, replenishable basics, high-ticket outerwear, and limited drops have different consideration cycles. Review time-to-purchase by event and choose an expiry that captures the useful tail without following the shopper into another season.

Every eligibility record should end on the earliest of four conditions: purchase, consent withdrawal, product invalidation, or time expiry. Product invalidation includes deleted SKUs, unavailable variants, and a try-on result that failed quality review. Automation should not confidently return a shopper to something the store can no longer sell.

This stop logic is what separates the working stack from the broader definition of a remarketing engine. Campaigns are designed around sends. Engines are also designed around silence.

Operator questions before launch

How do I build a remarketing engine on Shopify?

Build it in four passes. First, instrument a small set of product-intent and purchase events with product, variant, timestamp, and identity context. Second, connect anonymous behavior to known customers only through a defensible identity event and channel permission. Third, assign onsite, email, SMS, and paid destinations distinct jobs. Fourth, enforce purchase suppression, consent changes, product validity, frequency rules, and expiry across every destination.

What should I instrument first?

Start with events that describe an actual product decision: repeated product views, size or fit-detail use, completed virtual try-on, add to cart, checkout start, and order completion. Purchase is the essential suppression event. For every event, retain the product or variant reference and timestamp. A clever event name cannot compensate for missing context.

How do I connect email and ads without double-messaging?

Create one eligibility record per intent event and store which channel activated it, when, for which product, and for what purpose. Let the highest-priority eligible channel act first, then apply a cooling window to the others. Recheck purchase and consent before every activation. Ads should receive the same exclusions as email, even if the advertising platform makes that less visually satisfying.

Put measurement next to the stop switch

After the first journey runs cleanly, compare recovered purchases with a holdout instead of awarding every returning order to the last message shown. The next operator step is measuring a Shopify remarketing engine with incremental revenue, suppression health, channel cost, and negative responses in view.


About the author: Aaron is the founder of Antla. He would rather ship events that mean something than another lookalike from last month’s visitors.

Start with one meaningful event and one reliable stop condition. If apparel shoppers are leaving behind generic pageviews instead of usable product decisions, add Antla to your Shopify store and make virtual try-on part of the engine’s event fuel.