actual-ical

actual-ical

Docker app from DevlinDelFuego's Repository

Overview

A simple application to expose Actual Scheduled Transactions in iCal format.

actual-ical

A simple application to expose Actual Scheduled Transactions in iCal format.

Features

  • Currency display
  • Respect schedule weekend configuration
  • Realtime updates
  • Random URL to make it harder to guess (using the Sync ID)

Usage

Just run the docker image

docker volume create actual-ical

docker run -d -p 3000:3000 \
  -v actual-ical:/app/.actual-cache \
  -e ACTUAL_SERVER=http://actual.example.com \
  -e ACTUAL_MAIN_PASSWORD=mainpassword \
  -e ACTUAL_SYNC_ID=syncid \
  ghcr.io/matheusvellone/actual-ical

Or with docker-compose

services:
  actual-ical:
    image: ghcr.io/matheusvellone/actual-ical
    ports:
      - 3000:3000
    environment:
      ACTUAL_SERVER: http://actual.example.com
      ACTUAL_MAIN_PASSWORD: mainpassword
      ACTUAL_SYNC_ID: syncid
    volumes:
      - actual-ical:/app/.actual-cache

volumes:
  actual-ical:

Then you can access the iCal feed at http://localhost:3000/actual.ics

If SYNC_ID_AS_URL is set to true, the URL will be http://localhost:3000/{ACTUAL_SYNC_ID}.ics

Configuration

All configuration is done through environment variables.

Name Description Required Default
ACTUAL_SERVER The server to use when connecting to the Actual API true
ACTUAL_MAIN_PASSWORD The password to use when connecting to the Actual API true
ACTUAL_SYNC_ID The sync ID to use when connecting to the Actual API. Find this ID in Settings > Advanced Settings > Sync ID true
SYNC_ID_AS_URL Set to true to use the sync ID as part of the URL to make it safer to expose publicly, just like Google Calendar does false
ACTUAL_SYNC_PASSWORD The sync password false
ACTUAL_PATH The path to store Actual cache data. The container must have write access to this path. false .actual-cache
EVENT_NAME_TEMPLATE Template for the calendar event name. See Event template variables for available variables false {{scheduleName}} ({{amount}})
EVENT_DESCRIPTION_TEMPLATE Template for the calendar event description. See Event template variables for available variables false
TZ The timezone to use on ical data false UTC
PORT The port to listen on false 3000
LOCALE The locale to use when formatting amounts false en-US
CURRENCY The currency to use when formatting amounts. Values must be one of these false USD
LOG_LEVEL The log level to use. trace, debug, info, warn, error or fatal false info

Event template variables

The EVENT_NAME_TEMPLATE and EVENT_DESCRIPTION_TEMPLATE variables control the event title and description respectively. Variables are written as {{variableName}} and will be replaced at render time.

Variable Description
scheduleName The name of the scheduled transaction in Actual
amount The transaction amount, formatted according to LOCALE and CURRENCY
accountName ⚠️ The name of the Actual account the schedule belongs to

Note: Some variables might not be defined for all events (marked with ⚠️). For example, accountName will only be defined for schedules that belong to an account. If a variable is not defined, it will be replaced with an empty string.

Note 2: Template values are always trimmed, so any leading or trailing whitespace will be removed.

Hosting it publicly

If you want to host this application publicly, you should use SYNC_ID_AS_URL to make the URL random and harder to guess.

Install actual-ical on Unraid in a few clicks.

Find actual-ical in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for actual-ical Review the template variables and paths Click Install

Categories

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/matheusvellone/actual-ical
Last Updated2026-07-15
First Seen2026-02-07

Runtime arguments

Web UI
http://[IP]:[PORT:3000]/
Network
bridge
Shell
sh
Privileged
false

Template configuration

AppdataPathrw
Target
/app/.actual-cache
Value
/mnt/user/appdata/actual-ical
PortPorttcp
Target
3000
Default
3000
Value
3000
ACTUAL_SERVERVariable
Default
http://actual.example.com
Value
http://ActualServer:5006
ACTUAL_MAIN_PASSWORDVariable
ACTUAL_SYNC_IDVariable
TZVariable
LOCALEVariable
Default
en-US
Value
en-US
CURRENCYVariable
Default
USD
Value
USD
SYNC_ID_AS_URLVariable

http://localhost:3000/{ACTUAL_SYNC_ID}.ics

Default
false
Value
false
PUIDVariable
Default
99
Value
99
PGIDVariable
Default
100
Value
100
UMASKVariable
Default
022
Value
022
LOG_LEVELVariable
Default
info
Value
info