Mirror Mirror · Free Webinar

Open Your Unified Contact Profile

One person. One identity. Across every tool you own.

Friday, May 1, 2026 · 10:00 AM PT

Brady Hugins · Witch Haven Grove LLC

The cost you don't see

Same person. Five copies.

Anna bought a ticket to your event in 2024.

Subscribed to your newsletter in 2025.

Bought your course in March.

You have five rows for Anna. You can't see her in one view.

That's the operational cost of fragmented contacts. You're paying it whether you see it or not.

What we're building

A Unified Contact Profile is one identity per person, stitched across every tool you own.

FROM
5 rows in 5 systems. No connection.
TO
1 row that contains all 5 histories.

Every behavior shows up in one place. Engagement, revenue, churn risk — all answerable in real time.

The stack with a UCP set up

7 tables → 1 graph. Email is the spine.

SOURCES (FACTS)
  • · Stripe Payments (revenue)
  • · MailerLite (email engagement)
  • · Form intakes (intent)
  • · Event RSVPs (attendance)
  • · NFC card taps (in-person)
  • · Course logins (consumption)
  • · SMS opt-ins (channel)
UCP TABLE (DERIVED)
  • · Email (the spine)
  • · Lifetime Value
  • · Engagement Heat (decay)
  • · Days Since Engagement
  • · First Touch Source (locked)
  • · Customer Lifecycle stage
  • · Brand Tags (multi-select)

Sources keep their independence. The UCP is a derived view that reads from all of them.

How to set it up

Four steps. Roughly a weekend.

1. Pick the spine
Email, almost always. Phone is a fallback. Pick one column that uniquely identifies a person across all your tools.
2. List your sources
Every system that touches a customer. Don't try to migrate — just enumerate. 5-10 sources is normal.
3. Build the stitch
A nightly script reads each source, joins on email, persists 8–12 derived fields to the UCP. Roughly 250 lines of Python.
4. One dashboard view
Build one query: "show me everyone in lifecycle X." If you can answer that in one click, you've shipped a UCP.

Don't migrate the sources. Stitch them.

Live demo

My actual UCP

8 brands. 7 source tables. ~70 unique emails stitched.

// What I'll show you live
· The 7 sources (Stripe / ML / Venus / Cards / RSVPs / Astro / Webinars)
· cross_brand.py — the stitch logic (~250 lines)
· sync_master_contacts.py — nightly persist
· The dashboard view: "Who's about to churn?"
· The dashboard view: "Lifecycle funnel by brand"

~15 minutes. Switch to internal dashboard now.

Industry case 1

Local Business · Cafe / Boutique / Studio

PROBLEM
Loyalty card in Square, email in Mailchimp, reservations in OpenTable. No one row tells you who your regular is.
UCP UNLOCKS
Auto-flag VIPs by visit count + spend. Birthday outreach with their actual order history. Spot the regular who hasn't been in 30 days — before they're gone.

Cost saver: stop sending generic newsletters to people who already buy weekly.

Industry case 2

Course Creator · Educator / Coach

PROBLEM
Webinar in Zoom, course in Teachable, email in ConvertKit, payments in Stripe. You can't trace one student from registrant → attendee → buyer → member.
UCP UNLOCKS
Cohort funnel: webinar registered → attended → bought → finished → renewed. Conversion rate at every stage. Talk specifically to the no-shows.

Revenue unlock: the upsell offer is different for each cohort stage. UCP makes that targeting trivial.

Industry case 3

Agency / Freelancer · Multi-service operator

PROBLEM
Discovery in Calendly, contracts in HelloSign, invoices in QuickBooks, project mgmt in Notion. One client can pay you four ways. You can't see the LTV.
UCP UNLOCKS
One client = one row. All projects, all invoices, all churn risk in one place. Pricing power: you finally know which clients deserve a rate increase.

Operator unlock: stop hunting across 4 tools to remember a client's history before a sales call.

Industry case 4 · my own

Multi-brand operator · one person, many doors

PROBLEM
8 brands. 8 surfaces. Same person buys a tango ticket, downloads a Venus reading, joins a webinar. Looks like 3 strangers in 3 systems.
UCP UNLOCKS
One row tagged with 3 brand interests. Cross-sell makes sense for the first time. One person, many doors, one identity.

If you sell more than one thing — the UCP isn't optional. It's the only way you'll see your audience clearly.

Open the floor

Q&A

· What's your stack? Where would the UCP live?

· Which 5-7 sources are most important for your business?

· What question can you NOT answer about your customers right now?

Three Paths Forward

$297 ONE-TIME
DS Course
Day 2 you have your sources mapped. Day 3 your first stitch script. Day 7 your dashboard view.
$497 · 6 WEEKS
Live Cohort
6-week guided cohort. Live sessions, small room, real accountability — the course as a sprint.
$33/mo
Membership
Ongoing weekly office hours. Bring your stitch script — I'll review it live. Builder-buddy fit.

https://mirrormirror.roseinthegrove.com/ds/

"You don't have a customer problem. You have a contact problem. The customer is one person. Your data thinks she's five."

Recording lands at:

https://mirrormirror.roseinthegrove.com/ds/may-01/

Brady Hugins · Mirror Mirror · May 1, 2026

1 / 13