Zapier and Make parse raw email text, missing iCal data entirely
Calendar sync tools only work with Google/Outlook, not Notion
Manual copy-paste loses attendee statuses and structured data
Most integrations treat calendar emails like regular emails
Building iCal parsers from scratch is complex and fragile
You shouldn't have to build this yourself.
Mailhooks understands .ics files and calendar MIME types. Event data is extracted from the actual iCal payload, not scraped from email text.
Title, start/end times, location, description, organizer, and attendees — all mapped to Notion properties automatically.
See who's invited and their RSVP status (Accepted, Declined, Tentative) right in your Notion database.
Distinguish between new invites (REQUEST), updates, cancellations (CANCEL), and responses (REPLY). Handle each appropriately.
Authorize Mailhooks to access your Notion workspace.
Use an existing database or let Mailhooks create one with calendar-specific properties.
Create a Notion Calendar hook with your preferred email address and routing rules.
Calendar invites sent to your Mailhooks address are parsed and added to Notion automatically.
Filter by date, organizer, or status. Build custom views for upcoming meetings, cancelled events, etc.
Calendar invites become structured database entries with all event details.
// Incoming calendar invite email
Subject: Team Standup - Daily at 10am
From: [email protected]
Attachment: invite.ics
// Parsed from .ics file:
{
"method": "REQUEST",
"event": {
"summary": "Team Standup",
"start": "2026-02-03T10:00:00Z",
"end": "2026-02-03T10:30:00Z",
"location": "Zoom Meeting",
"organizer": "[email protected]",
"attendees": [
{ "email": "[email protected]", "status": "ACCEPTED" },
{ "email": "[email protected]", "status": "TENTATIVE" }
]
}
}// Your Notion Database
┌──────────────────────────────────────────────────────┐
│ 📅 Calendar Events │
├──────────────┬────────────┬──────────┬──────────────┤
│ Event │ Start │ Location │ Status │
├──────────────┼────────────┼──────────┼──────────────┤
│ Team Standup │ Feb 3 10am │ Zoom │ ✅ Confirmed │
│ 1:1 with PM │ Feb 3 2pm │ Office │ ❓ Tentative │
│ Sprint Demo │ Feb 4 3pm │ Zoom │ ❌ Cancelled │
└──────────────┴────────────┴──────────┴──────────────┘
// Each row expands to a full page with:
• 🕐 Start/End times
• 📍 Location
• 👤 Organizer
• 👥 Attendees with RSVP status
• 📝 Full descriptionMailhooks parses iCalendar (.ics) data, which is the standard format used by Google Calendar, Outlook, Apple Calendar, and most other calendar applications. If the email contains an .ics attachment or inline calendar data, Mailhooks will extract it.
Each calendar event has a unique UID. When an update arrives (same UID, higher sequence number), Mailhooks creates a new entry with the updated details. You can filter by UID to see the history of changes.
Cancellations (METHOD:CANCEL) are parsed and added to your database with a "Cancelled" status. You can set up Notion filters to hide cancelled events or track them separately.
Yes. Each occurrence of a recurring event that arrives as an email is parsed and added as a separate entry. The UID includes recurrence information so you can track the series.
Yes! Enable "Also process as email" on your Calendar Hook. The calendar invite will be added to your Notion calendar database AND the full email will be processed through your other hooks (webhooks, Discord, regular Notion, etc.).
Mailhooks automatically adds missing properties (Start, End, Location, Status, Organizer, Attendees, UID) when you create a hook. Existing data and properties are preserved.
Attendees are stored in a rich text field with their names, emails, and RSVP statuses (✅ Accepted, ❌ Declined, ❓ Tentative). The full list is also displayed in the page content.
Absolutely. Connect any Notion workspace you have access to, including team workspaces. All team members with access to the database can see the calendar entries.
Takes Under 5 minutes — no email infrastructure required.
Create a database with properties like Event (title), Start (date), End (date), Location (text), Status (select). Mailhooks will add missing properties automatically.
Go to Integrations → Notion and authorize access. Select the workspace containing your calendar database.
Go to Hooks → Notion Calendar. Select your database and configure property mappings. Calendar-specific properties like Attendees and Status are handled automatically.
Forward a calendar invite to your Mailhooks address or use the "Send Test" button. Check that it appears in Notion with all details.