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.
90 sec
Booking to Brief in Slack
5 nodes
Core n8n Workflow
~15 min
Rep Prep Saved / Demo
## 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.
🏢
Company One-Liner
One sentence on what the prospect's company does, drawn from enrichment data — so the rep never opens with "tell me about your business."
🎯
3 Likely Pain Points
Tied to the prospect's stated goal from the Calendly intake form, not generic. GPT-5 grounds each one in the data it was given.
❓
2 Opening Questions
Specific questions the rep should ask in the first two minutes to qualify fast and show they did their homework.
🚫
One Thing To Avoid
A "do not say" line tuned to the prospect's role and context — the small guardrail that keeps a rep from a tone-deaf opener.
## 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 ₹740/month 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). Budget ₹0.50–₹3 per lookup.
- 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)
1
Calendly Webhook trigger
Add a Webhook node in n8n, copy its URL, and register it in Calendly for the invitee.created event. Calendly POSTs the invitee name, email, event type, and any intake-form answers.
2
Enrich from LinkedIn / company data
An HTTP Request node calls your enrichment API with the prospect's email or domain. You get back role, seniority, company size, industry, and a short company description.
3
GPT-5 prep-card generation
An OpenAI node sends the merged Calendly + enrichment data to GPT-5 with the prompt below. Set temperature low (0.3) for consistent fields, and request JSON output.
4
Route to the right rep
A Switch node maps the Calendly event type (or round-robin owner) to a Slack user ID, so the brief lands with whoever is actually taking the call.
5
Slack DM the prep card
A Slack node posts the formatted card as a direct message using Block Kit, so it's scannable in five seconds on mobile before the rep walks into the call.
### 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 |
Monthly cost (₹) |
| n8n self-hosted |
Hetzner CX22 |
₹740 |
| Enrichment API |
~300 lookups |
₹600–₹900 |
| GPT-5 API |
~300 briefs @ ~₹6 |
₹1,800 |
| Calendly + Slack |
Existing plans |
₹0 incremental |
| Total (≈300 demos/mo) |
|
≈ ₹3,140–₹3,440 |
At roughly ₹3,400/month for 300 briefs, the cost per prep card is about ₹11 all-in. If a single rep closes one extra deal a quarter because they opened the call sharp, the workflow has paid for itself many times over.
## 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 |
Cost / lookup |
Watch out for |
| People/company DB (Apollo, etc.) |
B2B with corporate emails |
₹0.50–₹2 |
Patchy coverage for small Indian firms |
| LinkedIn profile API (Proxycurl, etc.) |
Role/seniority detail |
₹1.5–₹3 |
Terms-of-use limits; check before scaling |
| Website-scrape fallback |
When the DB returns nothing |
~₹0 (your compute) |
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)
Symptom: the brief arrives, but it's generic. Cause — you skipped enrichment or the email didn't match a record. Fix: add a fallback that scrapes the company website's homepage text when the enrichment API returns nothing, and pass that to GPT-5 instead.
-
Symptom: GPT-5 invents a fact about the prospect. Cause — your prompt didn't forbid it. Fix: keep the "say unknown, never invent" rule and set temperature to 0.3. We test this with deliberately thin inputs.
-
Symptom: the DM goes to the wrong rep. Cause — round-robin owner wasn't captured. Fix: pull the assigned owner from Calendly's event-type routing, not a static map, if you use round-robin.
-
Symptom: briefs fire for internal test bookings. Cause — no filter. Fix: an IF node that drops any email on your own domain before enrichment.
-
When NOT to build this: if your team does fewer than ~5 demos a week, the setup time outweighs the saving — just keep a manual checklist. This pays off at volume.
## 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. At ~₹6 per brief the 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 ₹740/month 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?
About ₹3,140–₹3,440 a month for roughly 300 briefs — ₹740 for self-hosted n8n, ₹600–₹900 for enrichment, and ₹1,800 for GPT-5. That's around ₹11 per prep card. 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. Typical project: ₹55,000–₹95,000. Suitable if your team runs 5+ demos a week. No slides — just your Calendly link and your rep roster.
Book a 20-min Call