Publishes a Notion database with a date property to a calendar feed.
Try the live demo calendar feed:
https://ncal.val.run/2d92c190bff080658109ec63757a2e53?tz=America/Los_Angeles
Your database needs these properties:
You can duplicate this example database to get started: š Example Todo Database
NOTION_API_TOKEN in "Environment variables" from the sidebardatePropertyName, donePropertyName, and maxEventAgeInMonths in the code if your property names differAccess your calendar feed by appending your Notion database ID and timezone to the URL:
https://<your-val-url>/<notion-database-id>?tz=<timezone>
For example:
https://example.web.val.run/abc123def456?tz=America/Los_Angeles
You can find your database ID in the Notion URL when viewing the database:
https://notion.so/<database-id>?v=...
The tz parameter uses IANA timezone names (also known as "tz database" names).
Common examples:
America/New_York (Eastern Time)America/Chicago (Central Time)America/Denver (Mountain Time)America/Los_Angeles (Pacific Time)Europe/LondonEurope/ParisAsia/TokyoAsia/ShanghaiAustralia/SydneyFind your timezone name in the full list: List of tz database time zones (Wikipedia)
Look for the "TZ identifier" column in the table.
If you don't specify a timezone, it defaults to UTC.
Subscribe to this URL in any calendar app (Google Calendar, Apple Calendar, Outlook, etc.) to sync your Notion events.
Events in Notion that have only a date (no time) are displayed as all-day events in your calendar.
The calendar automatically creates a daily reminder for overdue tasks. An event is considered overdue if:
Done checkbox is unchecked, ANDAll overdue events are aggregated into a single all-day event that appears on today's date (based on your specified timezone) with:
Title: All overdue event titles joined with " ⢠" (e.g., "Task 1 ⢠Task 2 ⢠Task 3")
Description: Each event's title and Notion URL, formatted as:
Task 1
https://notion.so/...
Task 2
https://notion.so/...
This gives you a daily overview of incomplete tasks that need attention.
Your Notion database should have:
datePropertyName)donePropertyName)š Duplicate this example database to get started quickly.