afrexai-email-to-calendarExtract calendar events, deadlines, action items, and follow-ups from emails. Works with any calendar provider (Google, Outlook, Apple, Notion, etc.). No external dependencies ā pure agent intelligence. Use when the user forwards an email, asks to check inbox for events, or wants to extract structured scheduling data from any text.
Install via ClawdBot CLI:
clawdbot install 1kalin/afrexai-email-to-calendarTurn emails into structured calendar events with zero missed deadlines.
When you receive an email (forwarded, pasted, or from inbox):
Scan every email for ALL of these categories:
| Category | Signals | Priority |
|----------|---------|----------|
| Hard Events | "meeting at", "call on", "event on", specific date+time | š“ High |
| Deadlines | "due by", "submit before", "RSVP by", "register by", "expires" | š“ High |
| Soft Events | "sometime next week", "let's meet soon", "planning for March" | š” Medium |
| Recurring | "every Monday", "weekly", "monthly", "standing meeting" | š” Medium |
| Action Items | "please review", "can you send", "follow up on", "action required" | š” Medium |
| Travel/Logistics | Flight numbers, hotel confirmations, check-in times, gate info | š“ High |
| Implicit Deadlines | Event is Feb 20 ā ticket deadline is likely 1-2 weeks before | š” Medium |
For each item found, extract:
- title: "Descriptive name (max 80 chars)"
type: event | deadline | action_item | travel | recurring
date: "YYYY-MM-DD"
day_of_week: "Monday" # Always include for verification
time_start: "14:00" # 24h format, default 09:00 if unclear
time_end: "15:00" # Default: start + 1h for meetings, all-day for deadlines
timezone: "America/New_York" # Extract from email headers or content
is_all_day: false
is_multi_day: false # If true, include end_date
end_date: null
recurrence: null # "weekly" | "biweekly" | "monthly" | "MWF" | custom RRULE
location: null # Physical address or video link
url: null # Registration link, event page, or action URL
attendees: [] # Names/emails mentioned
confidence: high | medium | low
source_quote: "exact text from email that indicates this event"
notes: "any context the user should know"
deadline_action: null # "RSVP" | "register" | "buy tickets" | "submit"
deadline_url: null # Direct link to take action
reminder_minutes: 30 # Suggested reminder (15 for calls, 60 for travel, 1440 for deadlines)
| Confidence | Criteria |
|------------|----------|
| High | Explicit date + time + clear event type. E.g. "Meeting on Feb 15 at 2pm" |
| Medium | Date but no time, or time but approximate date. E.g. "next Tuesday afternoon" |
| Low | Vague reference. E.g. "we should catch up soon", "sometime in March" |
Before extracting, classify the email:
| Email Type | How to Handle |
|------------|---------------|
| Calendar notification (from calendar-notification@google.com, outlook, etc.) | SKIP ā these are responses to existing events |
| Newsletter/marketing | Extract only if contains relevant event dates |
| Personal/work email | Full extraction |
| Travel confirmation | Extract ALL logistics: flights, hotels, car rentals, check-ins |
| Meeting invite (ICS attachment or structured invite) | Extract directly, high confidence |
| Thread/reply | Only extract NEW events, not ones from quoted text |
| Forwarded email | Process the forwarded content, note original sender |
Always present extracted items in this format:
š§ From: [sender] | Subject: [subject] | Date: [received date]
Found [N] calendar items:
1. š“ **Team Standup** ā Mon Feb 17, 9:00-9:30 AM EST
š Zoom (link in email) | š„ Alice, Bob, Charlie
š Recurring: Every weekday
ā
Confidence: High
2. š“ **Project Deadline: Q1 Report** ā Fri Feb 28, EOD
ā ļø ACTION REQUIRED: Submit report
š [Submission portal](url)
ā° Suggested reminder: 3 days before
ā
Confidence: High
3. š” **Team Lunch** ā "sometime next week"
š TBD
ā ļø Confidence: Medium ā date needs confirmation
---
Reply with numbers to create (e.g. "1, 2"), "all", or "none".
Type "edit 3" to modify before creating.
After user confirms, create events using their calendar tool:
gog or API)gog calendar create \
--title "Event Title" \
--start "2026-02-17T09:00:00-05:00" \
--end "2026-02-17T10:00:00-05:00" \
--description "Extracted from email: [subject]" \
--location "Zoom link or address"
osascript)osascript -e 'tell application "Calendar"
tell calendar "Work"
make new event with properties {summary:"Event Title", start date:date "Monday, February 17, 2026 at 9:00:00 AM", end date:date "Monday, February 17, 2026 at 10:00:00 AM", description:"Extracted from email", location:"Zoom"}
end tell
end tell'
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTART:20260217T090000
DTEND:20260217T100000
SUMMARY:Event Title
DESCRIPTION:Extracted from email
LOCATION:Zoom link
END:VEVENT
END:VCALENDAR
Before creating any event, check for duplicates:
// memory/email-calendar-log.json
{
"created_events": [
{
"email_id": "msg-123",
"email_subject": "Team Offsite",
"event_title": "Team Offsite",
"event_date": "2026-02-17",
"calendar_event_id": "cal-456",
"created_at": "2026-02-13T10:00:00Z"
}
]
}
| Pattern | Example | Action |
|---------|---------|--------|
| RSVP deadline | "RSVP by Feb 10" | Create reminder 3 days before |
| Registration | "Register by March 1" | Create reminder 1 week before |
| Early bird | "Early bird ends Feb 15" | Create reminder 2 days before |
| Ticket sales | "Tickets on sale until..." | Create reminder + calendar event |
| Submission | "Submit proposal by..." | Create reminder 3 days before |
| Expiration | "Offer expires..." | Create reminder 1 day before |
Travel confirmations get special treatment:
When scanning an inbox for events:
š¬ Inbox Scan: 47 unread ā 12 with calendar items ā 18 events found
THIS WEEK (Feb 13-19):
1. š“ Sprint Review ā Thu Feb 13, 3:00 PM
2. š“ 1:1 with Manager ā Fri Feb 14, 10:00 AM
...
NEXT WEEK (Feb 20-26):
5. š” Team Lunch ā date TBD (mentioned in 2 emails)
...
DEADLINES:
ā ļø Q1 Report ā Due Feb 28 (15 days) ā [Submit here](url)
ā ļø Conference RSVP ā Due Feb 20 (7 days) ā [RSVP](url)
| Situation | How to Handle |
|-----------|---------------|
| Multiple timezones in one email | Extract each event in its stated timezone, convert to user's TZ for display |
| "TBD" or "TBA" times | Create all-day event, flag for follow-up |
| Cancelled events | Check if already in calendar ā offer to delete |
| Rescheduled events | Find original ā offer to update (not create new) |
| Recurring with exceptions | Note specific exception dates in description |
| Date ambiguity (02/03 = Feb 3 or Mar 2?) | Use email's locale/origin for MM/DD vs DD/MM, ask if unclear |
| Events in quoted/forwarded text | Only process if user explicitly forwarded it |
| Attachments with .ics files | Parse ICS directly ā highest confidence source |
| "Save the date" emails | Create tentative event, mark as placeholder |
| Conference with multiple sessions | Extract all sessions as separate events with shared description |
Track user preferences across sessions:
# memory/email-calendar-prefs.yaml
default_timezone: "America/New_York"
default_calendar: "Work"
default_reminder_minutes: 30
auto_create_patterns:
- "standup"
- "1:1"
ignore_patterns:
- "newsletter"
- "marketing"
preferred_format: "12h" # or "24h"
travel_reminder_hours: 3
Update preferences when user corrects you or states a preference.
Generated Mar 1, 2026
A project manager receives daily emails with meeting invites, deadlines, and action items from team members and stakeholders. The skill extracts all scheduling data from forwarded emails, presents structured events with confidence scores, and creates calendar entries after confirmation, ensuring no deadlines are missed and meetings are properly scheduled across time zones.
University administrators handle emails about class schedules, exam dates, faculty meetings, and student submission deadlines. The skill parses emails from instructors and students, extracts recurring events like weekly lectures and soft deadlines for assignments, and helps maintain an organized academic calendar with reminders for critical dates.
A travel coordinator or event planner receives confirmation emails for flights, hotel bookings, and conference logistics. The skill identifies high-priority travel items such as check-in times and flight details, extracts multi-day event schedules, and creates all-day or timed calendar entries with reminders for travel deadlines and event preparations.
Freelancers manage emails from multiple clients containing project deadlines, call schedules, and invoice due dates. The skill scans forwarded or pasted email content, classifies items as hard deadlines or soft events, and presents them for selection to integrate into personal calendars like Google or Apple, boosting productivity without manual entry.
Medical staff receive emails about patient appointments, staff meetings, and training sessions. The skill extracts explicit dates and times from emails, handles recurring events like weekly team huddles, and flags conflicts with existing schedules, ensuring accurate calendar management for critical healthcare operations.
Offer the skill as a premium add-on within productivity platforms like Notion or calendar apps, charging a monthly fee per user. Revenue comes from tiered plans based on features such as advanced extraction for travel logistics or integration with multiple calendar providers, targeting teams and enterprises.
License the skill to large corporations for internal use, with custom integrations into their existing email and calendar systems like Outlook or Google Workspace. Revenue is generated through annual contracts that include support, training, and updates, focusing on industries with high scheduling demands like consulting or healthcare.
Provide a free version with basic extraction for personal use, and upsell to a paid version for advanced features like conflict detection, multi-calendar sync, and automated reminders. Revenue streams include in-app purchases and one-time upgrades, appealing to individual professionals and small businesses.
š¬ Integration Tip
Integrate with calendar APIs like Google Calendar or Outlook using OAuth for secure event creation, and ensure the skill can parse email headers to extract timezone data accurately for cross-regional scheduling.
Manage Trello boards, lists, and cards via the Trello REST API.
Sync and query CalDAV calendars (iCloud, Google, Fastmail, Nextcloud, etc.) using vdirsyncer + khal. Works on Linux.
Manage tasks and projects in Todoist. Use when user asks about tasks, to-dos, reminders, or productivity.
Master OpenClaw's timing systems. Use for scheduling reliable reminders, setting up periodic maintenance (janitor jobs), and understanding when to use Cron v...
Calendar management and scheduling. Create events, manage meetings, and sync across calendar providers.
Kanban-style task management dashboard for AI assistants. Manage tasks via CLI or dashboard UI. Use when user mentions tasks, kanban, task board, mission con...