Notion Calendar Integration
Automatically parse calendar invites from emails and create structured entries in your Notion database — with attendees, times, locations, and RSVP statuses.
Overview
The Notion Calendar integration detects iCal (.ics) data in incoming emails — meeting invites, event updates, cancellations — and creates database entries with all event details parsed and structured.
iCal Parsing
Native .ics file and calendar MIME type support
Attendee Tracking
Names, emails, and RSVP statuses preserved
Method Awareness
Distinguish invites, updates, and cancellations
Auto Properties
Database columns created automatically
How It Works
- 1Email arrives
An email with a calendar invite (.ics attachment or inline calendar data) hits your Mailhooks address.
- 2iCal detection
Mailhooks scans for
text/calendarcontent,.icsattachments, or inlineBEGIN:VCALENDARblocks. - 3Event parsing
The iCal data is parsed to extract event details: summary, start/end times, location, organizer, attendees, status, and method.
- 4Notion page creation
A new page is created in your Notion database with all event details as properties, plus rich page content showing attendees and description.
Create a Calendar Hook
Before creating a Calendar Hook, make sure you've connected your Notion workspace.
Prepare a Database
Create a new Notion database for calendar events. You can start with an empty database — Mailhooks will add the required properties automatically.
Create the Hook
- 1. Go to Dashboard → Hooks
- 2. Click Add Hook
- 3. Select Notion Calendar
- 4. Choose your connected Notion workspace
- 5. Select the target database
- 6. Configure property mapping (or use defaults)
- 7. (Optional) Set domain filtering
- 8. Click Create
Test It
Click Send Test to create a sample calendar event in your database, or forward a real calendar invite to your Mailhooks address.
Database Schema
Mailhooks automatically creates these properties when you set up a Calendar Hook:
| Property | Type | Description |
|---|---|---|
| Event | Title | Event summary/name (page title) |
| Start | Date | Event start date/time (with end time if available) |
| End | Date | Event end date/time |
| Location | Rich Text | Event location (physical or virtual) |
| Organizer | Email | Meeting organizer's email address |
| Attendees | Rich Text | List of attendees with RSVP status |
| Status | Select | Confirmed / Tentative / Cancelled |
| UID | Rich Text | Unique event identifier (for tracking updates) |
| Mailhooks | URL | Link back to the original email in Mailhooks |
Calendar Methods
iCalendar events include a METHODthat indicates the type of notification. Mailhooks displays this in the page content:
REQUEST
A new meeting invitation. You're being asked to attend.
CANCEL
The meeting has been cancelled. Status is set to "Cancelled".
REPLY
An attendee has responded (accepted/declined/tentative).
PUBLISH
A published event (no response expected).
Also Process as Email
By default, Calendar Hooks only extract calendar data and don't trigger other hooks (webhooks, Discord, regular Notion, etc.).
Enable Also process as email to:
- Send the calendar invite to your webhook
- Post to Discord
- Save the full email to another Notion database
- Trigger any other hooks you have configured
Troubleshooting
No calendar data found
- Ensure the email contains an .ics attachment or inline calendar data
- Some calendar apps send plain-text invites without iCal — these won't parse
- Check the Logs for the specific error
Attendees not showing
- Some calendar invites don't include attendee data (especially forwarded invites)
- Check that the Attendees property exists in your database
- Attendees are limited to 20 per event in the page content
Times look wrong
- Calendar times are stored in UTC in Notion
- Your Notion view may need timezone adjustment
- All-day events are detected and handled separately
Database properties missing
- Make sure the database is shared with the Mailhooks integration
- Try re-creating the hook — properties are created on hook creation
- Manually add missing properties with the correct types