Generate single-use personalized Calendly links with Google Sheets tracking & Slack alerts
$20/month : Unlimited workflows
2500 executions/month
THE #1 IN WEB SCRAPING
Scrape any website without limits
HOSTINGER 🎉 Early Black Friday Deal
DISCOUNT 20% Try free
DISCOUNT 20%
Self-hosted n8n
Unlimited workflows - from $4.99/mo
#1 hub for scraping, AI & automation
6000+ actors - $5 credits/mo
This n8n template implements a Calendly Booking Link Generator that creates single-use, personalized booking links, logs them to Google Sheets, and optionally notifies a Slack channel
Who's it for
This template is designed for teams and businesses that send Calendly links proactively and want to generate trackable, single-use booking links on demand. It’s perfect for:
- Sales and SDR teams sending 1:1 outreach and needing unique booking links per prospect
- Customer success and support teams who want prefilled, one-click rescheduling or follow-up links
- Marketing and growth teams that want UTM-tagged booking links for campaigns
- Ops/RevOps who need a central log of every generated link for tracking and reporting
How it works / What it does
This workflow turns a simple HTTP request into a fully configured single-use Calendly booking link:
- Webhook Trigger (
POST)- Receives JSON payload with recipient details:
name,email, optionalevent_type_uri, optionalutm_source
- Configuration & Input Normalization
Set Configurationextracts and normalizes:recipient_name,recipient_emailrequested_event_type(can be empty)utm_source(defaults to"n8n"if not provided)
- Calendly API – User & Event Types
Get Current UsercallsGET /users/meusing Calendly OAuth2 to get the current user URIExtract Userstoresuser_urianduser_nameGet Event TypescallsGET /event_types?user={user_uri}&active=trueto fetch active event typesSelect Event Type:- Uses
requested_event_typeif provided, otherwise selects the first active event type - Stores event type URI, name, and duration (minutes)
- Uses
- Create Calendly Single-Use Scheduling Link
Create Single-Use LinkcallsPOST /scheduling_linkswith:owner: selected event type URIowner_type:"EventType"max_event_count:1(single use)
- Build Personalized Booking URL
Build Personalized Link:- Reads the base
booking_urlfrom Calendly - Appends query parameters to prefill:
name(encoded)email(encoded)utm_source
- Stores:
base_booking_urlpersonalized_booking_urlrecipient_name,recipient_emailevent_type_name,event_durationlink_created_at(ISO timestamp)
- Reads the base
- Optional Logging and Notifications
Log to Google Sheets(optional but preconfigured):- Appends each generated link to a “Generated Links” sheet
- Columns: Recipient Name, Recipient Email, Event Type, Duration (min), Booking URL, Created At, Status
Notify via Slack(optional):- Posts a nicely formatted Slack message with:
- recipient name & email
- event name & duration
- clickable booking link
- Posts a nicely formatted Slack message with:
- API Response to Caller
Respond to Webhookreturns a structured JSON response:successbooking_url(personalized)base_urlrecipientobjecteventobject (name + duration)created_atexpiresexplanation ("Single-use or 90 days")
The result is an API-style service you can call from any system to generate trackable, single-use Calendly links.
How to set up
1. Calendly OAuth2 setup
- Go to
calendly.com/integrationsordeveloper.calendly.com - Create an OAuth2 application (or use an existing one)
- In n8n, create Calendly OAuth2 credentials:
- Add client ID, client secret, and redirect URL as required by Calendly
- Connect your Calendly user account
- In the workflow, make sure all Calendly HTTP Request nodes use your Calendly OAuth2 credential
2. Webhook Trigger configuration
- Open the
Webhook Triggernode - Confirm:
- HTTP Method:
POST - Path:
generate-calendly-link - Response Mode:
Response Node(points toRespond to Webhook)
- HTTP Method:
- Copy the Production URL from the node once the workflow is active
- Use this URL as the endpoint for your CRM, outbound tool, or any system that needs to request links
Expected request body:
{
"name": "John Doe",
"email": "[email protected]",
"event_type_uri": "optional",
"utm_source": "optional"
}
If event_type_uri is not provided, the workflow automatically uses the first active event type for the current Calendly user.
3. Google Sheets setup (optional but recommended)
- Create a Google Sheet for tracking links
- Add a sheet/tab named e.g. “Generated Links”
- Set the header row to:
Recipient Name,Recipient Email,Event Type,Duration (min),Booking URL,Created At,Status
- In n8n:
- Create Google Sheets OAuth2 credentials
- Open the
Log to Google Sheetsnode - Update:
documentId→ your spreadsheet IDsheetName→ your tab name (e.g. “Generated Links”)
4. Slack notification setup (optional)
- Create a Slack app at
api.slack.com - Add Bot Token scopes (for basic posting):
chat:writechannels:read(orgroups:readif posting to private channels)
- Install the app to your workspace and get the Bot User OAuth Token
- In n8n:
- Create a Slack API credential using the bot token
- Open the
Notify via Slacknode - Select your credential
- Set:
select:channelchannelId: your desired channel (e.g.#salesor#booking-links)
5. Test the workflow end-to-end
- Activate the workflow
- Use Postman, curl, or another system to
POSTto the webhook URL, e.g.:
{
"name": "Test User",
"email": "[email protected]"
}
- Verify:
- The HTTP response contains a valid
booking_url - A new row is added to your Google Sheet (if configured)
- A Slack notification is posted (if configured)
- The HTTP response contains a valid
Requirements
- Calendly account with at least one active event type
- n8n instance (cloud or self-hosted) with public access for the webhook
- Calendly OAuth2 credentials configured in n8n
- (Optional) Google Sheets account and OAuth2 credentials
- (Optional) Slack workspace with permissions to install a bot and post to channels
How to customize the workflow
Input & validation
- Update the
Set Configurationnode to:- Enforce required fields (e.g. fail if
emailis missing) - Add more optional parameters (e.g.
utm_campaign,utm_medium,language)
- Enforce required fields (e.g. fail if
- Add an
IFnode after the Webhook Trigger for stricter validation and custom error responses
Event type selection logic
- In
Select Event Type:- Change the fallback selection rule (e.g. pick the longest or shortest duration event)
- Add logic to map a custom field (like
event_key) to specific event type URIs
Link parameters & tracking
- In
Build Personalized Link:- Add additional query parameters (e.g.
utm_campaign,source,segment) - Remove or rename existing parameters if needed
- Add additional query parameters (e.g.
- If you don’t want prefilled name/email, remove those query parameters and just keep tracking fields
Google Sheets logging
- Extend the
Log to Google Sheetsmapping to include:utm_sourceor other marketing attributes- Sales owner, campaign name, or pipeline stage
- Any additional fields you compute in previous nodes
Slack notification formatting
- In
Notify via Slack:- Adjust the message text to your team’s tone
- Add emojis or @mentions for certain event types
- Include
utm_sourceor other metadata for debugging and tracking
Key features
- Single-use Calendly links – each generated link is limited to one booking (or expires after ~90 days)
- Prefilled recipient details – name and email are embedded in the URL, making it frictionless to book
- Webhook-first design – easily call this from CRMs, outreach tools, or any external system
- Central link logging – every link is stored in Google Sheets for auditing and reporting
- Optional Slack alerts – keep sales/support teams notified when new links are generated
- Safe error handling – HTTP nodes are configured with
continueRegularOutputto avoid hard workflow failures
Example scenarios
Scenario 1: Sales outreach
- A CRM workflow triggers when a lead moves to “Meeting Requested”.
- It calls this n8n webhook with the lead’s
nameandemail. - The workflow generates a single-use Calendly link, logs it to Sheets, and posts to Slack.
- The CRM sends an email to the lead with the personalized booking link.
Scenario 2: Automated follow-up link
- A support ticket is resolved and the system wants to offer a follow-up call.
- It calls the webhook with
name,email, and a dedicatedevent_type_urifor “Follow-up Call”. - The generated link is logged and returned via API, then included in an automated email.
Scenario 3: Campaign tracking
- A marketing automation tool triggers this webhook for each contact in a campaign, passing
utm_source(e.g.q1-outbound). - The workflow adds
utm_sourceto the link and logs it in Google Sheets. - Later, you can analyze which campaigns generated the most completed bookings from single-use links.
This template gives you a reliable, reusable Calendly link generation service that plugs into any part of your stack, while keeping tracking, logging, and team visibility fully automated.