Calendar invites → Notion database entries

Meeting requests, event updates, and cancellations arrive as email. Mailhooks parses the iCal data and creates structured Notion pages with times, locations, attendees, and RSVP statuses.

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

1

Connect Notion

Authorize Mailhooks to access your Notion workspace.

2

Create or select a database

Use an existing database or let Mailhooks create one with calendar-specific properties.

3

Set up a Calendar Hook

Create a Notion Calendar hook with your preferred email address and routing rules.

4

Forward or receive invites

Calendar invites sent to your Mailhooks address are parsed and added to Notion automatically.

5

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 description

Frequently 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.

1

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.

2

Connect Notion in Mailhooks

Go to Integrations → Notion and authorize access. Select the workspace containing your calendar database.

3

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.

4

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.

Never lose a meeting invite again