A prospect books a demo on Calendly. Ninety seconds later, the rep gets a Slack DM with the company's one-liner, the prospect's role, three likely pain points, and two questions to open with — all written by GPT-5. No manual research, no "let me pull up your account" fumble at the start of the call. This post is the full n8n workflow: Calendly webhook to LinkedIn enrichment to GPT-5 prep card to Slack DM, with the exact node setup and the prompt we ship.
What This Workflow Does, In 50 Words
When a prospect books a demo on Calendly, an n8n webhook fires instantly. n8n enriches the lead with LinkedIn and company data, sends it to GPT-5 with a structured prompt, and posts a formatted prep card as a Slack DM to the assigned rep — usually within 90 seconds of the booking, long before the call.
What The Rep Actually Gets
Each prep card is four fields, written to be scanned in five seconds on a phone. No essay — just what changes how the rep opens the call.
Why This Matters Now (August 2025)
GPT-5 landed earlier this month with stronger instruction-following and cleaner structured output, which is exactly what a prep-card prompt needs — consistent fields every time, not freestyle prose. Reps lose 10–15 minutes per demo to manual research, or worse, skip it and wing the opening. At even 20 demos a week, that's a wasted half-day. The trigger to build this now is simple: GPT-5 makes the "write a reliable prep card" step finally trustworthy enough to put in front of a rep unedited.
The "unedited" part is what changed. Earlier models could write a decent brief, but you'd get the occasional malformed JSON or an invented job title, which meant a human still had to glance at every card before it went out — and at that point you've barely saved any time. GPT-5's adherence to a strict output schema means the failure rate on structured fields dropped low enough that we trust the card straight into Slack. That's the difference between a demo that saves five minutes and one that saves fifteen.
What You'll Need (Prerequisites Checklist)
- n8n — v1.62 or later, self-hosted on a Hetzner CX22 or n8n Cloud Starter.
- Calendly — any paid plan that exposes webhooks (Standard and up).
- An enrichment source — a LinkedIn/company data API (Apollo, Proxycurl, or similar).
- An OpenAI API key with GPT-5 access.
- A Slack workspace with a bot token that can DM users.
- A field-to-rep map — which Calendly event type routes to which rep's Slack ID.
The 5-Node n8n Workflow (Step By Step)
invitee.created event. Calendly POSTs the invitee name, email, event type, and any intake-form answers.Why this beats the rep doing it manually
A diligent rep can absolutely research a prospect before a call. The problem is that they don't do it consistently — the 9am demo after a hectic standup gets skipped, the back-to-back afternoon means the third call gets no prep at all. Automation doesn't research better than your best rep on their best day; it researches the same on every call, including the ones a tired human would wing. Consistency is the whole value. The card also lands in Slack, where reps already live, instead of in a CRM tab they have to remember to open. Meeting people where they work is half of why automations like this actually get used rather than ignored.
The webhook payload n8n receives
Calendly's invitee.created event delivers a payload like this. You reference these fields in later nodes with n8n expressions:
{
"event": "invitee.created",
"payload": {
"name": "Anita Rao",
"email": "anita@acmelogistics.in",
"event_type": "45-min Product Demo",
"questions_and_answers": [
{ "question": "Company website", "answer": "acmelogistics.in" },
{ "question": "What are you hoping to solve?", "answer": "Manual dispatch tracking" }
],
"scheduled_event": { "start_time": "2025-08-26T10:30:00+05:30" }
}
}The GPT-5 prompt (copy this)
This is the system + user prompt we ship. It forces structured JSON so the Slack formatting never breaks:
SYSTEM:
You are a B2B sales-prep assistant. Given a prospect's details, produce a
concise pre-demo brief. Be specific and honest. If data is missing, say
"unknown" — never invent facts about the person or company. Output valid
JSON only, matching this schema:
{
"company_oneliner": string, // one sentence, what they do
"prospect_role_context": string, // what this role usually cares about
"likely_pain_points": [string], // exactly 3, tied to their stated answer
"opening_questions": [string], // exactly 2 questions the rep should ask
"do_not_say": string // one thing to avoid given their context
} USER:
Prospect: {{ $json.payload.name }}, {{ enrichment.role }} at {{ enrichment.company }}
Company size: {{ enrichment.company_size }} | Industry: {{ enrichment.industry }}
Company description: {{ enrichment.description }}
They booked: {{ $json.payload.event_type }}
Their stated goal: {{ $json.payload.questions_and_answers[1].answer }}
Demo time: {{ $json.payload.scheduled_event.start_time }}
The Slack Block Kit output
Map the GPT-5 JSON into a Slack block so the rep sees a clean card:
{
"blocks": [
{ "type": "header", "text": { "type": "plain_text",
"text": "Demo prep: Anita Rao @ Acme Logistics" } },
{ "type": "section", "text": { "type": "mrkdwn",
"text": "One-liner: {{ $json.company_oneliner }}" } },
{ "type": "section", "text": { "type": "mrkdwn",
"text": "Likely pain points:\n• {{ $json.likely_pain_points[0] }}\n• {{ $json.likely_pain_points[1] }}\n• {{ $json.likely_pain_points[2] }}" } },
{ "type": "section", "text": { "type": "mrkdwn",
"text": "Open with:\n1. {{ $json.opening_questions[0] }}\n2. {{ $json.opening_questions[1] }}" } },
{ "type": "context", "elements": [ { "type": "mrkdwn",
"text": "Avoid: {{ $json.do_not_say }}" } ] }
]
}What It Costs Per Month
| Component | Plan |
|---|---|
| n8n self-hosted | Hetzner CX22 |
| Enrichment API | ~300 lookups |
| GPT-5 API | ~300 briefs |
| Calendly + Slack | Existing plans |
How To Pick The Enrichment Source
The enrichment node is where this workflow lives or dies, and the right choice depends on who you sell to. There are three broad options, and they trade off coverage, cost, and compliance differently.
| Source type | Best for | Watch out for |
|---|---|---|
| People/company DB (Apollo, etc.) | B2B with corporate emails | Patchy coverage for small Indian firms |
| LinkedIn profile API (Proxycurl, etc.) | Role/seniority detail | Terms-of-use limits; check before scaling |
| Website-scrape fallback | When the DB returns nothing | Only gets company info, not the person |
For Indian SMB buyers, the database coverage gap is real — a 12-person firm in Indore often isn't in a US-built people database. That's why the website-scrape fallback matters: when the API returns empty, you grab the homepage and about-page text and let GPT-5 write the company one-liner from that. The person-level fields come back "unknown," which is honest and still useful. We cover the data-source trade-offs in more depth in our Apollo lead-enrichment guide.
What About Data Privacy?
You're sending prospect details to a third-party model, so handle it deliberately. Don't push more personal data than the brief needs — name, role, company, and their stated goal are enough; you don't need to forward an entire CRM record. Keep the enrichment and generation on infrastructure you control where you can, which is one more reason we self-host n8n rather than routing every prospect through a shared cloud. And set a short retention on the execution logs so prospect data doesn't sit in your workflow history for months. For Indian SaaS teams, this also keeps you cleaner against DPDP obligations as they tighten.
Common Mistakes (When This Breaks)
How To Measure If It's Actually Working
Don't assume the automation helps — instrument it. The cleanest signal is the rep's own opening: pull ten call recordings from before the workflow and ten from after, and listen to the first two minutes. Before, you'll hear "so, tell me a bit about what you do." After, you should hear the rep referencing the prospect's specific situation in the opener. That qualitative shift shows up faster than any conversion metric.
For the harder number, track demo-to-opportunity conversion for the four to six weeks after launch against the prior period. Be honest that conversion has many inputs — a single workflow won't move it in isolation, and attributing a lift entirely to prep cards is the kind of overclaim that gets automations killed when the next quarter dips. The defensible claim is narrower and still worth a lot: reps prep every call now instead of some calls, and they start sharper. If you want to A/B it cleanly, route half your reps' bookings through the workflow for a month and compare. Most teams skip the A/B and just keep it once reps refuse to give up the Slack card — which, in practice, is the adoption signal that matters most.
A Real Example: A 6-Rep SaaS Team In Pune
We built this for a 6-rep SaaS sales team in Pune that was running ~80 demos a month with zero consistent prep. After the workflow went live, reps reported saving 10–15 minutes per call and — more usefully — stopped opening with "so, tell me about your business." We use the same Slack-DM pattern internally to brief the team before TalkDrill partner calls; it's the same automation discipline our AI & automation team applies on client builds. We've shipped close variants of this before — see our 2025 walkthrough on the n8n + HubSpot + ChatGPT auto-brief and the Calendly + HubSpot version; this one swaps in GPT-5 and LinkedIn enrichment with Slack delivery.
For the enrichment half of the pipeline, our Apollo + HubSpot lead-enrichment workflow covers the data-source choices in more depth, and the same team built a lead pipeline for Radiant Finance on these patterns.
Frequently Asked Questions
How fast does the brief actually reach the rep?
Typically within 90 seconds of the Calendly booking. The slow step is the enrichment API call (1–3 seconds) and GPT-5 generation (5–15 seconds); the rest is near-instant. The rep gets the Slack DM long before the demo, often days ahead.Why GPT-5 instead of a cheaper model for the prep card?
GPT-5's stronger instruction-following keeps the JSON schema consistent, which is what makes the Slack formatting reliable. The per-brief cost is trivial. A cheaper model works, but you'll spend more time fixing malformed output and hallucinated facts.Do I need to self-host n8n for this workflow?
No — n8n Cloud runs it fine. We self-host on a Hetzner box because at 300+ executions a month it's cheaper and keeps prospect data on our own infra. For under ~100 demos a month, n8n Cloud Starter is simpler.How do I stop GPT-5 from inventing details about the prospect?
Two controls: an explicit prompt rule to output "unknown" rather than guess, and a low temperature (0.3). Test it with deliberately sparse inputs — a prospect with no LinkedIn match — and confirm it returns "unknown" instead of a fabricated bio.Can this route briefs to different reps automatically?
Yes. A Switch node maps the Calendly event type or round-robin owner to each rep's Slack user ID. If you use Calendly round-robin, pull the assigned owner from the event payload rather than a static map so reassignments are respected.What's the all-in monthly cost for a small team?
It scales with volume. For roughly 300 briefs a month, the only running costs are self-hosted n8n, enrichment lookups, and GPT-5 calls. Existing Calendly and Slack plans add nothing incremental.Want this sales-prep automation built?
We build the full Calendly to GPT-5 to Slack workflow on your n8n — enrichment source, prompt, rep routing, and tested fallbacks. We ship a working v1 in 7 working days. Suitable if your team runs 5+ demos a week. No slides — just your Calendly link and your rep roster.
Book a 20-min CallRelated reading
