Never miss an interview again.
Turn recruiting emails into native reminders with AI-powered parsing.
Features โข Quick Start โข Installation โข Usage โข Configuration
You're job hunting. Your inbox is flooded with recruiting emailsโinterview invites, online assessments, coding challenges, deadlines. The important ones get buried under "application received" receipts and spam.
You miss an interview. Or show up at the wrong time. Or forget that coding test deadline.
OfferCatcher automatically scans your emails, extracts recruiting events using AI, and syncs them into native reminders on your iPhone/Mac.
๐ง Email arrives โ ๐ค AI parses it โ ๐ Reminder created
No regex. No brittle pattern matching. Just intelligent extraction that works across all email formats and languages.
OfferCatcher is intentionally split into two layers:
- OpenClaw orchestration handles scanning Apple Mail, calling the LLM, validating event JSON, and deciding what should be synced.
- Native bridge execution handles the final reminder write.
scripts/apple_reminders_bridge.pyprefersremindctl(Swift + EventKit) and only falls back to AppleScript when needed.
This design avoids relying on a background Node process directly automating Reminders.app, which can be unreliable under macOS TCC / Automation permissions.
- ๐ค AI-Powered Parsing โ LLM understands any email format, any language
- ๐ Native Apple Integration โ Works with Mail.app and Reminders.app
- ๐ฑ Cross-Device Sync โ Reminders appear on iPhone, iPad, Mac via iCloud
- โก Fully Automated โ Set up once, runs via OpenClaw heartbeat
- ๐ Universal Language Support โ Chinese, English, Japanese, you name it
- LINUX DO โ ไธญๆๅผๅ่ ็คพๅบ
# Install
curl -sSL https://raw.githubusercontent.com/NissonCX/offercatcher/main/install.sh | bash
# Recommended native bridge
brew install steipete/tap/remindctl
remindctl authorize
# Configure
echo 'mail_account: "Gmail"' >> ~/.openclaw/offercatcher.yaml
# Scan
python3 ~/.openclaw/workspace/skills/offercatcher/scripts/recruiting_sync.py --scan-onlyOpenClaw will automatically parse the results and create reminders.
- macOS (Apple Mail & Reminders integration)
- Python 3.11+
remindctlrecommended (brew install steipete/tap/remindctl)- OpenClaw (optional, for automation)
# Search for the skill
openclaw skills search offercatcher
# Install to your workspace
openclaw skills install offercatchercurl -sSL https://raw.githubusercontent.com/NissonCX/offercatcher/main/install.sh | bashThen authorize the native bridge once:
remindctl authorizegit clone https://github.com/NissonCX/offercatcher.git
cd offercatcherpython3 scripts/list_mail_sources.pyThis shows all accounts configured in Apple Mail:
[
{"account": "Gmail", "mailbox": "INBOX"},
{"account": "iCloud", "mailbox": "INBOX"}
]Create ~/.openclaw/offercatcher.yaml:
mail_account: "Gmail" # Your Apple Mail account name
mailbox: "INBOX" # Mailbox to scan
days: 2 # Scan last N days
max_results: 60 # Max emails to processpython3 scripts/recruiting_sync.py --scan-onlyOutput (JSON for OpenClaw LLM to parse):
{
"emails": [
{
"message_id": "12345",
"subject": "Interview Invitation - Software Engineer",
"sender": "recruiting@company.com",
"received_at": "2026-04-01 10:00",
"body": "Dear Candidate, Your interview is scheduled for..."
}
]
}OpenClaw automatically:
- Parses each email with LLM
- Extracts company, event type, time, link
- Hands the final write to the native reminders bridge
Or manually apply parsed events:
python3 scripts/recruiting_sync.py --apply-events /tmp/events.jsonpython3 scripts/manual_event.py \
--title "Google Interview" \
--due "2026-04-15 14:00" \
--notes "Link: https://meet.google.com/xxx"โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ --scan-only โ โโโถ โ OpenClaw LLM โ โโโถ โ Native bridge writes โ
โ Scan emails โ โ Parse events โ โ remindctl / AppleScript โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Regex | LLM |
|---|---|
| Breaks on new formats | Adapts to any format |
| Company-specific rules | Works for any company |
| Manual maintenance | Zero maintenance |
| Language-specific | Universal language support |
| Option | Default | Description |
|---|---|---|
--mail-account |
all | Apple Mail account name |
--mailbox |
INBOX | Mailbox folder to scan |
--days |
2 | Scan last N days |
--max-results |
60 | Max emails to process |
--dry-run |
false | Test without creating reminders |
--verbose |
false | Enable debug logging |
OFFERCATCHER_MAIL_ACCOUNT="Gmail"
OFFERCATCHER_DAYS=7
OFFERCATCHER_MAX_RESULTS=100
OFFERCATCHER_LOG_LEVEL=DEBUGThe --apply-events command accepts:
{
"events": [
{
"id": "unique-id",
"company": "Google",
"event_type": "interview",
"title": "Google SWE Interview",
"timing": {"start": "2026-04-15 14:00", "end": "2026-04-15 15:00"},
"role": "Software Engineer",
"link": "https://meet.google.com/xxx"
}
]
}Event types: interview, ai_interview, written_exam, assessment, authorization, deadline
Reminder List |
Reminder Detail |
offercatcher/
โโโ scripts/
โ โโโ recruiting_sync.py # Main script (scan/apply)
โ โโโ apple_reminders_bridge.py # Apple Reminders bridge
โ โโโ manual_event.py # Manual event entry
โ โโโ list_mail_sources.py # List Mail accounts
โโโ tests/ # Unit tests
โโโ SKILL.md # OpenClaw skill definition
โโโ README.md # This file
Contributions are welcome! Please feel free to submit a Pull Request.
Made with โค๏ธ for job seekers everywhere

