Scheduling Integration
Seamlessly integrate Calendly or Cal.com scheduling widgets into your forms. Let respondents book appointments, meetings, or consultations without leaving your form.
Overview
The scheduling feature allows you to embed booking widgets from popular scheduling platforms directly into your forms. This is perfect for lead qualification forms, consultation requests, demo bookings, customer onboarding, and any workflow where you need to schedule time with respondents.
Popular scheduling platform with powerful features for teams and individuals.
Open-source scheduling platform with advanced customization and self-hosting options.
Use Cases
Lead Qualification & Sales
Collect lead information first, then let qualified prospects book a demo or consultation call
Customer Onboarding
Guide new customers through onboarding questions, then schedule a kickoff call
Support & Consultations
Gather issue details or requirements before scheduling a support session
Event Registration
Collect registration info and let attendees choose their preferred time slot
Setting Up Scheduling in Standard Forms
Add a Scheduling Question
In your form builder, click "Add Question" and select the Scheduling question type (calendar icon).
Choose Your Provider
Select either Calendly or Cal.com from the provider dropdown.
Get Your Scheduling URL
For Calendly:
- Log into your Calendly account
- Go to the event type you want to use
- Copy the event URL (e.g.,
https://calendly.com/yourname/30min)
For Cal.com:
- Log into your Cal.com account
- Go to your event type
- Copy the booking URL (e.g.,
https://cal.com/yourname/30min)
Configure the Widget
Paste your scheduling URL into the appropriate field. The system will automatically validate that the URL matches your selected provider.
If you enter a Calendly URL but selected Cal.com (or vice versa), you'll see an orange warning border and won't be able to publish until fixed.
Add Title and Description (Optional)
Customize the title and description that appears above the scheduling widget to provide context.
Preview and Publish
Use the preview feature to test the scheduling widget, then publish your form when ready.
Setting Up Scheduling in Workflow Forms
Add a Scheduling Node
Drag a Scheduling Node onto your workflow canvas and connect it to your flow.
Configure the Node
Click on the scheduling node to open its configuration panel. Select your provider (Calendly or Cal.com) and enter the scheduling URL, just like in standard forms.
Connect to Your Workflow
Use conditional logic to show scheduling at the right point in your workflow. For example, only show scheduling to qualified leads, or route different customer types to different calendars.
Test the Flow
Preview your workflow to ensure the scheduling widget appears correctly and booking completion is detected properly.
How It Works
WorkForm automatically detects when a user completes a booking through the embedded widget:
- Calendly: Listens for the
calendly.event_scheduledevent - Cal.com: Uses the Cal.com JavaScript API to detect the
bookingSuccessfulcallback
The form automatically blocks progression until a booking is completed:
- Users cannot proceed to the next question/page until they complete a booking
- Once booking is confirmed, the "Next" or "Submit" button becomes enabled
- A warning message appears if users try to proceed without booking
WorkForm captures comprehensive booking details that are visible in response viewer and CSV exports:
Cal.com Bookings:
- Event title (e.g., "30 Minute Meeting")
- Start and end times (with timezone)
- Booking status (ACCEPTED, PENDING, etc.)
- Video call URL (if applicable)
- Unique booking ID
- Event type ID
Calendly Bookings:
- Scheduled time
- Event URI (unique identifier)
- Invitee URI
- Clickable link to view booking details
Viewing Booking Data
In the response viewer, scheduling questions display:
- Table view: Shows booking confirmation status and key details (title, date/time)
- Detail view: Full booking information with clickable links:
Cal.com bookings show:
- Meeting title
- Start and end times
- Status badge
- "Join Video Call" button (if video URL exists)
Calendly bookings show:
- Scheduled time
- "View on Calendly" button (links to booking page)
When exporting responses to CSV, scheduling data includes all booking details in a pipe-separated format:
Cal.com example:Confirmed: 30 Minute Meeting | 1/28/2026, 9:30 AM - 9:45 AM | Status: ACCEPTED | Video: https://app.cal.com/video/...
Calendly example:Confirmed (Calendly) | Scheduled: 1/11/2026, 9:03 AM | Event: https://api.calendly.com/scheduled_events/...
Best Practices
Place Scheduling on Its Own Page
For standard forms, it's recommended to put the scheduling question on its own dedicated page. This gives respondents a clean, focused booking experience without distractions.
Collect Context First
Ask qualifying questions before showing the scheduling widget. This ensures you're only booking time with relevant prospects and can personalize the meeting.
Use Different Calendars for Different Paths
In workflow forms, use conditional logic to show different scheduling links based on user type, urgency, or topic. For example, demo requests vs support calls.
Test Both Providers
Before launching, test the complete booking flow with your actual calendar to ensure events are created correctly and confirmations are sent.
Match Provider to URL
Make sure the URL you paste matches the provider you selected. The system validates this automatically, but double-checking prevents configuration errors.
Troubleshooting
Possible causes:
- Incorrect URL format - ensure it's a valid Calendly or Cal.com booking URL
- Provider mismatch - verify the URL matches the selected provider
- Calendar not published - check your scheduling platform settings
- Browser extensions blocking the widget - try disabling ad blockers
Possible causes:
- User closed the widget before completing booking
- Network issues during booking confirmation
- Pop-up blockers preventing confirmation window
Solution: Ask users to wait for the success message before proceeding.
Cause: The URL doesn't match the selected provider
- If provider is "Calendly", URL must contain "calendly.com"
- If provider is "Cal.com", URL must contain "cal.com"
Solution: Either change the provider or update the URL to match.
Technical Details
Event Detection:
- Calendly: Uses postMessage API to detect
calendly.event_scheduled - Cal.com: Uses Cal.com JavaScript SDK with
bookingSuccessfulcallback - Both implementations include comprehensive debug logging for troubleshooting
Data Storage:
- Booking completion stored as
bookingComplete: true/false - All booking metadata stored in
bookingDetailsobject - Includes provider identifier for proper display in response viewer
URL Validation:
- Client-side validation prevents mismatched provider/URL combinations
- Server-side validation ensures data integrity before form submission
- Visual warnings guide users to correct configuration