🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Cal.com + Slack: qualify demo leads, follow up faster

Lisa Granqvist Partner Workflow Automation Expert

Demo requests are supposed to be a good problem. Then your inbox fills up with “students,” competitors, and people who aren’t even in your market, while the real buyers wait too long.

This Cal.com Slack automation hits sales leads and marketing ops first, but founders feel it too. You get faster qualification, cleaner routing, and follow-ups that don’t sound like copy-paste templates.

Below, you’ll see how the workflow handles intake, enrichment, AI qualification, booking verification in Cal.com, and the handoff to Slack and your nurture campaign.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Cal.com + Slack: qualify demo leads, follow up faster

The Problem: Demo requests pile up, but the wrong ones get attention

Inbound demo forms look simple until you’re living with them. Someone submits a request with a LinkedIn URL, a vague “use case,” and an email that might be personal, might be corporate. You check the profile, skim the company site, decide if they’re in your target region, then try to figure out if they actually booked a slot in Cal.com. Meanwhile, the fastest responder wins, which means you’re forced to treat every lead like it’s hot even when it clearly isn’t. It’s tiring. And honestly, it’s a quiet conversion killer.

It adds up fast. Here’s where the friction usually shows up in real teams.

  • You lose 10–15 minutes per lead just verifying who they are and what they do.
  • Low-quality sources sneak in, so sales ends up chasing leads that never convert.
  • Booked and unbooked requests get mixed together, which means follow-ups are mistimed and awkward.
  • “Personalized outreach” becomes a scramble, so messaging quality drops right when it matters.

The Solution: AI-qualify demo requests, verify bookings, and route follow-ups automatically

This n8n workflow turns every demo request into a clean, qualified record with the right next action attached. It starts the moment your website form hits an incoming webhook, then quickly filters out known low-quality sources so they don’t consume attention. For the leads that pass, the workflow enriches the person and company data using the Trigify API (based on the LinkedIn URL and other form fields). After that, an AI qualification agent reviews the enriched context and scores the lead against the rules that usually live in someone’s head: B2B fit, target geographies, seniority signals, and current employment. Finally, it checks Cal.com to see whether the lead actually booked. If not, the workflow generates research-backed follow-up messaging and pushes the lead into an Instantly.ai campaign, while keeping your systems updated through HTTP requests (for example, Clay tables) and internal flags.

The workflow begins with a real-time webhook submission. Then it enriches and qualifies the lead using AI, so you’re not relying on gut feel. After a short delay, it verifies booking status in Cal.com and routes non-booked but qualified leads into a personalized follow-up sequence.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you get 20 demo requests a week. Manually, it’s easy to spend about 10 minutes checking LinkedIn, 5 minutes verifying the company, and another 5 minutes confirming Cal.com booking status, so roughly 20 minutes per lead (around 6–7 hours weekly). With this workflow, you spend maybe 2 minutes scanning the Slack alert and only step in when the lead is actually sales-ready or needs a human touch. The rest runs in the background, including enrichment and a personalized follow-up for qualified people who didn’t book.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Cal.com to verify booking status via API.
  • Slack for instant alerts to your sales channel.
  • Trigify API key (get it from your Trigify dashboard).

Skill level: Intermediate. You’ll connect a few APIs, map fields, and adjust the qualification rules to match your ICP.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A demo request hits your webhook. The form submission arrives in n8n in real time, including email, LinkedIn URL, use case, and referral source.

Low-quality sources get gated. An “If” check looks at the submission source (for example, “lead_capture_box”) and routes obvious junk away from the expensive steps like enrichment and AI analysis.

Enrichment + AI qualification happens next. n8n calls Trigify to pull richer LinkedIn and company data, then an AI agent evaluates fit (B2B validation, geography, seniority signals, and employment). The result is parsed into structured fields so it’s actually usable, not just a blob of text.

Cal.com booking status gets verified after a short delay. The workflow waits, checks the Cal.com API, and branches based on booked vs. not booked. Qualified-but-unbooked leads get personalized follow-up research (including web research) and are added to Instantly.ai for nurturing, while your systems are updated via HTTP requests.

You can easily modify the qualification criteria to match your ICP, or change where “qualified” leads go (Slack, Clay, Sheets, CRM) based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Webhook Trigger

Start by setting up the inbound webhook so your website intake data can enter the workflow and receive a response.

  1. Add the Incoming Webhook Trigger node and set HTTP Method to POST.
  2. Set the Path to [REDACTED_WEBHOOK_PATH] (replace with your live endpoint path).
  3. Set Response Mode to responseNode so the workflow uses Return Webhook Reply for the HTTP response.
  4. Connect Incoming Webhook Trigger to Source Gate Check to begin routing after intake.

⚠️ Common Pitfall: Make sure your website form sends JSON with body.source, body.email, and body.linkedinUrl so downstream expressions resolve correctly.

Step 2: Connect Clay and Trigify Enrichment

This step gates incoming traffic and routes unbooked leads to Clay, while enriching qualified sources via Trigify.

  1. In Source Gate Check, set the condition Left Value to {{ $json.body.source }} and check it contains lead_capture_box.
  2. For the “true” path, configure Send to Clay Unbooked with URL https://api.clay.com/v3/sources/webhook/pull-in-data-from-a-webhook-[REDACTED_CLAY_WEBHOOK_ID] and Method POST.
  3. In Send to Clay UnbookedBody Parameters, set: Data of Demo Booked to {{ $('Incoming Webhook Trigger').item.json.body.timestamp }}, Qualified to NOT BOOKED, and Email to {{ $json.body.email }}.
  4. For the “false” path, configure Fetch Trigify Enrichment with URL /v1/profile/track and set the query parameter url to {{ $json.body.linkedinUrl }}.

⚠️ Common Pitfall: Replace [REDACTED_CLAY_WEBHOOK_ID] with your Clay webhook ID and ensure your Trigify endpoint base URL is set at the node level or in environment variables.

Step 3: Set Up AI Qualification Logic

Use AI to determine qualification, then route leads into qualified or unqualified Clay pipelines and return the webhook response.

  1. Configure AI Qualification Logic with Text set to =Analyse this person, ensure their current company the work for is a B2B company Based on this company descrption give me a True or false if this company is a B2B company - industry - {{ $json.position[0].companyIndustry }}company name - {{ $json.position[0].companyName }}company size - {{ $json.position[0].companyStaffCountRange }}I also only want to speak to countries that are in the US, UK, Europe or AustraliaLocation - {{ $json.geo.country }} {{ $json.geo.countryCode }}Their job title needs to also be a senior job title so anything that countains, Head of, Director, VP, C-level.ORIt contains the following keywords - Influencer, Strategy OR it contains GTM or Growth regardless of the seniorty wich is TRUE regardless of seniorty.Job title - {{ $json.position[0].title }}Employment Status - {{ $json.position[0].employmentType }}Start Date - {{ $json.position[0].start.year }}End Date - {{ $json.position[0].end.year }}IF all true mark as true is 1 thing is false mark as false. IF one of these is false and the rest are true mark as true. Unless the location contains India, Pakistan, Banglisdesh etc.If their job title contains Advisor, Contractor, Creator, Investor, Host etc (essentually any job title that suggests they could be wokring thier part time just their second job experience)industry - {{ $json.position[1].companyIndustry }}company name - {{ $json.position[1].companyName }}company size - {{ $json.position[1].companyStaffCountRange }}Start Date - {{ $json.position[1].start.year }}End Date - {{ $json.position[1].end.year }} {{ $json.position[1].end.month }} {{ $json.position[1].end.day }}If their end data in their second job has older than todays date you know they no longer work their..
  2. Attach Anthropic Chat Engine as the language model for AI Qualification Logic.
    Credential Required: Connect your anthropicApi credentials.
  3. Attach Parse AI Result as the output parser for AI Qualification Logic and set JSON Schema Example to { "result": true }. (Parser is a sub-node; keep credentials on Anthropic Chat Engine.)
  4. In Qualification Branch, set the condition to evaluate Left Value {{ $json.output.result }} with the boolean true operation.
  5. Configure Send to Clay Qualified and Send to Clay Unqualified with their respective Clay webhook URLs and body parameters like Email {{ $('Incoming Webhook Trigger').item.json.body.email }} and Company Name {{ $('Fetch Trigify Enrichment').item.json.position[0].companyName }}.
  6. Set flags using Set Qualified Flag (output = true) and Set Unqualified Flag (output = false), then connect Set Qualified Flag to Return Webhook Reply.

Tip: Keep Return Webhook Reply immediately after Set Qualified Flag to respond quickly to the webhook while follow-up tasks continue later.

Step 4: Configure Booking Check and Delay

After responding to the webhook, the workflow waits, checks for a booking in Cal.com, and only then triggers the AI follow-up.

  1. In Delay Timer, set Unit to minutes and define your wait duration.
  2. Configure Check Cal Booking with URL https://api.cal.com/v2/bookings and query parameter attendeeEmail set to {{ $('Incoming Webhook Trigger').item.json.body.email }}.
  3. In Check Cal BookingHeader Parameters, set Authorization to Bearer [CONFIGURE_YOUR_API_KEY] and cal-api-version to 2024-08-13.
  4. In Booking Status Check, set the condition to check Left Value {{ $json.data[0].start }} is notEmpty.

⚠️ Common Pitfall: Replace [CONFIGURE_YOUR_API_KEY] with your Cal.com API key or the booking check will always fail.

Step 5: Configure AI Follow-up and Instantly Delivery

If no booking is found, an AI follow-up sentence is composed with web research and the lead is added to Instantly.

  1. Configure AI Followup Composer with Text set to Run task. and System Message set to the provided prompt beginning with =Prospect Follow-Up Email Generator and ending with Now, please research the prospect's company and provide your improved sentence..
  2. Attach Anthropic Chat Engine 2 as the language model for AI Followup Composer.
    Credential Required: Connect your anthropicApi credentials.
  3. Attach Parse Followup Output as the output parser and set JSON Schema Example to { "Sentence": "I'd love to show you exactly how you can leverage our Social Intelligence tool to help you research emerging telecom trends and customer sentiment patterns, giving HLR Lookup a competitive edge in identifying new market opportunities before other mobile validation providers even know they exist." }. (Parser is a sub-node; keep credentials on Anthropic Chat Engine 2.)
  4. Configure Web Research Tool with URL https://api.openai.com/v1/responses, Method POST, and JSON Body { "model": "gpt-4o", "tools": [{"type": "web_search_preview"}], "input": "{placeholder}" }. Add Authorization header Bearer [CONFIGURE_YOUR_API_KEY]. This tool is attached to AI Followup Composer, so manage model credentials on the parent node.
  5. Configure Add Lead to Instantly with URL https://api.instantly.ai/api/v2/leads and set the JSON Body to { "campaign": "[YOUR_ID]", "email": "{{ $('Incoming Webhook Trigger').item.json.body.email }}", "first_name": "{{ $node['Fetch Trigify Enrichment'].json.firstName }}", "last_name": "{{ $node['Fetch Trigify Enrichment'].json.lastName }}", "company_name": "{{ $node['Fetch Trigify Enrichment'].json.position[0].companyName }}", "custom_variables": { "research": "{{ $json.output.Sentence }}" } }.
  6. In Add Lead to InstantlyHeader Parameters, set Authorization to Bearer [CONFIGURE_YOUR_API_KEY] and Content-Type to application/json.

⚠️ Common Pitfall: Replace [YOUR_ID] and [CONFIGURE_YOUR_API_KEY] with live Instantly credentials, or lead creation will fail.

Step 6: Test and Activate Your Workflow

Verify data flows through qualification, booking checks, and follow-up delivery before enabling the workflow for production.

  1. Click Execute Workflow and send a test POST request to the Incoming Webhook Trigger URL with sample body.source, body.email, and body.linkedinUrl.
  2. Confirm Source Gate Check routes correctly to Send to Clay Unbooked or Fetch Trigify Enrichment.
  3. Verify Qualification Branch routes to Send to Clay Qualified or Send to Clay Unqualified, and that Return Webhook Reply returns a response.
  4. After the delay, validate Check Cal Booking and Booking Status Check behavior, and ensure Add Lead to Instantly receives the AI-generated Sentence.
  5. When the test run is successful, toggle the workflow to Active to enable production intake.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Cal.com credentials can expire or need specific permissions. If things break, check your Cal.com API token and the endpoint response in the n8n execution logs first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Frequently Asked Questions

How long does it take to set up this Cal.com Slack automation?

Plan for about an hour if your API keys and form fields are ready.

Do I need coding skills to automate demo lead qualification?

No. You’ll mostly connect accounts, paste API keys, and map a handful of fields in n8n.

Is n8n free to use for this Cal.com Slack automation workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in AI and enrichment costs (Trigify and Anthropic/OpenAI), which are usually a few dollars a month at low volume.

Where can I host n8n to run this Cal.com Slack automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this Cal.com Slack automation workflow for different qualification rules?

Yes, and you should. The quickest win is adjusting the AI Qualification Logic prompt and the Qualification Branch “If” rules so they match your ICP. Many teams also tweak the geographic filters (US/UK/Europe/Australia), change what counts as “senior” titles, and add a hard rule for email domain type (personal vs. company).

Why is my Cal.com connection failing in this workflow?

Usually it’s an expired or incorrect Cal.com API token. Check the HTTP Request node that calls Cal.com, then look at the last execution output in n8n to see the status code and error message. If the token is fine, it can also be the endpoint path (some Cal.com setups vary) or a missing permission for the booking resource you’re trying to read.

How many demo requests can this Cal.com Slack automation handle?

On a typical small setup, hundreds per month is realistic, and self-hosting removes execution caps entirely.

Is this Cal.com Slack automation better than using Zapier or Make?

Often, yes, because this flow needs branching logic, delayed checks, structured AI outputs, and multiple HTTP calls that can get pricey or awkward elsewhere. n8n handles that kind of “funnel logic” without turning every condition into a paid add-on. Zapier or Make can still be fine if you only want a simple Slack ping when a form is submitted, no enrichment, no qualification, no booking verification. The moment you care about fit, timing, and consistent follow-ups, you’ll want the extra control. If you’re torn, Talk to an automation expert and we’ll sanity-check your use case.

Once this is running, demo requests stop being a daily fire drill. The workflow handles the repetitive sorting and follow-up setup so your team can focus on the conversations that actually convert.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal