ES
Bark · Polaris Pro · UK & Ireland

Lifecycle analysis and proposal, from signup to trial conversion

Both current flows, piece by piece. A single lifecycle across three routes, with the event logic that fires it. And how I would measure whether it works in revenue, not in opens.

NAMEMario Calvo
ROLESenior CRM Manager
DELIVERABLECase study and live demo

00 · Thesis

Messages go out by date. They should go out by what the Pro does.

Both flows are built on the day of the cycle: the Pro gets the third message because three days have passed, not because they did or failed to do something. That is where the duplicate pieces come from, the ones that contradict each other, and the claims about their visibility the product has not yet delivered.

The proposal swaps the calendar for a state machine. The Pro moves through observable milestones, and time only serves to rescue when a milestone does not arrive.

TodayProposed
The calendar decides the sendA Pro event decides it
Two isolated flowsOne lifecycle, three routes
They are told they are already visibleThey are shown what actually happened
Ends at the chargeContinues through the subscription

Launch priority: orchestrate the first enquiry within minutes; verify the Pro's real state before making any claim; and close the trial with a transparent value recap, measured against a persistent holdout.

The two current flows

Flow A

Signup → trial start

Seven sends in ten days to Pros who sign up and do not start the trial. In six of the seven I find something the Pro can notice.

D0 Welcome
D1 Identical to D10
D2 Raw preheader · rewrites the profile without permission
D2 297 searches · unsegmented
D5 Contradicts D2
D8 A summary of four zeros
D10 D1 again · closes on zero
Calendar-triggered · no exit condition
Calendar-firstThe send depends on the date rather than the Pro's state, so it goes out even when their real blocker is something else.
RepetitionD1 and D10 are the same email word for word. Only the subject and headline change, nine days apart.
ContradictionD2 ticks «✓ photo added». D5 lists that same photo as outstanding, in red. The rule abort if strong profile never suppressed the email.
SuppressionThere is one suppression rule across the whole programme, and here it does not end up applying. Most of the other findings follow from that.
Flow B

Onboarding during the 7-day trial

It is better built than A: three welcome variants, genuinely segmented. Where I see the problem is the moment that decides the subscription, which it reaches late.

T0 3 variants · segmented
+24h Profile updated
+1d No app
+1d Unanswered enquiry, by email
T6 Single notice before the charge
T7 Three competing asks
Segmented at entry · no reaction to behaviour
WorksThe three welcome variants, and using real marketplace data as proof. The mechanism looks right to me; what I would change is when it fires and on what condition.
LatencyThe unanswered-enquiry alert arrives by email, a day later. To my mind it is the moment of the trial that decides the most revenue.
Pre-chargeOne notice, 24 h before an automatic charge, with no data on what the Pro achieved that week.
AfterI find nothing after day 10 or after the trial ends: CRM stops where revenue starts.
FLOW A

Signup → nurture up to the trial

Piece-by-piece audit: 7 sends, 27 observations and the original screenshots.

FLOW B

Free trial

Piece-by-piece audit: 6 sends, 23 observations and the original screenshots.

One lifecycle, three routes

Today, what goes out is decided by the day of the cycle. In the proposal it is decided by where the Pro sits in the milestone chain. The three routes share attributes, suppression and channel priority, and a Pro is only ever in one.

Route 1

Can try it and has not started

trial_eligible AND NOT trial_started
Goal: reduce uncertainty

They saw the trial offer at signup and did not take it. Repeating it unchanged adds nothing; what is needed is an answer to the doubt that stopped them.

· An explicit explanation of the trial: what it includes, when it charges, how to cancel
· Demand by category and area, where the data exists and is representative
· Profile readiness personalises the treatment; it does not block the trial from starting
· Close on inactivity, not on day 10
Route 2

Trial active

trial_started = true
Goal: speed up the chain

Profile ready → impressions → enquiry → reply. Each message pushes the link that Pro is missing, not the next one on the calendar.

· Profile next action: one single thing at a time
· The enquiry within minutes, with the context inside the piece
· A diagnosis when there are no impressions, with the reason and the fix
· A value recap before the charge, with their own numbers
Route 3

Subscriber

subscription_active
Goal: consolidate and recover

It does not exist today. It is where month two renewal is decided, and where failed payments sit unrecovered.

· A monthly value cycle with real data
· Dunning for failed payments, starting by confirming volume and causes
· Cancellation by reason, with a different route per reason

A note on trial_eligible, which lives in the rules rather than in the routes. It is not a segment: on a new signup it is almost always true, and the only reason that applies to someone who has just signed up is their category not offering a trial — that variant changes the ask inside Route 1, it does not create a route. Where the flag does matter is later, so a trial that has already been spent is never offered again. Confirmed

The proposed flow

Three routes. A Pro is only ever in one. Each route reads left to right, and above every step is what fires it. Click any piece to see the mockup, its entry and exit conditions, and what it suppresses while it is active. Every one of those conditions is an event or an attribute that has to exist: checking which ones already do is the first task in the role.

Pro event — sends the moment it happens Time — only if the event never arrived, and cancelled if it does Route exit
Route 1

Can try it and has not started

They saw the trial offer at signup and did not take it.

trial_eligible AND NOT trial_started

If their category offers no trial, it is the same route with a different ask: direct plan fit instead of activating the trial. That variant is flagged, not built.

3 steps
Enters On signup
Time +24 h without starting the trial
Event Profile below the minimum
✓ Starts the trial Moves to Route 2. Any pending time-based message is cancelled.
✕ Three attempts without starting The route closes: we stop writing about the trial. We only get in touch if real demand appears nearby.
Route 2

Trial active

Has full access and a card already on file.

trial_started = true
8 steps
Enters trial_started
Time +12 h without the app installed
Event marketplace_impression
Time +72 h with impressions and no enquiry
Event enquiry_received
Time +2 h without enquiry_replied
Time 72 h before the charge
Time 24 h before the charge
✓ First month is charged Moves to Route 3.
✕ Cancels before the charge Gets the loss in their own numbers, and enters demand-based re-entry.
Route 3

Subscriber

The card has been charged; the goal is no longer conversion.

subscription_active
3 steps
Enters subscription_charged
Event payment_failed
Event cancel_intent
✓ Renews A monthly value cycle with real data.
✕ Leaves Re-entry when there is a real demand spike in their area, not on a calendar.

The milestone chain and the states that watch it

Each state answers one question: what is stopping this Pro from reaching the next milestone. And it declares its entry, its exit, what it suppresses and which KPI it moves.

H1
Signup
pro_signed_up
H2
Trial started
trial_started
H3
Profile ready
profile_ready
H4
First impression
marketplace_impression
H5
First enquiry
enquiry_received
H6
First reply
enquiry_replied
H7
First charge
subscription_charged

The rule that changes the system: an event in the chain cancels any time-based message chasing that same milestone. That is where most of the current repetition disappears.

The 31 events and attributes this needs

Every entry and exit condition in the flow rests on one of these. The certainty column is what separates a proposal from a plan: 12 are already used by the current flow, 2 are confirmed in the documentation, and 17 I need without knowing whether they exist. That last group is the instrumentation audit, and it is why that is the first task in the role.

Event or attribute
What I use it for
What it is
Where the certainty comes from
Where it is used
Signup and trial 8
pro_signed_up
Fires a send event
The Pro completes signup.
In use today
It fires both current flows.
trial_eligible
Gates or suppresses attribute
Whether their category offers a trial and they have not used one before.
Confirmed
The Helpcentre lists them: category, previous subscription, existing or lapsed subscription.
S1 enters
S2 enters
S8 enters
trial_used
Gates or suppresses attribute
Whether this account has already spent its trial.
Confirmed
«The free trial is only available once per account».
S1 enters
trial_started
Fires a send event
The Pro activates the trial.
In use today
Flow B starts here.
S1 enters
S1 exits
S2 enters
S2 exits
trial_active
Gates or suppresses attribute
Trial in progress.
In use today
Implicit throughout flow B.
S3 enters
trial_end_at
Content of the piece attribute
Date and time the trial ends.
In use today
D6 sends 24 h before it.
S7 enters
trial_ended
Fires a send event
The trial ends.
In use today
D7 sends afterwards.
S3 exits
trial_cancelled
Fires a send event
The Pro cancels before the end.
In use today
D7 goes to whoever cancelled.
S7 exits
Profile 2
minimum_readiness
Gates or suppresses attribute
Whether the profile reaches whatever minimum Bark requires to compete.
To verify
Provisional name. The flow uses a strong-profile on/off; how it is calculated needs confirming.
S2 enters
S2 exits
profile_component_updated
Fires a send event
The Pro completes a specific component: photo, description, services, credentials.
To verify
D2 and D5 disagree about profile state, so a single source of truth is needed.
S4 exits
Visibility and demand 5
marketplace_impression
Fires a send event
The profile appears in a search result.
To verify
It is what stops «you now appear» being claimed without data. D2 and D8 contradict each other exactly here.
S3 exits
impressions_7d
Content of the piece attribute
Appearances in the last 7 days.
To verify
D8 shows the counter, so something is measured. The latency is unknown.
S3 enters
S4 enters
data_latency_window_passed
Gates or suppresses attribute
Whether enough time has passed for the figure to be reliable.
To verify
Without this, a zero can mean «nothing happened» or «not calculated yet».
S3 enters
service_area_updated
Fires a send event
The Pro changes their service area.
To verify
Exit from the no-impressions state.
S3 exits
local_demand_band
Content of the piece attribute
Demand density for their category and area.
To verify
The data exists — D2 uses it — but I do not know its coverage or how current it is. It is the proposal's default argument.
Enquiries 5
enquiry_received
Fires a send event
An enquiry arrives for that Pro.
In use today
TREPLY reacts to this, a day late.
S4 exits
S5 enters
enquiries_7d
Content of the piece attribute
Enquiries received in 7 days.
To verify
Needed to separate «does not appear» from «appears and is not chosen».
S4 enters
enquiry_replied
Fires a send event
The Pro replies to an enquiry.
In use today
It is the most important exit in the system: it cancels the pending SMS.
S5 enters
S5 exits
S6 enters
enquiry_expired
Gates or suppresses event
The enquiry expires without a reply.
To verify
Needed so we stop chasing something already lost.
S5 exits
reported_hire
Fires a send event
The Pro marks that they won the job.
To verify
The only genuinely realised value. If it does not exist, the reply is what gets measured.
S6 enters
Payment and subscription 5
subscription_started
Fires a send event
The paid subscription begins.
In use today
The trial converts only if it is not cancelled.
S7 exits
S8 exits
subscription_charged
Fires a send event
The first month is charged.
In use today
Confirmed: «your subscription automatically continues».
payment_failed
Fires a send event
The charge fails.
To verify
There is no dunning flow today, so I do not know whether the event reaches CRM.
S9 enters
payment_recovered
Fires a send event
The payment is recovered.
To verify
Exit from the dunning ladder.
S9 exits
subscription_cancelled
Fires a send event
The subscription is cancelled.
In use today
The product already handles it.
S9 exits
S10 exits
Cancellation 4
cancel_started
Fires a send event
The Pro enters the cancellation flow, with their reason.
To verify
The reason is what makes branching possible. Today it is asked by email, after cancelling.
S10 enters
cancel_abandoned
Gates or suppresses event
They start cancelling and do not finish.
To verify
Exit from the intent state.
S10 exits
visibility_paused
Fires a send event
The profile is hidden temporarily without cancelling.
To verify
Confirmed that payments cannot be paused. If pausing visibility exists, it is the only honest save.
S10 exits
account_closed
Gates or suppresses event
The account is closed.
In use today
Exit from any state.
S1 exits
S8 exits
Channel and reachability 2
app_installed
Gates or suppresses attribute
Whether they have the app, and whether they accept push.
To verify
It governs all channel arbitration. TAPP segments on it, so something exists.
sms_consent
Gates or suppresses attribute
SMS consent by market.
To verify
Without it, SMS cannot be used as the enquiry fallback.

One flow, two pipelines, priority driven by events

A message goes out for one of two reasons: the Pro has done something, or has not done it in time.

Pipeline 1

Event-driven

HIGH PRIORITY · SECONDS

Product emits the event, the Pro's state is recalculated and, if it passes suppression, frequency and consent, it goes out on the channel the action calls for: push if it is immediate, email if it needs context, SMS only as a consented fallback. Content is resolved at send time, not pre-composed.

Pipeline 2

Time-driven

LOW PRIORITY · RESCUE ONLY · CANCELLABLE

Every milestone in the chain has a window; if the milestone does not arrive, a rescue goes out. The specific windows sit on each arrow of the proposed flow, and they all share one rule: the moment the real event happens, the pending rescue is cancelled.

Priority between journeys

Today there is one suppression rule across the whole programme. Without this layer, an incoming enquiry competes with the onboarding messages themselves.

P
Level
What belongs here
1
Security and transactional
Never suppressed. It is not marketing.
Verification, account changes, legal notices
2
Urgent enquiry
Interrupts onboarding, education and commercial. Exits on reply.
Enquiry received without a reply
3
Payment and subscription
Above anything educational. No upsell while a payment is outstanding.
Failed payment, trial ending, cancellation intent
4
Profile ready for the marketplace
One action at a time, the highest-impact one.
Profile component blocking relevance
5
Value proof and commercial
Only with evidence of value behind it.
Recap, plan fit, trial activation
6
Education and discovery
The first thing sacrificed when there is competition.
Tips, features, best practice

The 7 execution rules

It is the contract between CRM and Product. Without it, the state machine stays a diagram.

ID
Rule
How it is implemented
R1
Time only fires if the state has not changed Hypothesis
`after 24h AND state unchanged`. Never «day 3» as a reason in itself.
R2
An enquiry pauses everything else; replying resumes it Hypothesis
`enquiry_received` pauses priority 4 and below. `enquiry_replied` cancels the escalation — including the pending SMS — and re-evaluates the state. It is the case shown live in the demo.
R3
Push first; SMS only as a fallback and with consent Hypothesis
`push_delivered AND NOT enquiry_opened after X` → SMS. Never simultaneous by default. Never SMS for profile education.
R4
Deduplication on `enquiry_id` Hypothesis
Two enquiries do not create two escalation threads for the same one.
R5
A global cap per channel and per Pro Hypothesis
Weekly for email, daily for push. Transactional and urgent do not count towards the cap.
R6
Local hours and quiet hours Hypothesis
Push and SMS within the market's working hours, unless the action is actionable at that time.
R7
No fresh snapshot, no send Hypothesis
If the demand or performance data is incomplete or stale, the message does not go out. Silence beats a false zero.

When it is time to ask about the profile, which of the six

Two moments need it: before the trial, when the profile cannot compete yet, and when the Pro appears in searches but nobody picks them. In both, the rule is to ask for the first thing missing from this list, and only that one, until its exit condition is met.

Order
Component
What they are asked for
Stops being asked when
1
Reviews
reviews_count = 0
Import reviews from another platform, or ask a recent customer for one
reviews_count > 0
2
Photos and video
photos_count < 3
Add three photos of real jobs
photos_count >= 3
3
Services and pricing
pricing_status = missing OR services_count = 0
Define services and a price range
pricing_status = complete
4
Service area
service_area_invalid OR service_area_missing
Fix the service area
service_area_valid
5
Credentials
credentials_status = missing
Add a qualification, insurance or verification
credentials_status = complete
6
Description
about_length < minimum
Write the business description
about_complete

Why not `profile_score < 70`. An aggregate score does not tell a Pro with no reviews apart from one with no pricing. Those are two different blockers, with two different actions and two different resolution times. And a threshold of 70 would be a made-up number: there is nothing behind it. Inference

And the order is a proposal, not a finding. It would need agreeing with Product — who already have the analysis: the Bark Assistant reads the profile and says what to improve. The sensible thing is to lean on that engine.

Measurement: retained revenue, not opens

NORTH STAR
Incremental D60 retained subscription revenue per eligible Pro

It joins monetisation and retention in one number. It stops us celebrating a conversion that cancels before the second charge, which is exactly the risk when the subscription activates on its own.

If Finance has margin by plan, use contribution instead of gross revenue. Inference

THE FULL FUNNEL
Trial started → activation → value realised → first charge → retained subscriber

Paid conversion is automatic unless the Pro cancels, so trial-to-paid alone mixes inertia, product and CRM. What genuinely informs is how many Pros reach value during the trial.

Secondary metrics

The ones that explain the main metric

Eligible signup → trial startedEligible Pros only.
Trial → retained after the first charge
First renewalIf the value was real, it survives the second charge.
Time to first replyThe first value the Pro genuinely sees.
Reply rate on the first enquiry
Chargebacks, spam complaints and opt-outsThe guardrail: none of this may get worse while conversion rises.

Vanity metrics. Opens, clicks, deliveries, SMS cost — They tell you why a metric is not moving. They are never the result.

How I will know it works

01 Random assignment before the first message
Every eligible Pro is randomly assigned to the new flow or the current one before receiving anything. Assigning at send time compares people who were already different.
02 A group without the new flow, from day 1
The permanent holdout. It is the only way to know whether the programme adds anything or just reaches Pros who would have converted anyway.
03 The winning metric, fixed before launch
Retained subscription within the agreed window. With limits that must not get worse: chargebacks, complaints and enquiry quality.

«If trial-to-paid goes up, how do you know it was the CRM?»
By comparing the Pros who received the new flow against the holdout, on the metric fixed up front. If the difference survives the first renewal and the limits do not get worse, it was the CRM.

Roadmap, ordered by dependency

First what costs credibility, then what adds conversion, then optimisation. Foundation holds whatever blocks everything else if it is missing.

Before building anything

Foundation

Instrumentation audit and data contract 2 WEEKS
Which events exist today, with what latency and what source of truth. First task in the role.
Next action by profile component 2 WEEKS
The six components Bark already exposes, prioritised by rules.
Collision and priority rules
Priority stack, exits, deduplication and per-channel caps.
Randomised lifecycle holdout 2 WEEKS
Assignment and exposure logging from day one.
Eligibility and consent
`trial_eligible`, `sms_consent`, `push_opt_in`, reachability by channel.
For October, UK and Ireland

Launch

Enquiry orchestration 2 WEEKS
Immediate push, SMS fallback with consent, exit on reply, onboarding paused.
Trial activation and time-to-value
Diagnosis by marketplace signal: impressions, profile conversion, responsiveness.
Value recap before the charge
What they achieved, in their own data, before they are charged.
Transparent trial ending 2 WEEKS
What is charged, when, and how to cancel without calling anyone.
UK and Ireland localisation
Price, currency, tax, active categories, consent and demand density by market.
When the data justifies it

Post-launch

Cancellation decisioning by reason
Temporary capacity → pause visibility. ROI, price and lack of enquiries → different treatments.
Plan and quota fit
Upgrade only on success signals and real quota pressure.
First renewal and early health
Checks whether value holds after the initial automatic conversion.
Demand-based re-entry
Coming back when there is real demand in their area.
Advanced scoring
Only once there is volume and a baseline. Before that, rules.

Items marked 2 WEEKS are what I would launch in the first two weeks. What I would not build yet: incentives as a blanket layer, founder offers, predictive scoring or twenty journeys — until a diagnosed friction and the data justify them.

What I will show live

Three uses of AI in real CRM work. The first produced this document; the other two are shown running.

01

Analysis

Two models with me in between. Neither decides alone.

I review it myself raw notes
Claude challenges does not expand: rebuts
Codex reviews without seeing the conversation
I decide and repeat 4 rounds
02

From brief to prototype

What today is days of back-and-forth before anything is visible.

Brief goal · segment · trigger
Campaign prompt structure and variants
Figma prototype editable by design
03

From design to production

From the approved design to the dynamic template, with no rework loop with development.

Final design approved, untouched
Blocks and variables conditionals · catalogue
Iterable template dynamic, with fallbacks

What we will cover in the session

01The diagnosis of both flows, piece by piece, with every finding anchored to its email.
02The proposed lifecycle — three routes driven by events — and how it is measured in retained revenue.
03The three live demos: the analysis loop, from brief to Figma prototype, and from design to dynamic Iterable template.

MARIO CALVO · SENIOR CRM MANAGER · BARK POLARIS PRO