← All writing

April 28, 2026 · 6 min

From Scattered to Synced: Building Cal → Notion

A native macOS tool that turns calendar chaos into a structured weekly Notion view — automatically.

The Problem

If you live in Google Calendar and work in Notion, you already know the friction. Your week is scattered across multiple calendars — work, family, shared — and your Notion workspace is where your planning actually happens. But getting those two worlds to talk to each other? That's a manual copy-paste job that nobody has time for.

For operations and productivity-focused teams, this gap is more than an inconvenience. It creates a visibility problem. When your weekly schedule isn't surfaced in the same place as your projects, tasks, and goals, you lose the context that makes planning meaningful. You end up context-switching between tools just to answer a simple question: what does my week actually look like?

The Opportunity

Calendar data is rich, structured, and already being maintained. The opportunity isn't to replace how people manage their time — it's to make that time data work harder by surfacing it where decisions actually get made.

For teams using Notion as an operating system, a weekly schedule view isn't just a convenience. It's a foundation for async communication, capacity planning, and personal accountability. When everyone can see what's on each other's plates — in the same tool they use for projects and docs — coordination gets easier and planning gets more intentional.

What I Built

Cal → Notion is a lightweight native macOS menu bar app that bridges Google Calendar and Notion with zero friction.

Hover over the calendar icon in your menu bar, select how many weeks ahead you want to capture, hit play, and within seconds a beautifully formatted schedule page appears in your Notion workspace — organized day-by-day, grouped by calendar source, with times and event details laid out in a clean table format.

It supports multiple Google Calendar accounts simultaneously, lets you toggle individual calendars on or off before posting, and allows inline editing or removal of events, so the Notion page reflects exactly what you want it to show — not just a raw data dump.

And once it's set up, you don't have to think about it. A launchd scheduler runs the full pipeline automatically every Monday morning at 7am, so your Notion workspace is ready before the week begins.

Who It's For

Cal → Notion is built for people who:

  • Use Notion as their primary productivity and planning tool
  • Manage multiple Google Calendars (personal, work, family, shared)
  • Want visibility into their week without manual work
  • Value clean, structured information over raw data exports
  • Run on macOS and prefer native, lightweight tooling over browser extensions or SaaS subscriptions

It's particularly valuable for solo operators, founders, and senior ICs who manage complex schedules across multiple contexts — and for small teams where a shared Notion workspace is the source of truth for planning and coordination.

The Value

For individuals, Cal → Notion removes the Sunday night ritual of manually copying your week into Notion. Your schedule is always there, always current, always in the right format.

For teams, it creates a lightweight layer of calendar transparency without requiring everyone to share calendar access. A team lead can run the agent, post the week's schedule to a shared Notion page, and give the whole team visibility into availability and priorities — in the tool they're already using.

For productivity systems, it closes the loop between time and task management. When your calendar events live alongside your projects, goals, and notes in Notion, you can plan more realistically, spot conflicts earlier, and reflect on how your time actually maps to your priorities.

How It Works

The app is built on three layers:

A native Swift/SwiftUI menu bar app that lives unobtrusively in your menu bar, opens on hover, and handles the user-facing workflow — calendar selection, event preview, editing, and posting.

A local Express/TypeScript backend that runs on localhost and handles all API communication — fetching events from Google Calendar via OAuth and writing formatted pages to Notion via their API. No data leaves your machine except for the authenticated API calls to Google and Notion.

A launchd scheduler that runs the full pipeline headlessly every Monday at 7am, so the weekly page is created automatically without any manual intervention.

The whole thing is open source, installable via Homebrew, and takes about 10 minutes to set up.

brew tap dkeg/cal-notion then brew install --cask cal-notion

What I Learned

This project was an exercise in finding the simplest architecture that actually works in production. Early versions tried to route everything through hosted MCP servers and cloud deployments — but the right answer turned out to be local-first: a small backend that runs on your machine, authenticated with credentials you control, talking directly to the APIs you've already authorized.

It's also a reminder that the best productivity tools are the ones that disappear. The goal was never to build something you interact with — it was to build something that runs quietly in the background and makes your Notion workspace more useful without you having to think about it.

Try It

GitHub: github.com/dkeg/cal-notion

Requires macOS 13+, Node.js 18+, a Google account, and a Notion workspace.