You’ve been a prospect for 0:000:00.You’re a lead now. It took 0:000:00.You were my prospect. Not any more.
I design and ship lifecycle programs — the CRM, the growth loops and the AI that runs them — for brands and scale-ups in Sweden, Denmark and Norway.
I’m Alexander Andersson, a CRM and lifecycle marketing consultant. This page runs a lifecycle program on you, in the open: profile, rules, messages, an off switch. Click around and watch the panel.
Free, on Google Meet. You leave with what I’d fix first.
LAST MESSAGE SENT TO YOUMSG 01
Welcome. You’re Prospect #1.
This site is a lifecycle program and you’re in it, on every page. Five rules are armed and watching this tab. The first fires after 15 seconds on screen unless you click something.
NEXT R1 Skimmer fires in 0:15 unless you click
ON THE RECORD · 15+ YEARS SENIOR CRM
IKEA Ingka Group · Head of CRM, 30+ markets Bauer Media Group · Head of CRM, 20+ brands Tibber · Vivino · Schibsted · Compricer
ON THE RECORD · 15+ YEARS SENIOR CRM
IKEA Ingka GroupHead of CRM · 30+ markets
Bauer Media GroupHead of CRM · 20+ brands, 6 markets
TibberEnergy-tech · 4 markets
Vivino · Schibsted · CompricerAlso: CDON · Adobe · HP
Flagship AI feature goes unused because the copy is already good enough
No number.
A lesson instead.
Observed · own build
ROLE / CONTEXT
Built in-house at Tibber; integrated with Braze.
WHAT SHIPPED
A brief-to-send email tool, SEO content, and an AI tone-of-voice scorer the whole platform was designed around.
RESULT
Email was the runaway winner, SEO content second. The tone scorer went unused — the copy was good enough that nobody checked. Build for the job people actually hire the tool for.
I’ve been the person who owns CRM. Now I do it for you.
ALEXANDER ANDERSSONMALMÖ · SE
For fifteen-plus years I’ve run CRM from the inside — the person the numbers land on. Head of CRM at IKEA Ingka Group across 30+ markets. Head of CRM at Bauer Media Group across 20+ brands in six markets. At Tibber — energy-tech, four markets — the referral program and Spark, the AI email tool I built on Braze.
Now I work independently, from Malmö, for a small number of clients at a time across Sweden, Denmark and Norway. I don’t hand over decks. I build the program, wire it into your stack and leave it running. When AI helps, I build the tool myself.
— Alex
IKEA Ingka GroupHead of CRM30+ markets
Bauer Media GroupHead of CRM20+ brands · 6 markets
TibberEnergy-tech4 markets · ~550k customers
Vivino · Schibsted · CompricerAlso on the recordalso: CDON · Adobe · HP
Five stages, five rules, a propensity score, one win-back and an off switch. The same mechanics I’ve built in Braze and the rest of the stack — pointed at a website visitor, with the wiring left visible. It follows you across the site: every page you open is a signal, carried from page to page in this tab’s memory.
01YOUArrivedLanded. No clicks yet.
02EngagedFirst click of any kind.
03EvaluatingTwo receipts, or one program.
04IntentA receipt and a program.
05Bookedbooking_confirmed fired.
SEQUENCE · SEND STATE PER RULE0 FIRED · 6 ARMED
R1SkimmerARMEDwaiting for you
IF 15 s on screen, zero clicks
THEN send “Skimming? Fair.” · in-page
R2Proof-seekerARMEDwaiting for you
IF receipts_opened ≥ 2
THEN send “Two receipts in.” · in-page
R3AI-curiousARMEDwaiting for you
IF interest.ai ≥ 1
THEN send “The AI bit, without the slideware.” · in-page
R4ReadyARMEDwaiting for you
IF program_viewed and 40 s on screen
THEN send “You’ve read the offer.” · in-page
R5ReturnerARMEDwaiting for you
IF back after ≥ 10 s away from this tab
THEN send “Welcome back.” · in-page
WB1Win-backARMEDwaiting for you to leave
IF pointer heads for the tab bar after 12 s, on any page · once · not booked
THEN draft “You left at m:ss. Fair.” · copy picked by p(book), then rewritten by Claude from your scoring card · email, +24 h
SUPPRESSIONBooking suppresses all sales rules. Anything unfired stands down and onboarding starts. Turning tracking off disarms everything and wipes the profile.
SCORING · p(book)ESTIMATE
p(book) = 1 / (1 + e−logit) logit = −3.20 + Σ weight × signal cap 0.92 · = 1.00 after booking · = 0 when tracking is offHow this score works, weight by weight →
RIGHT NOW, WITH YOUR NUMBERS
signal
weight
you
log-odds
receipts_openedreceipts you opened · 0–4
+0.55
0
+0.00
programs_viewedprograms you looked inside: the card, or its own page · 0–3
+0.85
0
+0.00
pages_readpages beyond the home page, 15 s or more on screen · cap 4
+0.35
0
+0.00
opened_matchopened the program marked as your match
+0.40
0
+0.00
book_intentclicks toward booking (a book button, a time), email or phone · cap 2
+0.60
0
+0.00
read_minminutes reading: a card open, or a page on screen · cap 3
+0.30
0
+0.00
active_minminutes on screen, input in the last 30 s · cap 5
+0.20
0
+0.00
scroll_depthfurthest point on screen, home page · 0–1
+0.90
0
+0.00
came_backreturns after 10 s or more away · cap 2
+0.35
0
+0.00
copied_textcopied text · the length is logged, never the text
+0.30
0
+0.00
idle_minminutes without input, after a 30 s grace · cap 4
−0.25
0
+0.00
exit_intentheaded for the tab bar, or pressed leave
−0.60
0
+0.00
intercept
−3.20
logit
−3.20
p = σ(−3.20) = 0.039
p(book) · 1 bar / 2 s4% now · peak 4%
A logistic model with hand-set weights: the same shape as a real propensity score — signals in, log-odds, a probability out. Nothing from the analytics feeds back into it, so there’s nothing to train it on. The real thing learns its weights on Databricks, XGBoost and MLflow — that’s what I build with.
EVENT STREAM· NEWEST FIRSTSOME EVENTS GO TO MY ANALYTICS · THE LOG ITSELF STAYS IN THIS TAB · 3 EVENTS
If you know what leaks, we go straight to it. If the whole program needs work, we go through it, onboarding to win-back, and I tell you where I’d start.— Alex