The Problem
- Calendar invites get lost in your inbox among hundreds of other emails
- Manually copying meeting details into Notion is tedious and error-prone
- No central place to track meetings outside your calendar app
- Attendee lists and RSVP statuses are buried in email headers
- Cancelled meetings leave orphaned entries everywhere
Why Existing Solutions Fall Short
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.
How Mailhooks Solves This
iCal-Aware Parsing
Mailhooks understands .ics files and calendar MIME types. Event data is extracted from the actual iCal payload, not scraped from email text.
Full Event Details
Title, start/end times, location, description, organizer, and attendees — all mapped to Notion properties automatically.
Attendee Tracking
See who's invited and their RSVP status (Accepted, Declined, Tentative) right in your Notion database.
Method Awareness
Distinguish between new invites (REQUEST), updates, cancellations (CANCEL), and responses (REPLY). Handle each appropriately.
How it works
Connect Notion
Authorize Mailhooks to access your Notion workspace.
Create or select a database
Use an existing database or let Mailhooks create one with calendar-specific properties.
Set up a Calendar Hook
Create a Notion Calendar hook with your preferred email address and routing rules.
Forward or receive invites
Calendar invites sent to your Mailhooks address are parsed and added to Notion automatically.
Track meetings in Notion
Filter by date, organizer, or status. Build custom views for upcoming meetings, cancelled events, etc.
Code Example
Calendar invites become structured database entries with all event details.
Webhook Payload
// 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" }
]
}
}Handler Code
// 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 descriptionFrequently Asked Questions
Mailhooks 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.
Quick setup guide
Takes Under 5 minutes — no email infrastructure required.
Prepare your Notion database
Create a database with properties like Event (title), Start (date), End (date), Location (text), Status (select). Mailhooks will add missing properties automatically.
Connect Notion in Mailhooks
Go to Integrations → Notion and authorize access. Select the workspace containing your calendar database.
Create a Calendar Hook
Go to Hooks → Notion Calendar. Select your database and configure property mappings. Calendar-specific properties like Attendees and Status are handled automatically.
Test with a real invite
Forward a calendar invite to your Mailhooks address or use the "Send Test" button. Check that it appears in Notion with all details.