We ran a two-week holdout experiment with a 14-person UK SaaS sales team last February. Half the reps received an automated AI brief in Slack 15 minutes before each discovery call — the prospect's last LinkedIn post, active job postings, most recent CRM note, and one competitor mention if publicly visible. The other half prepared as usual: a HubSpot tab, a LinkedIn tab, and whatever they remembered from the opportunity record. Close rate from discovery to second meeting: 31% with the brief, 25% without. The brief group ran 18% longer first calls and asked 2.4 more qualifying questions on average. We shipped the automation to the full team on day fifteen. Here is how it is built.
What discovery call prep actually requires: the six data points that change the conversation
The standard AE prep ritual — open CRM, scan the contact record, search LinkedIn, check the company website — takes 8 to 12 minutes and surfaces different information each time depending on what the rep clicks first. It is not systematic, it does not scale, and it produces inconsistent output depending on how much time the rep has before their next call.
What consistent prep needs to surface, every time:
- Recent LinkedIn activity — the prospect's last post or comment in the past 30 days. Current priority, current language, and trigger events that never make it into a CRM note.
- Job postings — what the company is actively hiring for. Three SDRs and a RevOps Manager signals a growth bet. A CFO posting signals transition.
- CRM interaction history — the last three touchpoints with the account, not just the contact. Did another rep speak with someone else here six months ago?
- Previous meeting notes — any call summaries on the opportunity, summarised to two sentences.
- Company news — one headline from the past 90 days: a funding round, a product launch, or a leadership change.
- One open question — generated by the enrichment layer based on gaps between what you know and what you need to qualify the deal.
That last point is what most teams skip. A brief that compiles facts is useful. A brief that also surfaces what you do not yet know — and why that gap matters for qualification — is what changes close rates.
Research brief design: the format AEs will open in the 90 seconds before they dial
The format matters as much as the content. We tested three layouts over four weeks. The version that was opened 91% of the time was a single Slack message, under 280 words, with six named sections and no paragraph longer than two sentences.
| Section | Max length | Source |
|---|---|---|
| Prospect name, title, company | 1 line | CRM |
| Last LinkedIn post (with date) | 2 sentences | LinkedIn / Phantombuster |
| CRM last touch summary | 2 sentences | HubSpot or Salesforce |
| Active job postings (top 2 roles) | 2 bullet points | Adzuna or LinkedIn Jobs |
| Company news item | 1 sentence | Google News |
| Open question for the call | 1 sentence | LLM enrichment layer |
The open question prompt: "Given what we know about this company, what is the single most important thing the rep does not yet know that would change how they qualify this deal?" That consistently produces sharper questions than anything written in ad-hoc prep. Keep the total brief below 300 words — AEs on mobile close anything that requires more than two scrolls.
LinkedIn signal extraction: what to surface and how to pull it automatically
LinkedIn's official API does not give you open access to user posts. Sales Navigator's API tier requires an enterprise agreement that is out of reach for most UK SME sales teams. The practical paths:
- Phantombuster or equivalent scraper — scheduled nightly, exports the last five posts for each watchlist prospect to a Google Sheet or Postgres table. Around £50 per month for typical UK SME volumes.
- Clay's LinkedIn enrichment column — if you already use Clay for prospecting, the activity waterfall slots in alongside ICP scoring. We cover the Clay approach in our CRM enrichment and ICP scoring build guide and in the Apollo vs Clay vs Lusha comparison for UK prospecting.
- Manual paste with an AI rewriter — the rep copies a post pre-call, the brief system formats it into a one-sentence signal. Lower fidelity but fully compliant with LinkedIn's ToS.
The signal we want is not biographical. We know the prospect's title. We want their active concerns: what they are writing about this month and what problems they are publicly naming. "Struggling to get CRM adoption across the sales team" beats "VP of Revenue Operations" every time. For building the prospect watchlist that feeds the scraper, our LinkedIn Lead Generation Systems post covers list construction and maintenance for UK B2B audiences.
CRM history retrieval: surfacing relevant touchpoints without drowning the rep in noise
The most common failure mode in HubSpot-connected brief systems is pulling all engagement history and passing it to the LLM. A contact with 18 months of touchpoints generates a wall of text that the model then summarises poorly, because it is working with too much noise relative to signal.
Filter the CRM pull to: - Last three notes or call summaries from the past 90 days - Any notes tagged with deal stage or flagged as qualification - Email thread count only (not content) to signal engagement level - Any logged objections from a prior call
In HubSpot, that means a filtered properties fetch — not the full engagements endpoint. In Salesforce, a SOQL query against Task and Event with CreatedDate > LAST_N_DAYS:90 and Type = 'Call' keeps the context tight.
Pass the output to the LLM as structured prose, not raw JSON:
"Most recent HubSpot note (14 June): 'Spoke with Sarah, interested in SDR automation, concerned about GDPR compliance. Follow-up agreed for July.' Interaction count: 3 emails, 1 call in past 90 days. Deal stage: Discovery."
That 50-word summary outperforms 2,000 words of raw CRM history every time. See our LinkedIn AI SDR case study for how we built a similar CRM enrichment layer for inbound-to-outbound context continuity.
Job posting signals: what active hiring tells you before the call starts
Active job postings are a public signal most AEs ignore. A company posting for a Head of Sales Operations in Manchester is telling you, without asking, that their current process has broken at scale. Three open SDR roles means someone has already approved a growth budget. Zero open roles either means they are healthy or contracting — knowing which is half the qualification.
For UK B2B, Adzuna's job posting API gives programmatic access to UK postings at a cost well below LinkedIn's data tier. Feed the company name into an Adzuna search, return the top five open roles, and ask the LLM to summarise in one sentence: "Three SDR roles open in Manchester — signals outbound headcount investment."
The hiring signal does more than tell you what the company needs. It tells you who else is about to enter the buying conversation. A "Head of Data" hire means someone new will soon influence tooling decisions. A "Sales Operations Manager" role means the RevOps function is being built or rebuilt — exactly the moment a process automation conversation lands.
Building the automation in n8n or Make: trigger, sources, brief assembly, and Slack delivery
The trigger is a calendar-based node that fires 15 minutes before any meeting tagged "Discovery Call" in Google Calendar or Outlook. In n8n, this is a scheduled trigger polling the Calendar API every 5 minutes with a time window filter. In Make, it is a calendar watch module that fires on event start minus 15 minutes natively.
The core n8n workflow:
{
"name": "Discovery Call Brief – Pre-Call 15min",
"nodes": [
{
"type": "n8n-nodes-base.scheduleTrigger",
"name": "Poll Every 5 Minutes",
"parameters": { "rule": { "interval": [{ "field": "minutes", "minutesInterval": 5 }] } }
},
{
"type": "n8n-nodes-base.googleCalendar",
"name": "Upcoming Discovery Calls",
"parameters": {
"timeMin": "={{ $now.toISO() }}",
"timeMax": "={{ $now.plus({minutes: 20}).toISO() }}",
"query": "Discovery Call"
}
},
{
"type": "n8n-nodes-base.httpRequest",
"name": "Resolve CRM Contact by Email",
"parameters": {
"url": "https://api.hubapi.com/contacts/v1/contact/email/{{ $json.attendeeEmail }}/profile",
"authentication": "headerAuth",
"headerAuthKey": "Authorization",
"headerAuthValue": "Bearer YOUR_HUBSPOT_TOKEN"
}
},
{
"type": "n8n-nodes-base.httpRequest",
"name": "Adzuna Job Postings",
"parameters": {
"url": "https://api.adzuna.com/v1/api/jobs/gb/search/1",
"qs": {
"app_id": "YOUR_APP_ID",
"app_key": "YOUR_APP_KEY",
"what_and": "={{ $json.companyName }}",
"results_per_page": 5
}
}
},
{
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"name": "Assemble Brief",
"parameters": {
"model": "gpt-4o-mini",
"systemPrompt": "You are assembling a 250-word pre-call brief for a B2B sales rep. Be specific. Surface one open qualification question at the end.",
"userMessage": "CRM notes: {{ $('Resolve CRM Contact by Email').item.json.properties.notes.value }}. Jobs: {{ $('Adzuna Job Postings').item.json.results }}. LinkedIn last post: {{ $('LinkedIn Fetch').item.json.lastPost }}"
}
},
{
"type": "n8n-nodes-base.slack",
"name": "Deliver to Rep",
"parameters": {
"channel": "={{ $json.repSlackId }}",
"text": "*Pre-call brief: {{ $('Resolve CRM Contact by Email').item.json.properties.firstname.value }} {{ $('Resolve CRM Contact by Email').item.json.properties.lastname.value }}*\n\n{{ $('Assemble Brief').item.json.text }}"
}
}
]
}
One known failure mode: the calendar invite attendee field contains the prospect's work email, not a CRM contact ID. The HubSpot contact-by-email endpoint resolves this before the enrichment steps fire. Without the lookup step, around 30% of briefs fail silently on first deploy. Build the lookup step first.
Make's equivalent: Google Calendar Watch → HubSpot Search Contact → Adzuna HTTP → OpenAI → Slack. Make triggers natively on calendar events without polling, cutting brief delivery latency by 2–3 minutes versus the n8n scheduled approach.
Measuring the impact: what changes in close rate and discovery call quality metrics
Close rate from discovery to second meeting is the primary metric. Track it per rep, not in aggregate — a team-level number will mask whether the brief is working for junior reps but not senior ones.
Secondary metrics worth tracking:
- Average call duration — longer calls correlate with more qualifying questions and higher pipeline quality
- Qualification completeness — if reps use MEDDIC or BANT, score what percentage of fields are populated in the CRM within 30 minutes of each call
- Brief open rate — track whether the Slack DM was read within the 15-minute window; below 50% means the format or timing is wrong
A 10-day A/B holdout is enough to see signal at 15+ discovery calls per week. Below that volume, extend to four weeks. The SDR-to-AE handoff automation post covers instrumenting the handoff stage to control for lead source variance in your holdout.
What changed in 2025–2026: HubSpot Breeze call prep and AI-native CRM research assistants
In late 2024, HubSpot shipped Breeze Intelligence, which includes a pre-meeting brief pulling LinkedIn company data, recent news, and CRM interaction history into a sidebar before each meeting. By Q1 2025 it was available on all paid tiers. The output is genuinely good for the first 30 seconds of a call. It does not include job posting signals, it does not surface a structured open question, and it delivers in-app rather than to Slack — which means field AEs away from their laptop often miss it.
Salesforce Einstein Call Guidance and Gong's Call Preparation feature moved in the same direction through 2025. Gong's own research offers a useful counterpoint: their analysis of 300,000 discovery calls found that in-call behaviour — talk ratio, questions per minute, silence management — predicted deal progression more reliably than pre-call research quality. The brief helps. It does not substitute for training reps to ask better questions once they are on the call.
Practical implication for 2026: if your team is on HubSpot Professional or Enterprise, Breeze reduces the build scope. Skip CRM note summarisation and company bio — Breeze handles both. Add the job posting layer, the LinkedIn activity feed, and the structured open question on top, and you outperform the native feature in about two days of n8n work.
Good / Bad / Ugly: three brief formats and how AEs actually used each one
During the experiment, we tested three formats before settling on the structured Slack block. Here is what we observed:
Good — Structured 250-word Slack block with six named sections
Open rate: 91%. Reps used it in the 90-second window before dialling. The most-cited section in post-call feedback was "last LinkedIn post" — 7 of 8 reps mentioned it. Three reps used the open question verbatim in week one; by week two, five were adapting it rather than reading it directly, which is the behaviour you want.
Bad — Paragraph-form narrative brief
Open rate: 73%. Three reps said it "read like a summary email" and skipped it on back-to-back call days. The narrative buried the open question midway through the third paragraph. One rep: "something I'd read after the call to write notes, not before it."
Ugly — Full CRM dump with all engagement history
Open rate: 41%. One rep called it "opening my inbox at the worst possible moment." The dump included 14 months of activity and 2,300 words. Three reps turned off brief notifications after day three. It contained the most accurate information of the three. Format killed utility entirely.
The conclusion: structure beats completeness. An AE with 90 seconds before dial needs to scan six labelled sections, not read a document. The same enrichment signals that power the brief — LinkedIn activity, CRM notes, job postings — apply equally to personalised follow-up sequences; our AI cold email personalisation at scale guide shows how to carry those signals forward into outreach copy after the discovery notes are logged.