actual2ics
Your Actual Budget schedules, on your calendar. A single-file CLI that reads your scheduled transactions and writes a standard .ics file Apple, Google, or Proton Calendar imports or subscribes to. Read-only by construction — it never writes to your budget.
The problem
Actual's scheduled transactions know when your rent, subscriptions, and paychecks land — but that knowledge stays inside the app. A calendar view is one of the most-upvoted requests in Actual's issue tracker, open since 2023 and still unbuilt. Your calendar is where the rest of your life already lives; your money's schedule belongs on it too.
How it works
actual2ics connects to your budget — a local file or your sync server — and asks Actual's own schedule engine for the upcoming dates. Weekend-skipping, "ends after N times," every recurrence rule behaves exactly as the app shows it, because it is the app's math. It then writes one .ics file. Import it once, or point a cron line at it and subscribe for a calendar that updates itself.
node actual2ics.mjs --months 6
node actual2ics.mjs --event-format compact # payee only in titles, amount in details
node actual2ics.mjs --reminder 1d --exclude-account Savings # day-before nudges; noisy accounts stay off
Credentials come from environment variables, never flags or files. The tool holds no state, sends nothing anywhere, and touches nothing in your budget.
Shaped by its users already
Twenty-eight hours after release, a user forked the repo and contributed --event-format — a privacy-minded option that keeps amounts out of event titles, since calendar titles sync everywhere. Reviewed, merged, and shipped in v1.1.0 the same day, with their name on it. Four days later the same contributor sent reminders (--reminder), and v1.2.0 shipped them alongside account exclusion, asked for on reddit the same week. That is how tools are supposed to grow.
Get it
Clone the repository — one file, MIT licensed, tests included. Found a rough edge or want a format we don't have? Open an issue.