Calendly Sync to Attio
The Calendly Sync app pushes every Calendly booking, cancellation, reschedule, and form answer into Attio as it happens. It creates People records for invitees and guests, captures payment and UTM context, and maintains a full audit trail across reschedules so your CRM has the complete meeting history without copy-paste.
The app syncs both calendar bookings (invitee events) and routing form submissions. Routing form submissions land on a dedicated Calendly Routing Form Submissions list, with answers feeding the same Calendly Answers list as booking-form questions.
How does the Calendly + Attio sync work?
Calendly webhooks the app subscribes to
invitee.created: a new booking was created. Creates a booking event entry plus one Calendly Answers entry per question on the form.invitee.canceled: the booking was canceled. Flips the booking entry's status to canceled.invitee_no_show.created: the invitee was marked as a no-show. Updates the booking entry's no-show flag.invitee_no_show.deleted: the no-show mark was removed. Reverses the flag.routing_form_submission.created: a Calendly routing form was submitted. Creates a routing-form-submission entry with submitter info, tracking, and the raw payload, plus answer entries on Calendly Answers.
Two lists provisioned in Attio
- Calendly Booking Events. One entry per booking. Holds event details, status, payment information, no-show tracking, reschedule history, and UTM context.
- Calendly Answers. One entry per question/answer pair from the booking form. Each answer links back to its parent booking event and to the Person record it belongs to.
How People records are created and matched
The app checks for an existing Person by email before creating a new record. When Auto-create People is on (default), invitees and guests without an existing match get a fresh Person record. When Auto-create People is off, the app skips brand-new contacts and only links to records that already exist. If the booking captures company information, the People are also linked to the corresponding Company record.
How reschedules are tracked
- The original booking entry is marked canceled, with the Rescheduled flag set to
true. Original event details are preserved. - All Calendly Answers entries linked to the original booking are flipped to canceled status. Original answers are preserved.
- A new booking entry is created with active status and the new event details, linked to the same People records.
- New Calendly Answers entries are created with active status, capturing the resubmitted answers (if any).
How do I set up the Calendly sync in Attio?
Total setup time is about three minutes for a workspace with the default settings.
- Install the Calendly Sync app from the Attio App Store. Find Calendly Sync in the Attio app marketplace, install it into your workspace, and Attio drops you on the app's settings page.
- Generate a Calendly Personal Access Token. In your Calendly account settings, find the Developer / API area and create a new Personal Access Token. Copy it for the next step.
- Add a connection in Attio with the Calendly token. Open Attio Workspace Settings → Workspace Connections, click Add Connection, paste your Calendly Personal Access Token as plain text, and save. The app fetches your Calendly organization URI, provisions the two lists, and registers the webhook subscriptions automatically. Setup completes in about 30 seconds.
- (Optional) Filter by Calendly user or event type. On the Workspace Settings page, the User Email Whitelist accepts a comma-separated list of Calendly user emails (sync only those team members) and the Event Type Whitelist accepts a comma-separated list of event slugs, UUIDs, or full URIs (sync only specific meeting types). Leave both empty to sync everything.
- (Optional) Toggle Auto-create People. Auto-create People is on by default. When on, the app creates Attio People records for any invitee or guest it does not already know. When off, it only links to existing records and skips brand-new contacts entirely.
- Save your settings. Saving applies your filters and toggles. Calendly bookings now flow into the Calendly Booking Events list in real time as they happen.
What filters are available?
- User Email Whitelist. Comma-separated list of Calendly user emails. Only bookings owned by these users sync. Empty = sync every user. Useful when you want only sales-team meetings in Attio, not internal coordination.
- Event Type Whitelist. Comma-separated list of event-type slugs (
15min-meeting), UUIDs, or full URIs. Only matching event types sync. Empty = sync every event type. - Auto-create People. Toggle. On (default) creates new Person records for invitees and guests. Off restricts the sync to linking against existing records.
What attributes land on each booking entry?
Each Calendly Booking Events entry has the following attribute groups. Anything Calendly does not provide on a given booking (payment information on a free meeting, UTM parameters on a direct visit) stays blank.
Event details
- Event name
- Start time
- End time
- Timezone
- Location
- Status (active / canceled)
Invitee
- Name
- Timezone
Payment (when present)
- Provider (Stripe, PayPal, etc.)
- Amount
- Currency
- Success status
Guests
- Linked Person records for every guest on the booking
Tracking
- Reschedule flag
- No-show status
- UTM parameters from the booking link
Reference
- Calendly event URI
- Calendly invitee URI
Each Calendly Answers entry includes
- Question text
- Normalized key (snake_case version of the question)
- Answer value (with type inference: text, number, boolean, etc.)
- Source (event booking form)
- Link back to the parent Calendly Booking Events entry
- Link to the Person record the answer belongs to
- Event context: event name, start time, status
What are the known limitations?
- Webhook delivery can lag occasionally. Calendly webhooks are normally real time. The app uses idempotency to prevent duplicates, but a significantly delayed webhook may need manual verification.
- "Last Interaction" is not writable. Attio does not currently allow third-party apps to write to its native activity stream. Calendly events go to the dedicated list instead.
Frequently asked questions
What does the Calendly sync to Attio do?
It creates a one-way sync from Calendly to Attio. Every booking, cancellation, reschedule, and no-show flows into Attio as a list entry, with form answers captured separately. The app creates Attio People records for invitees and guests as it goes, captures payment information, and maintains a full audit trail.
Where do Calendly events show up in Attio?
In two lists the app creates on first connection: "Calendly Booking Events" (one entry per booking, with event details, status, payment info, and tracking) and "Calendly Answers" (one entry per question/answer pair from the booking form, linked back to the parent booking). Lists keep Person records uncluttered and support one-to-many event relationships.
Why don't my Calendly webhooks show up in Attio's UI?
Webhook handlers created via the Attio SDK are hidden by design. They still run behind the scenes and are removed automatically when you disconnect the integration.
Does the integration create duplicate People in Attio?
No. Before creating a new Person, the app checks for an existing match by email address. If a match exists, the booking is linked to that record. If not, a new Person is created (assuming Auto-create People is on).
How fast do Calendly events appear in Attio?
Real time via webhooks. Most bookings land in the Calendly Booking Events list within a few seconds of being created in Calendly.
Do Calendly events update Attio's "Last Interaction" field?
No. Attio does not currently allow third-party apps to write to its native activity stream or last-interaction field. Calendly events go to the dedicated list instead.
Why is each event a separate list entry instead of updating one row per person?
Because the lists are designed as event streams, not state tables. Separate entries support historical reporting ("how many bookings last quarter?"), reschedule tracking, and workflow triggers on specific events without overwriting prior data.
What happens when someone reschedules a meeting?
The original booking entry is marked canceled with the Rescheduled flag set to true. The Event Status field on each linked answer entry flips to canceled (the entries themselves stay on the list; only the status field updates). A new booking entry is created with active status, plus fresh answer entries (if the form was resubmitted). Both the original and the new booking stay in the list so you can see the full history.
Does the integration capture payment information?
Yes. If the booking required payment, the entry includes the provider (Stripe, PayPal, etc.), the amount, the currency, and the payment success status.
Can I filter which bookings sync to Attio?
Yes. User Email Whitelist limits sync to specific Calendly users (comma-separated email list). Event Type Whitelist limits sync to specific event types (comma-separated slugs, UUIDs, or full URIs). Leave both empty to sync everything.
What if a booking has guests?
The app creates or updates Attio People records for every guest, links them to the booking entry via record references, and maintains the relationship between the primary invitee and guests.
Is the Calendly sync app paid?
No. The app is free to install and use. We built it to make connecting Calendly and Attio painless. If you need custom behavior (additional filters, alternative list structures, or custom routing), get in touch via the Contact page.