Ecommerce & Retail · project showcase · lifecycle architecture
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
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.
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.
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.
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.
The sequence
How it was delivered
Week 1
Capture points
Back-in-stock control on sold-out variants, email capture rebuilt as a theme-safe component
Owner: OmniFlow
Weeks 1–2
Flow definitions
Eight flows named, each with a trigger, entry condition, exclusion set and suppression window
Owner: OmniFlow
Weeks 2–4
Build and QA
Flows built, seeded and tested against a real cart and a real sold-out variant
Owner: OmniFlow
Week 4
Calendar rules
Campaign calendar reads flow membership before sending; collision rules written down
Owner: OmniFlow + client
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
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
Dashed line marks the month the engagement started.
| Session default channel group | Sessions | Key events | Rate |
|---|---|---|---|
| Organic Search | 1,817 | 96 | 5.3% |
| Paid Search | 1,405 | 68 | 4.8% |
| Direct | 949 | 43 | 4.5% |
| Referral | 537 | 25 | 4.7% |
| Organic Social | 381 | 18 | 4.7% |
LinkedIn Campaign Manager
Sponsored Content · Ecommerce & Retail audience
Impressions
114,222
+39.4%
Clicks
803
+43.3%
CTR
0.7%
+0.17%
Cost per lead
$96.86
-8.8%
Impressions by month
Dashed line marks the month the engagement started.
| Campaign | Impr. | Clicks | Leads | CPL |
|---|---|---|---|---|
| Thought leadership — practice leads | 38,835 | 273 | 23 | $96.86 |
| Problem-aware — retargeting | 29,698 | 209 | 17 | $96.86 |
| Case study download | 25,129 | 177 | 15 | $96.86 |
| Webinar registration | 20,560 | 145 | 12 | $96.86 |
CRM pipeline
Ecommerce & Retail · inbound and outbound
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
Dashed line marks the month the engagement started.
| First-touch source | Leads | Qualified | Meetings |
|---|---|---|---|
| Google Ads — high intent | 38 | 15 | 7 |
| Organic search | 33 | 13 | 6 |
| Business Profile — call | 23 | 9 | 4 |
| LinkedIn outbound | 17 | 7 | 3 |
| Referral | 11 | 4 | 2 |
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.