Choose your path
- Cal.com Cloud
- Self-hosted
Cal.com Cloud
Sign up for an account
Complete your profile
- Username: Your booking URL will be
cal.com/your-username - Name: Displayed on your booking page
- Time zone: Ensures accurate availability
- Bio (optional): Introduce yourself to bookers
Create your first event type
- Go to Event Types in the sidebar
- Click your “30 Minute Meeting” event
- Customize the settings:
- Title: What people see (e.g., “Quick Chat”)
- URL: Your booking link slug (e.g.,
cal.com/you/quick-chat) - Duration: Meeting length (15, 30, 60 minutes, or custom)
- Location: Where you’ll meet
Event type configuration options
Event type configuration options
- Click Save when done
Connect your calendar
- Google Calendar
- Outlook/Office 365
- Apple Calendar
- Click Apps in the sidebar
- Find “Google Calendar” and click Connect
- Sign in and grant permissions
- Select which calendars to check for conflicts
Set your availability
- Go to Availability in the sidebar
- Edit your “Working Hours” schedule
- Set your typical availability:
- Days: Select working days
- Time ranges: Add multiple time blocks per day
- Time zone: Already set from your profile
Advanced availability options
Advanced availability options
- Multiple schedules: Create different schedules for different event types
- Date overrides: Block specific dates or add special availability
- Minimum notice: Set how far in advance people can book
- Booking window: Limit how far into the future bookings can be made
Share your booking link
Direct link
Website embed
Email signature
Social profiles
Get your first booking
- You’ll receive an email with booking details
- Event appears in your calendar automatically
- Booker gets confirmation with meeting details
- Automatic reminders are sent before the meeting
Self-hosted deployment
Deploy Cal.com
- Docker (Recommended)
- Railway
- Vercel
Required environment variables
Required environment variables
http://localhost:3000Complete initial setup
- Visit your Cal.com instance
- Create your admin account
- Set up your profile (username, name, timezone)
Configure integrations
Google Calendar setup
Google Calendar setup
- Go to Google Cloud Console
- Create a new project
- Enable Google Calendar API
- Create OAuth 2.0 credentials
- Add authorized redirect URIs:
- Add to
.env:
Zoom integration
Zoom integration
- Create app on Zoom Marketplace
- Choose “General App” → “User-managed”
- Set redirect URL:
https://your-domain.com/api/integrations/zoomvideo/callback - Add scopes:
meeting:write:meetinguser:read:settings
- Add to
.env:
Email configuration
Email configuration
Create your first event type
- Create/customize an event type
- Connect your calendar (requires OAuth setup)
- Set your availability
- Share your booking link
- Get your first booking!
Understanding the booking flow
Here’s what happens when someone books with you:Booker selects a time
Booker fills out form
- Name
- Custom fields (if configured)
- Guest emails (if allowed)
Booking is created
- Saved to database
- Added to your connected calendars
- Status set to
ACCEPTED(orPENDINGif approval required)
Notifications sent
- Email confirmation
- Calendar invitation (.ics file)
- Meeting location details
Reminders (optional)
- Email/SMS reminders before the meeting
- Follow-up emails after the meeting
- Custom webhooks for integrations
Next steps
Customize your booking page
Set up team scheduling
Add workflows
Integrate with your tools
Embed on your website
Use the API
Common questions
How do I change my booking URL?
How do I change my booking URL?
Can I require approval for bookings?
Can I require approval for bookings?
- Enable Requires confirmation
- Choose whether to block the time slot while pending
- Approve or reject bookings from the Bookings tab
How do I prevent back-to-back meetings?
How do I prevent back-to-back meetings?
- Before event buffer: Time before meetings
- After event buffer: Time after meetings
Can I limit bookings per day/week?
Can I limit bookings per day/week?
What if someone needs to reschedule?
What if someone needs to reschedule?
- Go to Bookings tab
- Click the booking
- Click Reschedule
How do I handle different time zones?
How do I handle different time zones?
- Your availability is set in your time zone
- Bookers see slots in their time zone
- Calendar events show correct times for both parties
Troubleshooting
No available times showing
No available times showing
- Availability not set: Check your schedule in Availability
- Calendar conflicts: Review connected calendars for busy events
- Booking notice: Reduce
minimumBookingNoticein event type settings - Booking window: Extend how far ahead bookings can be made
- Booking limits reached: Check if you’ve hit daily/weekly limits
Calendar integration not working
Calendar integration not working
- Disconnect and reconnect in Apps
- Ensure you granted all permissions
- Check that calendars are selected in integration settings
- Verify OAuth redirect URIs are correct (self-hosted)
- Verify calendar permissions in Azure AD
- Check that API permissions include
Calendars.ReadandCalendars.ReadWrite - Ensure consent was granted by admin (if required)
Emails not sending
Emails not sending
-
Verify email configuration in
.env: -
Test SMTP connection:
- For Gmail, use an app password
- Check application logs for email errors
Time zone showing incorrectly
Time zone showing incorrectly
- Update your time zone in Settings → Profile
- Clear browser cache and reload
- Check that system time zone is correct
- For event types, verify schedule time zone matches your preference