Importing from Calendly
The importer reads your Calendly account and recreates what it finds here. Your attendees are not told anything: no email is sent to them, no calendar invitation goes out, and an imported booking keeps the Calendly meeting link they already have. Some of your Calendly setup cannot be read at all. This page lists all of it, and what you do by hand instead.
Before you start
- An admin account here. Import is an admin-only page, because it creates event types for the whole workspace.
- Your Calendly login, or a Calendly personal access token. Any Calendly plan works for what the import reads, including Free.
- About ten minutes for an account with one event type. Longer for each extra event type, because some settings are typed in by hand afterwards. See how long it takes.
- One token reads one Calendly user. If several people book under your Calendly account, read team accounts first.
Connecting your Calendly account
- Open Import in the dashboard sidebar, under Scheduling.
- Click Connect Calendly if one-click sign-in is set up on your deployment. Otherwise paste a personal access token: in Calendly, go to Integrations & apps → API & webhooks and generate one.
- Click Fetch from Calendly.
- Review what was found, untick anything you do not want, and start the import.
We ask Calendly for read permission only, on seven things: event_types:read, scheduled_events:read, availability:read, routing_forms:read, organizations:read, webhooks:read and contacts:read. If you are making a personal access token, tick those seven.
There is no write permission in the list, so an import cannot change anything in Calendly.
The credential is used to read your account and is not kept. It is held in an import session with a hard 30-minute lifetime, and that session is deleted the moment the import finishes. The refresh token Calendly returns is thrown away rather than stored, so we never hold standing access to your Calendly and syncing again means connecting again.
What comes over
Every row below is what the importer does today. “Not built yet” means Calendly would give it to us and we do not read it; “Calendly's API does not expose it” means no import can bring it.
| Calendly object | Comes over? | Notes |
|---|---|---|
| Event type name, slug, duration, active flag | Yes | An event type that is switched off in Calendly arrives switched off here. |
| Event type description | Yes | Formatting is flattened to plain text, and a very long description is truncated. |
| Event type colour | Partly | A six-digit hex colour comes over. Any other colour value is dropped without a note. |
| Secret event type | Yes | Arrives unlisted, and the preview marks it so. |
| Order of event types on the booking page | Yes | Imported event types are appended after the ones you already have, in Calendly's order. |
| Multi-duration options | Partly | Capped at the number of durations we allow. The preview says when it capped one. |
| Location | Partly | Google Meet, Zoom, Microsoft Teams, in person and phone map across. Ask invitee, Custom, GoToMeeting and Webex fall back to your workspace default, with a note. When an event type has several locations, the first one we can map is used. |
| Booking questions | Yes | One-line, paragraph, phone, radio and checkbox questions, with their required flag, their order and their “Other” option. |
| Booking questions turned off in Calendly | No — not built yet | Skipped, and not mentioned in the report. Re-create by hand if you want them back. |
| Choice question with fewer than two options, or a question type we do not have | No — not built yet | Skipped. The report names the question so you can re-create it by hand. |
| Internal note on an event type | No — not built yet | There is no private note field on an event type here. The report says which had one. |
| Admin-managed flag | Partly | The event type imports; the flag does not, and the report says so. |
| Meeting-poll event types | No — by design | A Calendly poll collects votes on times rather than taking a booking, so importing it as a bookable page would change what it does. It is skipped with that reason, named on the report, and re-created by you under Meeting polls. |
| Whether an event type was paid in Calendly | Yes | The preview and the report mark each event type Calendly charged for, and the report links it to where you set a price here. The amount itself is not in Calendly's API. |
| Price on an event type | No — Calendly's API does not expose it | Set a price per event type here after connecting a payment provider. |
| Group event type | Partly | Imports as a group event type. You confirm the number of seats during the import. |
| Seats per group meeting | Partly | Calendly puts no attendee limit on an event type, only on a booked event. When the group event type has a booking, the import reads the cap from it and fills the field in; otherwise the field starts at two. Either way you confirm the number before importing. |
| Round-robin and collective event types | Partly | Becomes a team event type when at least one Calendly host has a matching email address here. Otherwise it becomes a one-on-one owned by whoever ran the import, and the report offers to invite the hosts it did not recognise. |
| Multi-pool event types | Partly | Imported as a collective event type. |
| Default weekly hours and timezone | Yes | This one replaces rather than adds: ticking it overwrites the weekly hours and timezone of the admin running the import. On a repeat sync it starts unticked. Check the timezone before you tick it. |
| Your other named schedules in Calendly | No — not built yet | Only the default schedule is offered. The report names the others so you know what there is to rebuild under Availability. |
| Which schedule an event type uses | No — not built yet | Every imported event type uses your one weekly grid here. |
| Date-specific hours | No — not built yet | The report counts them. Add them again under Availability. |
| Other team members' weekly hours | No — not built yet | Only the hours of the Calendly user whose token you used are read. |
| Buffers before and after events | No — Calendly's API does not expose it | Set per event type under Scheduling. |
| Minimum booking notice | No — Calendly's API does not expose it | Set per event type under Scheduling. |
| How far in advance invitees can book | No — Calendly's API does not expose it | Set per event type under Scheduling → Booking window. |
| Daily, weekly and monthly booking limits | No — Calendly's API does not expose it | Set per event type under Scheduling → Booking limits. |
| Start-time increments | No — Calendly's API does not expose it | Set per event type under Scheduling → Slot interval. |
| Cancellation policy | No — Calendly's API does not expose it | Set the cancellation rules per event type under Payments and cancellation. |
| Confirmation page redirect | No — Calendly's API does not expose it | Set it per event type under Confirmation page. |
| Workflows, reminders and follow-ups | No — Calendly's API does not expose it | The import offers to seed our standard reminders instead, which does nothing if you already have reminder rules. Build the rest on the Reminders page. |
| Routing forms | Partly | The questions come over. The rules deciding which event type an answer leads to are not in Calendly's API, so each imported form arrives switched off until you add them. |
| Single-use links and one-off event types | No — Calendly's API does not expose it | Calendly offers no way to list them. Create new one-off links here. |
| Upcoming bookings | Yes | Times, attendee name, email and timezone, guests, answers, and the Calendly meeting link kept as it is. Nothing is emailed. Sending our reminders for these bookings is a separate tick, off by default, and never a text message. |
| Bookings that are canceled, have more than one attendee, have no attendee email, belong to an event type that was not imported, were already imported, or land on a time already taken here | No — by design | Each is listed in the preview with its reason. Group bookings are skipped because our group model needs a seat cap Calendly does not return. Rebook those here, or let them run out in Calendly. |
| Attendee cancel and reschedule links | No — not built yet | Calendly returns them and we do not read them. The confirmation email your attendee already has still cancels and reschedules in Calendly. See keep Calendly running. |
| Payment record on a booking | No — not built yet | An imported booking carries no record of what was paid in Calendly. |
| Attendee's text-reminder number | No — by design | That number was given to Calendly, not to you here, so it is not carried and imported bookings never get a text. |
| No-show and reconfirmation flags on a booking | No — not built yet | Mark no-shows again here if you need the history. |
| Host's meeting notes on a booking | No — not built yet | Copy anything you need out of Calendly before you close the account. |
| Past bookings | Yes | Off by default. The most recent 500 are offered, and the preview says when it truncated. Nothing is emailed, no reminder is scheduled and no time is held. |
| Contacts | Yes | Matched to yours by email address. Only blanks are filled in, so a name, phone number or company you already have is kept. Nobody is emailed. |
| Contacts with no email address | No — not built yet | Listed in the preview with the reason. Add them by hand under Contacts. |
| Calendly webhooks | Partly | Shown as a read-only checklist. The import creates none. An active webhook that maps to something here gets its own Re-create in Calendly-compatible mode button, which issues a new signing secret shown to you once. |
| Branding: logo, colours, welcome text, avatar | No — Calendly's API does not expose it | Set yours under Customize → Appearance. |
| Language of the booking page | No — not built yet | Set it here yourself. |
| Other people's Calendly accounts, and Calendly team pages | No — not built yet | One token reads one Calendly user. See team accounts. |
After the import
The report lists every event type, booking, form and contact with its status, followed by a card naming what did not come across: the settings Calendly's API does not return, and the lines that are true of your account rather than of every account. Work through this list before you send anyone your new link.
- Connect a calendar. An imported event type is on no calendar until you connect one, so bookings will not appear in your own diary and your existing appointments will not block times. See Calendars.
- Connect Zoom, Meet or Teams if any imported event type uses one. See Conferencing and Zoom.
- Set the scheduling rules on each event type: buffers, minimum notice, booking window, booking limits and slot interval. These are the settings Calendly's API does not return, so every one of them starts at our default.
- Set prices on anything you charged for in Calendly, under Payments and cancellation. The report lists the event types Calendly was charging for and links to each one; Calendly does not return the amount, so you type that in.
- Redo your branding under Customize → Appearance. Match my site proposes colours and fonts taken from your own website, and you approve them before they apply.
- Check the reminders on the Reminders page, whether or not you took the offer to seed the standard ones.
- Add the rules to each imported routing form, which arrives switched off until you do.
- Book yourself into each event type and cancel it. That is what shows you the confirmation email, the calendar event and the meeting link in the form an attendee receives them, which no dashboard screen reproduces.
On the Free plan three event types can be active at a time. If you import more, the rest arrive switched off and say so in the report. See Billing and plans.
Keep Calendly running until your last imported booking
The report names the date: the start of the last booking Calendly has for you, imported or not. That is the earliest you should think about closing your Calendly account.
The reason is the confirmation email your attendees already have. It carries Calendly's cancel and reschedule links, and those act on Calendly. We do not read them, and nothing here watches Calendly, so an attendee who cancels or reschedules that way changes nothing on this side: the booking still shows as confirmed here and the time stays held.
Until your last imported booking has happened:
- Keep the Calendly account open and check it before each imported meeting.
- Do not rely on a re-sync to tell you. We ask Calendly only for active events, so a booking canceled there stops being returned rather than being reported as cancelled, and the copy already here stays confirmed. Cancel it here yourself once you see it in Calendly.
- Send new bookings to your new link, so the pile of Calendly-held bookings stops growing.
Your old links
Calendly cannot redirect a calendly.com link to anywhere else, and we cannot make it. Every place
your old link is published has to be edited by you.
Your new link is your-workspace.calemander.com/your-name/event-slug, or your own booking domain if
you have one set up. The event slug survives the import, so the last part usually matches; the part
before it does not. The report puts each Calendly link beside its new one with a copy button for
each. You can also open an event type under Event Types, expand Share & Embed and copy
the direct booking link from there.
Old links usually live in:
- your email signature, and any shared team signature
- your website: buttons, contact pages, footers, and any embedded Calendly widget
- Linktree or a similar link-in-bio page
- Instagram, Facebook, LinkedIn and X profile bios
- Google Business Profile, directory listings and marketplace profiles
- saved email templates, proposals, invoices and auto-replies
While you work through that list, keep the Calendly event type live and put the new link at the top of its description, so anyone arriving on an old link still reaches you. Take it down when the old link stops getting traffic.
How long it takes
Reading and importing takes a couple of minutes. Getting to a bookable page is the rest of it.
- One event type, no payments. About ten minutes: import, set buffers, notice, window and limits on that one event type, connect a calendar, replace your old link.
- Several event types, or paid sessions. Thirty to sixty minutes. The scheduling rules and the price are set per event type, so the work grows with the number you import, and branding is done once.
- A team, or more than one Calendly login. Add the single-user time for each person, plus inviting them here first. See team accounts.
Team accounts
One Calendly credential reads one Calendly user. It brings that user's event types, that user's weekly hours and that user's bookings, and nothing belonging to anyone else.
- A round-robin or collective event type imports as a team event type only if at least one of its Calendly hosts has a matching email address in this workspace. Invite your team here before you import, so the match works.
- If a host does not match, the event type still imports, but as a one-on-one owned by whoever ran the import. The report lists the hosts it could not place, with an invite button.
- Other people's own event types do not come over at all. Each of them signs in here, and runs the import with their own Calendly token. The Import page is admin-only, so give them the admin role for that step.
- Nobody else's weekly hours are imported, on any run. Each person sets their own availability here.
- A Calendly team page has no equivalent here, and nothing about it is imported.
See Team scheduling for how hosts and pools work here.
Troubleshooting
“That does not look like a Calendly token.” The token is checked for shape before we call Calendly. Usually it was copied in part. Copy the whole string.
“Calendly rejected that token.” Calendly returned 401. The token was revoked, or it is from a different account. Generate a new one.
A missing permission. Calendly names the scope it wanted, and the message repeats it. Create a new token with all seven read scopes listed under connecting your Calendly account.
Webhooks or contacts could not be read. Those two sections say so on their own and nothing else in
the import is affected. Tick webhooks:read or contacts:read on the token, or connect with
one-click sign-in instead.
“Calendly only exposes this data on their paid plans.” Calendly returned 403 with that reason. It comes from Calendly, not from us.
Rate limited. Calendly throttles the account and the message says roughly how long to wait. Nothing is half-imported: press the button again after the wait.
The page sends you back to the connect step. A connection lasts 30 minutes. Reconnect and fetch again.
A booking was skipped for a time already taken. Something here already holds that slot. Cancel or move the other booking, then sync again.
A duplicate event type after a second sync. Repeat syncs match event types and routing forms on their slug. If you renamed an imported event type's slug here and then synced again, Calendly's original slug no longer matches anything and it is imported a second time. Delete the duplicate, or keep the slug as it was imported.
Running it again
Syncing again is safe. Anything already here is skipped rather than duplicated, subject to the slug caveat above, and only what is new in Calendly since last time comes over. Your weekly hours start unticked on a repeat run so a second sync does not overwrite a schedule you have adjusted here. Nothing runs on its own: no sync happens unless you press Sync from Calendly again.
If you have a Calendly events CSV instead
Calendly's own Export events download can be uploaded here as well, on the same Import page under Import bookings from a CSV — useful for bookings this importer did not bring, such as ones older than the history it reads. Calendly publishes the column names that export uses, so the upload matches your headers against that published list. See Contacts and CSV import.
Last checked 2026-09-10.