When Your Pricing Page Screams “Call Me”: A High‑Intent Alert Playbook for Shopify Apps
A step-by-step playbook for Shopify apps using Spreeflo to detect repeated pricing page visits, segment high-intent visitors, and send context-rich internal alerts so founders or sales can jump in on upgrade and installation opportunities at the right time.
Industry
Niche
Pattern
Loading sequence...
The CartWizard team knew something was off long before they could prove it.
They’d see the same big Shopify stores pop up in support chats, read their docs, then hit the pricing page over and over. Some of those stores converted quietly on a $49 plan. Others vanished. Months later, the founder would discover that same merchant spending thousands a month on a competitor’s app.
All the intent was visible in analytics. None of it ever reached the one person who could do something about it.
The sequence at the top of this page is the whole journey, end to end. It turns those repeated pricing visits into a routed, context-rich alert for whoever owns sales in your team, without adding another manual task to anyone’s day.
This article walks through that journey for a typical Shopify app or e‑commerce SaaS: $30–$200/mo plans, a few hundred paying stores, and founder-led or one‑person “sales.” We’ll use Spreeflo to wire your web data, segmentation, and internal emails into a tight feedback loop: when someone is clearly shopping, your team hears about it in time to matter.
Why repeated pricing visits beat any “MQL score”
For Shopify apps and e‑commerce tools, your pricing page is where serious intent converges:
Larger merchants validating whether you can replace an in‑house solution
Existing customers checking upgrade tiers or usage caps
Trial users deciding if you’re worth adding to their already heavy SaaS stack
Three or more visits to pricing in a short window is rarely casual browsing. It usually means:
Someone new is stuck on “should we install this or not?”
An existing store is weighing upgrade vs churn
A competitor has entered the conversation and they’re comparing line by line
Most teams already track these visits in Google Analytics or a product analytics tool. The leak is that this information never turns into a timely, human touch.
That’s what this journey is for: take a very specific behavior (multi‑visit pricing interest), route it through Spreeflo’s Criteria Match, and fire a Send Internal Email node to the right person with enough detail to act.
This pattern leans hard on two ideas Spreeflo is built around:
Capture detail on every customer so you can speak to each uniquely.
Founder‑led businesses win on leverage, not headcount. You set this up once, and every future pricing binge quietly pings your team with context.
The high‑intent alert: what the journey actually does
Before we go node by node, here’s the behavior in plain language.
Spreeflo tracks which contacts hit your pricing page, and how often.
When a contact visits pricing 3+ times within 7 days, they enter this journey via a Criteria Match trigger.
An If/Else node checks whether they’re an active customer or still a lead.
For active customers, the journey gives them a short window to self‑upgrade. If they don’t, it emails their account owner with everything they need to start a smart expansion conversation.
For leads, it waits a bit to see if they install or start a trial on their own. If not, it alerts whoever does outbound or founder‑led sales, with context pulled from usage and visit history.
No contact gets marketed to here. The only outward‑facing action is internal: a well‑timed email into your inbox or CRM queue.
Let’s build it.
Step 1: Feed pricing behavior into Spreeflo
This pattern assumes two things:
Your app’s site (or marketing site) has Spreeflo’s web SDK installed.
Pricing page views are being tracked as page visits.
If you’re not there yet, start by enabling web tracking and analytics. Once the SDK is live across your site, Spreeflo automatically records page views and ties them to contacts whenever you call Spreeflo.identify after a signup or login.
Two practical tips for Shopify / e‑commerce apps:
Make sure you call
Spreeflo.identifyas soon as you know a store’s contact email (for example, when a merchant connects their store or signs into your app). This links previous anonymous pricing views to a real contact record the moment you know who they are.Keep your pricing URLs stable (
/pricing,/plans, etc.) so you can target them cleanly in the Segment Builder without chasing querystring variations.
Once that’s in place, Spreeflo’s event stream now includes every pricing visit, timestamped and tied to a contact.
Step 2: Define “high‑intent pricing visitor” once in the Segment Builder
You could hard‑code this logic into every journey, but it’s cleaner to define it once as a segment and reuse it.
Head to Audiences → Segments and create a new segment called “High‑intent pricing visitors.” Configure it in the segment builder roughly like this:
Group connector: AND
Filter category: Page Visited
- URL contains:/pricing(or whatever your pricing URL is)
- Frequency: at least 3 times
- Time window: in the last 7 daysFilter category: Contact Attributes
- Email is not blank
That definition does a few important things:
It focuses on repeated pricing behavior, not just one curious click.
It enforces a time window so someone who checked your pricing last year doesn’t keep triggering alerts.
It ensures you only alert on contacts you can actually reach (you have an email on file).
You can refine this over time: for example, you might later add “Total visits at least 5” to weed out very casual lurkers, or exclude contacts already on your highest plan.
Step 3: Use a Criteria Match trigger to catch the moment they qualify
Now switch to automation and build a journey.
Add a Criteria Match trigger as the starting node. Instead of rebuilding the logic, mirror the segment:
Criteria: same “Page Visited → URL contains
/pricing→ at least 3 times → in the last 7 days” plus “Email is not blank.”
Alternatively, you could use a Join Segment trigger that points directly at your “High‑intent pricing visitors” segment. The behavior is the same; Criteria Match keeps the journey self‑contained, Join Segment gives you a single source of truth.
Most importantly, set:
Re‑enrollment: ON
Re‑enrollment is journey‑scoped in Spreeflo. Turning it on means this trigger will fire again for the same contact in the future, as long as they’ve exited the journey and newly match the criteria again.
That matters for pricing revisits:
Week 1: they cross the 3‑visits‑in‑7‑days threshold and enter the journey.
Week 3: they’re quiet; criteria no longer match.
Week 5: they’re back on pricing repeatedly; once they hit 3 visits within 7 days again, they should re‑enter and ping your team again.
With re‑enrollment off, you’d only ever hear from them once.
From the trigger, the next node is an If/Else process.
Step 4: Split active customers from prospects with If/Else
Not every pricing binge deserves the same treatment. An existing customer exploring upgrade tiers is very different from a non‑customer deciding whether to install you at all.
The If/Else node checks which group this contact belongs to.
You’ll typically base this on either:
A tag you apply when someone becomes a paying customer (
customer,active-subscriber, etc.), orMembership in a segment like “Active customers” that you maintain using billing data and the Spreeflo API.
In the If/Else condition, you might say:
Condition: contact is tagged with
customer
“Then” branch: active customers.
“Else” branch: leads and trials.
Why branch here?
Active customers are expansion or churn‑risk conversations; you want account owners alerted.
Non‑customers are acquisition opportunities; you may want a different person (or the founder) nudged to reach out.
From here, the two paths stay separate until they naturally end.
Step 5: Active customers – give them room to upgrade, then alert
On the “active customer” branch, add an Add Tag node:
Tags:
pricing-intent-existing
This is cheap insurance. You can use it later to explore patterns (“how many expansion deals started as pricing‑intent journeys?”) or to suppress other campaigns while sales is in motion.
Next, insert a Wait Condition node. This prevents your team being pinged while the customer is in the middle of self‑service upgrade.
Configure it to:
Condition: custom event
subscription_upgradedtriggered at least 1 time in the last 4 hoursTimeout: 4 hours
Under the hood, your app should be calling Spreeflo.track("subscription_upgraded", …) whenever a customer upgrades. The Spreeflo API or SDK handles this easily.
What this Wait Condition does:
If they upgrade quickly, the condition becomes true and the journey continues immediately.
If they don’t, the timeout expires after 4 hours, and the journey continues anyway.
Right after, add another If/Else node with the same condition:
Has custom event
subscription_upgradedtriggered at least 1 time in the last 4 hours?
Two branches:
Yes (they self‑upgraded)
- Optionally add an Update Contact Attribute node to set a timestamp likelast_pricing_intent_handled_atto “now.”
- You might also tag themupgraded-after-pricing-alertfor reporting.
- No internal email needed; revenue already landed.No (they didn’t upgrade)
- Add a Send Internal Email node.
That internal email is where Spreeflo makes the behavior usable. Using the email builder, create an internal template like:
Subject:
Existing customer on {{ current_plan }} has revisited pricing 3+ times this weekBody: include
- Store name and contact email
- Current plan and MRR
- Last pricing visit timestamps
- Key usage stats (features used, sessions in last 30 days) pulled in as variables
Send it from a generic account (e.g., alerts@yourapp.com) to the assigned AM or a shared “sales” inbox. Toggle “Send only once” on so the same customer doesn’t flood your team if they somehow re‑enter the exact node.
Finally, you can tag the contact again (expansion-alert-sent) so downstream journeys know sales is in play.
Step 6: Leads and trials – don’t nag sales if they just installed
On the “not yet a customer” branch, the shape is similar but with different exit criteria.
First, attach an Add Tag node:
Tags:
pricing-intent-lead
Then, a Wait Condition that watches for self‑serve actions:
Condition group (OR):
- Custom eventapp_installedtriggered at least 1 time in the last 2 hours
- OR custom eventtrial_startedtriggered at least 1 time in the last 2 hoursTimeout: 2 hours
Again, your app should be emitting those events into Spreeflo any time someone installs from the App Store or kicks off a free trial.
This does two things:
If they install or start a trial right away, the condition becomes true and the journey progresses without pestering your team.
If they hesitate and do nothing for a couple of hours, the timeout fires and we know they’re stuck.
Follow this with another If/Else:
Condition: same “installed OR trial_started in last 2 hours.”
Branches:
Yes – they helped themselves
- Optionally update an attribute likeacquisition_channelto append"pricing-alert"(using an Append update on a TEXT attribute).
- You might also use an Add Tag (self-serve-from-pricing) whose only purpose is to kick off your onboarding journey via an Added Tag trigger.
- Journey ends quietly; onboarding and lifecycle flows now take over.No – still on the fence
- Add a Send Internal Email.
For this internal email, aim for something like:
Subject:
High-intent visitor has viewed pricing 3+ times but has not installedBody:
- Contact details (name, email, store URL)
- Traffic source if you track it
- Count and timestamps of pricing visits
- Any key pages they viewed (docs, case studies, integrations)
This gives your founder or sales rep a tight, specific reason to reach out: “Saw you’ve been checking out CartWizard a few times this week and reading up on our Klaviyo integration. Want a quick walkthrough tailored to your store?”
Step 7: Make the alerts worth their interruption
Internal alerts that fire on every minor interaction get ignored within a week. Your goal is the opposite: a small number of alerts that feel eerily well‑timed.
Three dials matter most:
Threshold
- Start with “3+ pricing visits in 7 days.”
- If your app has massive traffic and this fires too often, bump it to 4 or 5, or tighten the time window to 3 days.
- If it rarely fires, loosen it to 2 visits or 14 days and see if the leads are still good.Segmentation
- You might create separate journeys for “Enterprise‑size stores” vs “smaller merchants,” using additional Segment Builder rules like Total Visits or specific custom attributes you maintain via the Spreeflo API.
- That way, only stores above a certain GMV proxy ever hit your inbox.Ownership
- Route active‑customer alerts directly to the account owner.
- Route lead alerts to whoever handles outbound or founder‑led follow‑ups.
Watch three metrics as you tune:
Lead‑response time: from alert timestamp to first human touch.
Opportunity creation rate from alerts: what fraction of alerts turn into serious evals or trials.
“Acceptance rate”: ask your AE or founder to tag or log whether an alert was “useful.” If that drops, tighten criteria.
Why this journey is worth the setup for a small app team
If you’re a 4‑person Shopify app team, it’s tempting to think “we’ll just keep an eye on analytics” or “stores will upgrade themselves when they’re ready.”
That assumption leaks revenue.
The journey you see at the top of this page takes a behavior you already have data for and turns it into a concrete sales motion:
It watches for pricing behavior at the contact level instead of in aggregate.
It routes each case down a path tuned to their stage: expansion vs new business.
It only interrupts a human when someone has clearly crossed a threshold worth caring about.
You capture more detail on each merchant, you speak to them based on what they actually did, and you do it without adding “check dashboard” to anybody’s calendar. That’s exactly where founder‑led businesses win: systems that compound your time instead of more people checking more tabs.
Once this journey is live, every serious merchant you’ve worked hard to attract, nurture, and re‑engage gets one more chance to become meaningful ARR, not just another anonymous session in an analytics chart.
Your pricing page is already whispering who’s ready. This is how you make sure someone’s listening.