The locked EUK booker script. Bookers qualify and capture the profile; they do not book demos — a strong profile books a next-day Tom callback.
STEP 1Open
STEP 2Credibility
STEP 3Compliance
STEP 4Profiler
STEP 5Close
"Hi Edward, it's Marie from Enterprise UK. To jog your memory, we publish market reports and introduce new ideas to private investors. We've got you down as edward@… — is that the best email?
This year's report covers the April 2027 pension change, and how to reduce income, capital gains and inheritance tax. It also covers Unlock — the first platform where UK investors can see and compare every asset via a live register. Can I get that over to you?"
Step 3 · compliance check (qualification gate): "The information we share is restricted — typically income over £100,000, or net assets over £250,000, not counting your home or pension. Does either apply?" YES → continue · NO → send the free report, warm close, no callback.
Compliance · this first call introduces the platform (decision-support), not the EIS investment — so the capital-at-risk disclaimer attaches later, when EIS is actually promoted (Tom's follow-up / EIS pack / Proposal). Always avoid the prohibited phrases ("FCA-approved", "guaranteed return", "22p per pound", "7.8x average EIS return"). Booker-voice. Confirm the EIS-mention boundary with Tony.
Two different tools read this step: the answers feed Investor Profiling (scores the prospect); how the agent asks them feeds the Rubric (scores the agent). Profiling is mandatory for every agent-booked lead; Tom's own cold calls may skip it and go straight to Signalz.
8 Protecting what you have, or actively growing it?
9 IHT, capital gains, or income tax — biggest concern?
10 Lifestyle only, or thinking generationally — family, legacy?
Step 5 · close + availability + disposition
"Based on what you've told me, Unlock is going to be really relevant. I'll make a note — one of the directors may reach out with further information."
Availability capture (get all three):
a Best time to reach you?
b Fixed schedule or flexible?
c Days that work / days that don't?
Aircall disposition (authoritative):
Bookers no longer book demos; the booker calls back at 4–6 weeks for newsletter feedback.
Agent surface · post-call
Call feedback — Marie, call with Edward Nelson
The agent-training Rubric scores how the agent delivered the call; Agent Feedback turns it into coaching. This scores the agent. It is a different tool from Investor Profiling, which scores the prospect's suitability from the answers (on the Prospect screen).
Rubric V2 score
92
TOP · 86–100 band
Track A 94/100 normalised · Track B 18/20
Track A · execution quality earned ÷ possible, steps reached
✓ Step 1 · Open — identity + permission frame
✓ Step 1 · Open — email confirmed before continuing
✓ Step 5 · Close — warm exit + next-day Tom callback booked
Track A = items earned ÷ items possible on steps reached × 100. Unreached steps are n/a, never zero.
Tag ✓ +5Comment ✓ +5Name ✓ +5Warm exit ✓ +5
✓ Rubric realigned to the live V1.2 five-step script (Open, Credibility, Compliance, 10-question Profiler, Close). Track A items now map one-to-one to the script-runner steps.
Agent Feedback · coaching to Marie
Excellent call — a strong open, clean compliance gate, the full profiler captured, and a warm close with the next-day callback booked. This is a Top-band execution. Keep this as a reference call for new bookers.
Closer surface · Monday 29 June
Good morning, Tom
Sample closer cockpit — demonstration data.
Committed this quarter
£385K
11 closed deals · ~£35K avg
Demo → close
31%
up from 19% in Q1
New agent leads
42
qualified last week
Avg Rubric score
88
agent call quality
Ready to close
9
signalling intent now
Active pipeline
68
live prospects
Owed today
3
follow-ups you promised
Rotten demos
2
past the 3-day line
Needs you now owed follow-ups
IC
Ian Chance Committed
Send Nationwide draft · confirm Revolut transfer
2d owed
MG
Martin Green Committed
Confirm paperwork received
1d owed
SP
Sonny Purcell Engaged
Callback — review report follow-up
1d owed
Rotten — chase or drop Demo > 3d
AF
Alex Foord
Demo 25 Jun · awaiting proposal sign-off
4d
IH
Ian Hudson
Demo 26 Jun · follow-up booked
3d
Closer surface · ranked by state then suitability then readiness
Closer list
Live records, ranked. Committed deals are pinned at the top for visibility; per the sort key they drop off the active work-order once closed — the order to work is the non-Committed rows below them. A T1 who has gone quiet sinks below a T2 who just named an amount.
Demonstration view — all prospects, tiers and readiness states are synthetic sample data for illustration. Not live Pipedrive records.
Tier → action (suitability rubric): T1 ≥78 Call first · T2 60-77 This week · T3 42-59 Worth a call / nurture · T4 <42 Hold. Blank = not yet profiled (run the 10-question profiler). Note: this is the Suitability Tier (T1–T4); it is a different axis from data.md's P1–P3 priority tier.
#
Prospect
Channel
Tier
State
Readiness
Owed
IC
Ian Chance
92
Signalz readiness
Investor Profiling Stage 1 · suitability · scored once at qualification
Profiler scorecard Stage 1 · the 10 questions → suitability
The read-only published pipeline view. Refreshes on change and daily.
Demonstration view — synthetic sample prospects, not live Pipedrive records. No real PII.
Tier → action (suitability rubric): T1 ≥78 Call first · T2 60-77 This week · T3 42-59 Worth a call / nurture · T4 <42 Hold. Blank = not yet profiled (run the 10-question profiler). Note: this is the Suitability Tier (T1–T4); it is a different axis from data.md's P1–P3 priority tier.
Channel
Tier
Readiness state
Search
Prospect
Channel
Tier
State
Readiness
Next
Shared · Pipedrive (read-only mirror)
CRM board — Pipedrive deal stages
The funnel structure (Unlock Investor Funnel + EUK Reports). Stage = where the deal sits. Suitability tier and readiness state are overlays on a deal, not stages. Deals move through Proposal → Committed → Win on the rotten-day + dated-next-action discipline; two active people are still being backfilled into the CRM (the leak the system catches).
Demonstration view — synthetic sample data, not live Pipedrive records.
System · the target · for the build team
Proposed Pipedrive structure
The whole target on one screen: where leads come in, the two pipelines and their stages, what is stamped on every deal, when each scoring instrument fires, and how it publishes. This is the To-Be the W0/W1 runbook builds toward.
⚠ HOLD-before-write — this is the destination, not the current state. Nothing is built until the Tranche 0 gate is green (D4 resolved · rollback ledger · dedup before backfill).
2 · Pipedrive — the record of truth (two pipelines)
Unlock Investor Funnelpipeline 3 · renamedrule: no deal sits past its rotten-day without a dated next action
Intro Call
rotten 5d
exit: intro held, interest confirmed
Agent
›
Demo
rotten 3d
exit: demo held, next step agreed
Agent → Tom
›
Proposal
rotten 5d
exit: intent to commit
Tom
›
Committed / Paperwork
rotten 2d
exit: funds received
Tom
›
Win
terminal · invested
Tom + Madonna
Plus Lost (terminal: explicit no or dormant beyond threshold). A Leads Inbox sits before Intro Call so un-qualified dials don't inflate the funnel.
EUK Report Distributionpipeline 4 · renamed
Report Sent
exit: recipient engages
Claudia
›
Engaged / Callback NEW
exit: books an Unlock intro
Claudia → Tom
›
Lost
terminal
EUK → Unlock bridge: on booking, create a new Unlock deal on the same Person (Source = euk-email); "converted" = Won + a linked-deal stamp (a real Pipedrive primitive, not "mark converted").
3 · Stamped on every record (identity · fields · overlays)
Identity (Person)
match_keyemail → phone E.164 → name+org
one canonical Persondedup before backfill
Person — segmentation
Source / ChannelNEW
Lead OriginNEW
Relationship DepthNEW · personal/grouped
Deal — overlays
Suitability TierNEW · T1–T4
Signalz ReadinessNEW · latest only
EIS-eligibilityNEW · gate flag
Deal — kept fields
Segmentwealth band
Engagementinterest (drop "referral")
Next actionnative activity
4 · Scoring instruments — when each fires
Rubric
Grades the agent's call delivery. Fires at Intro Call. Coaching via Agent Feedback.
Investor Profiling
Scores the lead's suitability once at Intro / Qualify → writes Suitability Tier + EIS-eligibility. Rarely changes.
Signalz
Scores readiness every closer call from Demo on → Signalz Readiness. Reframed: gate low-readiness off Tom's calendar, not just rank a list.
5 · Published view (one-directional, derived)
Pipedrive
canonical record · all writes land here
›
data.md
derived ranking view (one-directional, not hand-mirrored)
›
Gated tracker
holds PII → Cloudflare Access before any external share
System · the loop · for the build team
Transcript → scored → up to you
How a raw call becomes a ranked prospect on your list. Three instruments read the transcript; one sort key decides the order you see. The detail lives in closer-loop-spec-V1; this is the picture of it.
1 · Capture — the transcript comes in
Aircall call
agent + closer calls, recorded → .txt transcript + disposition
overnight + on-demand
Gemini demo notes
demo outcome from Meet recordings
demo signal
Ingest
scheduled Claude task now → Signalz mini-app later (Roy)
W3 auto-ingest
↻ Today a daily 7am scheduled task runs this loop and writes data.md (read-only on Pipedrive). End state the Signalz mini-app + W3 auto-ingest run it event-driven, writing scores straight onto the Pipedrive deal. Same loop — the workaround retires when D4 clears.
2 · Three instruments read it — each writes a different thing
Suitability says worth the time; readiness says ready right now. Every Signalz signal cites the transcript line it was read from (source-traceability). Warm signals (names an amount, firms a timeframe, asks how to proceed) move forward; cool signals (no-shows, "send me something", IFA-as-block) slip back — carry the EIS-caution flag forward.
3 · Readiness state machine (Signalz moves them each call)
New
on the list, not yet worked
›
Engaged
real conversation, interest live
›
Evaluating
weighing it · materials/spouse/adviser
›
Ready
amount / timeframe / "how do I proceed"
›
Committed
closed
Branches from Evaluating: Stalled (was moving, went quiet — re-engage or park) · Lost (declined).
4 · The sort key — "in the way you want them"
1State Ready › Evaluating › Engaged › New › Stalled (Committed / Lost drop off the active list)
2Suitability Tier within a state, higher-capacity first
3Readiness score fine sort inside the tier (decays if untouched)
4Owed actions anyone you owe a next step jumps up (the gap the original tracker killed)
5Recency freshest movement breaks ties
→ A T1 who's gone quiet sinks below a T2 who just named an amount. That's the whole point.
5 · Surfaced up to you
Closer list
Ranked by the sort key, filterable by channel / tier / state. The order to work, top to bottom.
Triage queue per review
On a qualified callback, the profile auto-lands in your review queue with a pre-call brief (tier, persona, engine, EIS-flag, the two warm signals). You pick who to call.
Calendar gate per review
Signalz gates low-readiness deals off your calendar — protecting the binding constraint (you, the single closer), not just ranking a list.
Readiness is an internal prioritisation aid — never advice, never shown to the prospect. Capital at risk; confirm EIS suitability before pitching EIS. The Win/Lost outcome feeds back to re-weight profiling + Signalz (the learning loop).
System · planning · for the build team
CRM As-Is / To-Be
The CRM as it is today (live read, 25 Jun, read-only) against the target. The plan passed review but is on HOLD-before-write: the connection does not flip until the Tranche 0 gate is green and D4 is resolved. Nothing here changes Pipedrive.
⚠ HOLD-before-write (review 25 Jun). Direction sound, To-Be correct — but the first write is irreversible. Three blockers: no true rollback, dedup was ordered after backfill, write token unauthorised (D4). All folded into the W0/W1 runbook below.
A · Pipelines
Today (As-Is)
Target (To-Be)
1 "Pipeline" (default) · legacy
Archive (verify empty)
2 "Unlock Sep 2025" · legacy
Migrate live deals out, then archive
3 "Pipeline May 2026" · live funnel
Keep, rename Unlock Investor Funnel
4 "EUK Reports"
Keep, rename EUK Report Distribution
B · Stages Unlock funnel
Stage (As-Is)
To-Be: entry / exit / owner
Intro Call
intro held, interest confirmed · Agent
Demo · rotten 3d
demo held, next step agreed · Agent then Tom
Proposal · rotten 5d · empty
intent to commit · Tom
Committed/Paperwork · rotten 2d · empty
amount + timeframe named, funds received · Tom
Win / Lost
terminal · Tom + Madonna
To-Be adds the rule: no deal sits past its rotten-day without a dated next action (the forward loop). Intro Call: As-Is rotten is off → To-Be sets it to 5d. EUK lane: Report Sent → Lost, plus the EUK→Unlock bridge (one identity, new Unlock deal on book).
C · Custom fields
Field (As-Is)
To-Be
Aircall Tags (varchar)
Keep as the single tag field; migrate values in
Tags Aircall (text)
Retire after migration (verify which is populated first)
Workflow (set)
Keep
Engagement (set: …, referral, …)
Keep, drop "referral" (Source owns origin)
Segment (set)
Keep
Nurture (set: …, follow-up-required)
Keep; retire "follow-up-required" (native activities own next-actions)
Tier T1-T4 (once at Intro) + Signalz readiness (every closer call) as deal overlays
Duplicate Persons (Martin / Chris / Christopher)
Dedup dry-run + sign-off + merge (W1a — runs BEFORE backfill); match-key cascade email → phone E.164 → name+org, never name alone
~half the source email values are actually phone numbers
Sanitise phones out of email first (W0) or email-matching is broken
Funnel piled at Demo; Proposal/Committed empty (stall)
Moving funnel via rotten-day + dated next action
Committed/active people with no deal (the leak)
W1b backfill creates the missing deals — after dedup clears the collision-prone names
Sharlene / Sophia leads in Aircall, not in CRM
Ingest the Aircall leads (the sync gap)
Write-action sequence re-sequenced per the W0/W1 runbook
⚠ Tranche 0 gate: no write fires — manual or token — until D4 is resolved and every step below is ticked. Cowork stays read-only; merges have no undo and go last.
W0-1 Resolve D4 — name the write-token holder (Roy) + backup target; keep a read-only token live to diff each batch
W0-2 Fresh full live re-read — data.md is pipedriveReconciled: false; resolve every verify/create flag
D4PENDING — Tranche 0 blocker · write token (rec: Roy) + backup/rollback target before any write
D5CONFIRMED (re-ordered) · dedup first (W1a), then backfill — Section A (Ian Chance verified; Chris Artingstall + ~£4M EIS demo need Tom)
D6FORK — Tony + William · the calling motion is gated separately on the FCA / Targeted-Support ruling + booker-script fixes (not the CRM build)
System · for the build team
System map
Based on Werner's map. Solid arrows are material flows; dashed are information flows; red nodes are the three faults the design fixes.
flowchart TB
subgraph EV["Evidence (transcripts)"]
AC["Aircall calls + dispositions"]
GEM["Gemini demo notes"]
FF["Fireflies internal meetings"]
end
subgraph SRC["Source + funnel"]
LP["Lead Pool Supabase"]
TOM["Tom cold calls"]
PD["Pipedrive CRM of record"]
EUK["EUK Report Distribution"]
end
subgraph SC["Scoring"]
RUB["Rubric"]
PROF["Investor Profiling"]
SIG["Signalz"]
end
subgraph VW["Published view"]
DM["data.md"]
SITE["gated tracker"]
end
LP -->|"channel 1 agent-outbound"| AC
AC -->|first contact| PD
TOM -->|"channel 2 tom-outbound"| PD
EUK -.->|"channel 3 euk-email, same person"| PD
AC -.->|disposition| PD
GEM -.->|demo outcome| PD
AC --> RUB
AC --> PROF
GEM --> SIG
PROF -.->|tier| PD
SIG -.->|state + readiness| DM
PD -->|hand-maintained| DM
DM --> SITE
PD -.->|"FAULT 2 won never returns"| WON{{"phantom: Ian Chance"}}
PD -.->|"FAULT 1 no forward pull"| STALL{{"Demo pile-up"}}
DM -.->|"FAULT 3 staleness"| SITE
classDef fault fill:#3a1d1d,stroke:#ef4444,color:#f3a3a0;
class WON,STALL fault;
System · Werner's map
Data sources and tools
The seven sources, where each lives, and its read/write edge into the canonical record.
Source
Where
Edge
Status
Lead Pool
Supabase (reports on Replit)
origin to Pipedrive Person+Deal
live
Aircall
transcripts + dispositions (Drive)
disposition + activity to Pipedrive
sync gap (new agents)
Gemini demos
unlockdd.com Meet Recordings
demo outcome to Pipedrive + Signalz
cross-account, manual
Fireflies
internal meetings
to vault (not the prospect record)
live
Pipedrive
the CRM (read-only plugin)
canonical person + deal record
live, read-only
data.md to tracker to site
vault to Cloudflare Pages
derived published view
manual, gate needed
unlock-platform repo
GitHub WernerSnCW (private)
the product app + design system
live
System · data model
Schema
Pipedrive is the canonical record. Two segmentation axes kept distinct: Channel (who works it) and Lead Origin (where it came from).
erDiagram
PERSON ||--o{ DEAL : has
DEAL ||--o{ ACTIVITY : owes
PERSON ||--o{ AIRCALLCALL : received
LEAD ||--|| PERSON : becomes
DEAL ||--o| SCORE : "scored by"
DEAL ||--|| CONTACTRECORD : "published as"
PERSON {
string match_key "email then phoneE164 then name+org"
int id PK
enum channel "agent / tom / euk-email"
enum lead_origin "euk-survey / tom-network"
enum relationship_depth "personal / grouped"
}
DEAL {
int id PK
int person_id FK
enum stage "Intro to Win or Lost"
enum segment "hnw / uhnw / family-office (wealth band only)"
enum suitability_tier "T1-T4 / unscored (own field)"
int signalz_readiness "latest value only"
bool eis_eligible "gate before EIS promotion"
}
ACTIVITY {
int id PK
string subject "next action"
date due_date
string owner
}
SCORE {
enum kind "suitability / readiness"
int value
array signals "cite-bound"
}
CONTACTRECORD {
string tier
string state
int readiness
}
System · interaction diagrams
Interactions
How the sync jobs move data. Every write is idempotent on ext_key: search first, update if found, create only if absent.
Aircall ingest (overnight + on-demand)
sequenceDiagram
autonumber
participant Cron
participant Sync as Sync service
participant AC as Aircall API
participant PD as Pipedrive
Cron->>Sync: POST /sync/aircall-ingest
Sync->>AC: GET /calls?from=lastrun
AC-->>Sync: calls + tags
loop each call
Sync->>PD: GET /persons/search (dedup)
Sync->>PD: PUT /deals/{id} (tags, stage?)
Sync->>PD: POST /activities (dated next action)
end
Sync-->>Cron: 207 partial
Publish (on change + daily)
sequenceDiagram
autonumber
participant Trig as Deal change
participant Sync as Sync service
participant PD as Pipedrive
participant CF as Cloudflare Pages
Trig->>Sync: POST /sync/publish
Sync->>PD: GET deals + scores
Sync->>Sync: build data.json
Sync->>CF: wrangler pages deploy
Sync->>Sync: sha256 parity check
Sync-->>Trig: deployed_url
System · wire contract
Endpoints
12 of 13 edges in contract. The write path (E5-E10) is gated on the scoped Pipedrive token. One gap: Gemini transcripts not API-reachable.
#
Edge
Method + path
In contract
E1
Read leads
GET supabase /leads
yes
E2
Read calls
GET aircall /calls
yes
E4
Find person (dedup)
GET pd /persons/search
yes
E5
Create person
POST pd /persons
gated on token
E8
Create deal
POST pd /deals
gated on token
E9
Update deal (stage)
PUT pd /deals/{id}
gated on token
E10
Create activity
POST pd /activities
gated on token
E12
Publish
POST /sync/publish + wrangler
yes
E13
Read Gemini transcript
GET drive /files/{id}
gap
Idempotency: every write keyed on ext_key. One error envelope, one auth model per system. Full spec in the API-contract doc.
Log call outcomeIan Chance · just now
Writes to Pipedrive + data.md
Guided journeyPick a channel and walk it end to end
STEP 1 / 10
●Saved
PROTOTYPE · live Unlock design system · sample data