🤝 Generate single-use personalized Calendly links with Google Sheets tracking & Slack alerts
⚡ 1,000 views · 🤝 CRM & Sales Operations
Description
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": "john@example.com",
"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": "test@example.com"
}
- 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.
đź”— Nodes Used
Google Sheets, HTTP Request, Slack, Webhook
📥 Import
Download workflow.json and import into n8n:
Workflow menu → Import from File