Skip to main content

    Ecommerce & Retail · project showcase · lifecycle architecture

    Project ShowcaseReal client work that shipped. No performance figures are published, because none have been verified and approved for release.

    Campaigns and automations are two different systems — and only one of them runs while you sleep

    Most stores run email as a calendar — someone decides Monday what goes Thursday — while the automations were switched on at launch and never opened again. This is the architecture that separates the two, gives every flow its own trigger, exclusion set and reporting row, and makes the capture points part of the product page.

    At a glance

    The engagement in brief

    Services

    • Email Marketing
    • CRM
    • Content Systems
    • CRO
    • Web Development
    • Reporting

    Stack

    • Shopify
    • Klaviyo
    • Google Analytics 4
    • Google Tag Manager
    • Product and stock feed
    • Back-in-stock capture
    • Suppression rules

    The situation

    What we walked into

    A campaign calendar is visible work. Somebody writes it, somebody approves it, and on Thursday it goes out and the graph moves. An automation is invisible work: it was built once, it fires on a trigger nobody watches, and it either quietly earns money for two years or quietly does nothing for two years and looks identical either way. The two systems are also constantly interfering with each other, because nothing in a default setup stops a promotional campaign landing in the middle of somebody's abandoned-cart sequence at a different price.

    Most stores can name every campaign they sent last month and cannot name a single automation that is currently running.

    What we found

    The diagnosis

    1. 01

      A campaign is an event; an automation is an asset

      They are budgeted, staffed and reviewed as one line item called email, which means the calendar wins every week because it has a deadline attached. The architecture separates them so the automations have an owner, a review date and a reporting row of their own.

    2. 02

      Every automation needs an exclusion rule or it will fight the calendar

      Someone sitting in a cart-recovery sequence should not receive a sitewide promotion for the same product at a lower price four hours later. Entry conditions are easy to write and exclusion sets are the part people skip, which is why the two systems appear to work individually and contradict each other in a real inbox.

    3. 03

      Back-in-stock only exists if the product page captures it

      The flow is downstream of a form that has to sit on a sold-out variant, survive a theme update and write to the right list. Built in the wrong order, the flow exists for weeks with nothing feeding it and reports zero, which reads as the flow not working.

    4. 04

      Reporting that sums email revenue hides which half is working

      One number for the channel makes it impossible to tell a well-run calendar from a well-built automation set. Every flow gets its own row, with sends, click rate, conversion rate and revenue per recipient, and the calendar is reported separately from all of them.

    The number behind it

    What this is built around

    Cart abandonment has averaged **70.22% across 50 studies (2006–2025)** and hasn't moved through two decades of checkout redesigns (Baymard Institute) — it's a behaviour, not a defect, so the money is in the *post-abandonment* automations, not another checkout tweak.

    What we built

    The system

    Each flow is a named object with a trigger, an entry condition, an exclusion set, a suppression window and its own reporting row: welcome, browse abandonment, cart abandonment, checkout abandonment, back-in-stock, post-purchase, replenishment and winback. Capture points are built first and treated as product-page components — a back-in-stock control on every sold-out variant, an email capture that survives a theme change. The campaign calendar reads flow membership before it sends, so an active recovery sequence suppresses the promotion rather than colliding with it. Nothing goes live without a row in the reporting sheet naming its owner and its next review date.

    Campaigns and automations are two different systems — and only one of them runs while you sleep — stackA stack of 9 connected layers, from "Product and stock record" through to "Per-flow reporting row", each feeding the one below it.Product and stock recordBack-in-stock capture on the variantTrigger definitionsEntry and exclusion rulesWelcome and post-purchase flowsCart and checkout recovery flowsReplenishment and winbackCampaign calendar (reads flow membership)Per-flow reporting row

    The sequence

    How it was delivered

    1. Week 1

      Capture points

      Back-in-stock control on sold-out variants, email capture rebuilt as a theme-safe component

      Owner: OmniFlow

    2. Weeks 1–2

      Flow definitions

      Eight flows named, each with a trigger, entry condition, exclusion set and suppression window

      Owner: OmniFlow

    3. Weeks 2–4

      Build and QA

      Flows built, seeded and tested against a real cart and a real sold-out variant

      Owner: OmniFlow

    4. Week 4

      Calendar rules

      Campaign calendar reads flow membership before sending; collision rules written down

      Owner: OmniFlow + client

    5. Week 5

      Reporting

      One row per flow with owner and review date, campaigns reported separately

      Owner: OmniFlow

    Outcome

    What shipped

    This entry makes no performance claim. It documents an architecture and the order it has to be built in. The design test applied throughout was whether somebody who joins the business in a year can open the reporting sheet and say which flows exist, what triggers each one, who owns it and when it was last reviewed. That test is the reason every flow carries its own row rather than contributing to a single channel total.

    Reporting

    What you would actually see

    These are the surfaces this engagement is run and measured from, shown with representative figures built around the benchmarks cited on this page. Every account we run reports into views like these, and you keep ownership of all of them.

    These are demo dashboards. They show the reporting surfaces this engagement is run and measured from, with representative figures generated around the published benchmarks cited on this page — not a client account and not a client result. Live reporting for your own account replaces every number here.

    Google Analytics 4

    Ecommerce & Retail · all web data

    Demo
    Acquisition overview
    Last 12 months vs. preceding period

    Sessions

    5,089

    +65.4%

    Key events

    215

    +81.7%

    Session key event rate

    4.2%

    +1.2%

    Engagement rate

    67.9%

    +6.3%

    Sessions by month

    AprJunAugOctDecFeb

    Dashed line marks the month the engagement started.

    Session default channel groupSessionsKey eventsRate
    Organic Search1,817965.3%
    Paid Search1,405684.8%
    Direct949434.5%
    Referral537254.7%
    Organic Social381184.7%

    LinkedIn Campaign Manager

    Sponsored Content · Ecommerce & Retail audience

    Demo
    Campaign performance
    Last 12 months

    Impressions

    114,222

    +39.4%

    Clicks

    803

    +43.3%

    CTR

    0.7%

    +0.17%

    Cost per lead

    $96.86

    -8.8%

    Impressions by month

    AprJunAugOctDecFeb

    Dashed line marks the month the engagement started.

    CampaignImpr.ClicksLeadsCPL
    Thought leadership — practice leads38,83527323$96.86
    Problem-aware — retargeting29,69820917$96.86
    Case study download25,12917715$96.86
    Webinar registration20,56014512$96.86

    CRM pipeline

    Ecommerce & Retail · inbound and outbound

    Demo
    Pipeline by source
    Last 12 months

    Leads created

    123

    +42.7%

    Qualified

    50

    +49.1%

    Meetings booked

    28

    +51.2%

    Answered on first attempt

    60.3%

    +9.6%

    Leads created by month

    AprJunAugOctDecFeb

    Dashed line marks the month the engagement started.

    First-touch sourceLeadsQualifiedMeetings
    Google Ads — high intent38157
    Organic search33136
    Business Profile — call2394
    LinkedIn outbound1773
    Referral1142

    Honestly

    What we would do differently

    We built the flows before the capture points on the first pass, so back-in-stock existed as a fully tested sequence for three weeks with no form feeding it and reported nothing. It looked like a broken flow and it was a missing input. Capture points now go in first, and no flow is marked live until something has actually entered it.

    Next

    Start the same conversation

    Start the same conversation

    Tell us what you are working on and we will say plainly whether this is the right shape of engagement for it.

    We use your details only to respond to this request. No lists, no resale.