The Situation
A growing database. Declining results.
A B2B SaaS company had been building their email list for years. By the time we audited it, the database had 26,000 contacts spanning 10+ countries, multiple product lines, and a wide range of job titles and seniority levels.
Open rates were flat. Bounce rates were climbing. The team had been sending the same email to everyone — same timing, same content, same message — regardless of whether a contact was a prospect, a customer, a partner, or someone at a completely different funnel stage.
The problem was not the email copy. It was the infrastructure underneath. Invalid contacts were dragging down deliverability. Emails were going out at the wrong time for each country. There was no persona grouping, no funnel-stage personalisation, and no connection between lead score and content.
Before — Audit Findings
What the audit found
| Problem | Detail |
| Total contacts in database | 26,000 — accumulated across multiple years |
| Email validity | Unknown — no verification had ever been run |
| Bounce rate | 6–8% per campaign — sender reputation at risk |
| Country data coverage | Near zero — no timezone-aware sending possible |
| Persona grouping | None — all contacts received identical emails |
| Funnel stage personalisation | None — no connection between lead score and content |
| Lifecycle stage automation | Manual updates only — inconsistent and delayed |
| Send timing | One global send time regardless of contact location |
| Unsubscribe trend | Gradually increasing over prior 6 months |
The root cause: the email system had been built for volume, not precision. As the database grew, the gap between what was being sent and what each contact actually needed kept widening.
The Fix
What we built — and why this order matters
The order matters. Personalising emails to invalid contacts wastes every step downstream. We cleaned before we personalised.
Deliverability First
Verify Before Anything Else
- Ran full database through NeverBounce email verification
- Result: 21,000 valid contacts confirmed out of 26,000
- 5,000 invalid contacts removed — protecting sender reputation before the next send
- Suppressed bounced, invalid, and risky addresses from all active lists and sequences
Enrichment at Scale
Country Enrichment — 90% Coverage
- Enriched country data for all valid contacts using enrichment tools
- Result: 19,000 of 21,000 contacts enriched with country (90% coverage)
- Covered 10+ countries across EMEA, North America, and APAC
- This directly enabled timezone-optimised sending — impossible without country data
Segmentation Foundation
Prospect / Partner / Customer Separation
- Contact type segmentation was already in place — used as the foundation for all downstream personalisation
- Customers excluded from all prospect nurture sequences — no more cold outreach to paying accounts
- Partners routed to partner-specific communications only
- Prospects segmented by funnel stage using existing lead scoring model
Send Time Optimisation
Country-Based Send Timing
- Built send-time logic using enriched country data
- Each country group now receives emails at their optimal local open window
- Removed the single global send time that was hitting US contacts at midnight and APAC at 3am
- This single change contributed significantly to the open rate improvement
Persona Personalisation via Clay
Job Title → Persona Grouping
- 90% of contacts had job title populated — used as raw material for persona mapping
- Used Clay to group job titles into 5–6 defined personas
- Each persona mapped to a specific messaging angle and content type
- All personalisation logic built in Clay, then synced back to HubSpot contact properties
- Result: every email now speaks to the contact's role, not just their first name
Funnel-Stage Content
Lead Score → Buyer Journey Content
- Existing lead scoring model used to determine funnel stage for each contact
- Top-of-funnel prospects received awareness and education content
- Mid-funnel contacts received comparison and consideration content
- Bottom-of-funnel prospects received decision-stage and offer content
- Right message to the right person at the right stage — automated, not manual
Lifecycle Automation
Lead Score → Lifecycle Stage (Automated)
- Built automation to update lifecycle stage based on lead score thresholds
- Score changes now trigger automatic lifecycle stage progression in HubSpot
- Eliminated manual lifecycle updates entirely — contact moves through the funnel automatically
- Contact always receives content appropriate to their current stage — not where they were 3 months ago
After — What Changed
Before and after
| Metric | Before | After |
| Total contacts | 26,000 | 21,000 verified valid |
| Bounce rate | 6–8% per campaign | 1.2% |
| Open rate | Flat baseline | +15–17% increase |
| Click rate | Flat baseline | +6% increase |
| Country data coverage | Near zero | 90% (19,000 contacts) |
| Persona grouping | None | 5–6 personas defined and active |
| Send timing | One global time | Country-optimised per send |
| Lifecycle stage updates | Manual — inconsistent | Automated via lead score |
| Unsubscribe trend | Gradually increasing | Gradually decreasing |
| Funnel-stage personalisation | None | 3-stage content by buyer journey |
The Key Insight
What most teams get wrong about email performance
"Most companies blame the copy when open rates are low. The real problem is almost always the infrastructure — who you're sending to, when you're sending, and whether the message matches where they actually are in the buying journey."
The biggest unlock was treating email as an infrastructure problem, not a content problem. Once the foundation was right — valid contacts, correct timing, persona-matched content, funnel-stage alignment — the results followed automatically.
1
Verify before personalising — sending personalised emails to invalid contacts wastes every step downstream. Deliverability is the foundation.
2
Enrich before segmenting — you cannot send at the right time without country data. You cannot persona-map without job title. Enrichment enables everything else.
3
Segment before personalising — persona grouping in Clay transformed 40+ job title variations into 5 clear messaging tracks. Personalisation at scale requires this layer.
4
Connect lead score to content — the scoring model already existed. Connecting it to content delivery and lifecycle automation made it do real work for the first time.
What This Unlocked
Business outcomes
📉
Bounce rate: 6–8% → 1.2%Sender reputation protected. Deliverability issues stopped before they became permanent.
📈
Open rate: +15–17%Country-optimised timing and persona-matched subject lines drove the lift across all segments.
🎯
Click rate: +6%Funnel-stage content meant contacts were receiving offers relevant to where they actually were in the buying journey.
🔄
Lifecycle automation liveContacts now move through the funnel automatically as their lead score changes. No manual updates needed.
👥
5–6 personas activeEvery email now speaks to the contact's role and function — not just their first name.
📊
Unsubscribe rate decliningBetter relevance reduced friction. Contacts receiving the right content at the right time stopped opting out.
Recognise any of this?
If your email metrics are flat, your bounce rate is climbing, or you are sending the same message to everyone regardless of persona or funnel stage — this is the exact work I do.
Book a free 20-min HubSpot teardown →
Fixed scope. Fixed price. You will know exactly what is broken before committing to anything.