notion2ical-cli
v0.0.6
Published
A cli tool that converts a Notion calendar database into iCalendar \(.ics\) format.
Maintainers
Readme
notion2ical-cli
A command-line tool that converts a Notion calendar database into iCalendar (.ics) format.
Features
- Export Notion calendar databases to iCalendar format
- Supports incremental updates for efficient syncing
- Customizable event mapping and error handling
- Written in TypeScript, ESM-first
Installation
npm install -g notion2ical-cliOr use it directly with npx:
npx notion2ical-cli --helpUsage
notion2ical-cli \
--auth <token> \
--database-id <id> \
--title-property-name <name> \
--date-property-name <name>Options
-a, --auth <token>: (Required) Notion integration token (or setNOTION_AUTH_TOKENin env)-d, --database-id <id>: (Required) Notion database ID (or setNOTION_DATABASE_IDin env)-t, --title-property-name <name>: (Required) Name of the property containing the event title (or setNOTION_TITLE_PROPERTY_NAMEin env)-e, --date-property-name <name>: (Required) Name of the property containing the event start/end date (or setNOTION_DATE_PROPERTY_NAMEin env)-s, --desc-property-name <name>: (Optional) Name of the property containing the event description (or setNOTION_DESC_PROPERTY_NAMEin env)-f, --fallback-duration <min>: (Optional) Default duration for events without an end, in minutes (must be a positive integer, default: 60)-i, --ignore-missing-dates: (Optional) Ignore events with no date set (default: false)--calendar-name <name>: (Optional) Name of the calendar to create (default: Notion Calendar)--from-date <date>: (Optional) Include events starting on or after this date (inclusive). AcceptsYYYY-MM-DD,YYYY/MM/DD,YYYY.MM.DD, or full ISO 8601 (e.g.,2025-06-28T14:30:00Z)--until-date <date>: (Optional) Include events starting on or before this date (inclusive). AcceptsYYYY-MM-DD,YYYY/MM/DD,YYYY.MM.DD, or full ISO 8601 (e.g.,2025-06-28T14:30:00Z)--incremental: (Optional) Enable incremental sync (enables --cache-dir and --cache-max-age options, default: false)--cache-dir <path>: (Optional) Directory to store cached sync state (requires --incremental, default: system cache folder; will be created if it does not exist)--cache-max-age <sec>: (Optional) Perform a full resync if the cache is older than this many seconds (requires --incremental, a non-negative integer in seconds or 0 to disable, default: 0)-v, --verbose: (Optional) Enable verbose logging (can be used multiple times for more verbosity)-o, --output <file>: (Optional) Write the generated.icsto a file instead of stdout
Warning: Incremental mode does not detect deleted events/pages in Notion. If you delete an event in Notion, it will remain in the generated
.icsfile until you perform a full (non-incremental) sync or manually clear the cache directory. The--cache-max-ageoption can be used to force a full resync after a specified period, which will remove deleted events from the output. Use incremental mode for performance, but be aware of this limitation.
Example
notion2ical-cli \
--auth secret_xxx \
--database-id 1234567890abcdef \
--title-property-name Name \
--date-property-name DateEnvironment Variables
You can set some options via environment variables instead of command-line flags:
NOTION_AUTH_TOKEN: Notion integration tokenNOTION_DATABASE_ID: Notion database IDNOTION_TITLE_PROPERTY_NAME: Name of the title propertyNOTION_DATE_PROPERTY_NAME: Name of the date propertyNOTION_DESC_PROPERTY_NAME: Name of the description property
Output & Logging
- The generated
.icsfile is written to stdout. - All logging and informational messages are sent to stderr.
License
MIT
See also:
- notion2ical (library)
