A simple application to expose Actual Scheduled Transactions in iCal format.
- Currency display
- Respect schedule weekend configuration
- Realtime updates
- Random URL to make it harder to guess (using the Sync ID)
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-icalOr 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_URLis set totrue, the URL will behttp://localhost:3000/{ACTUAL_SYNC_ID}.ics
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 |
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 |
Note: Some variables might not be defined for all events (marked with
⚠️ ). For example,accountNamewill 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.
If you want to host this application publicly, you should use SYNC_ID_AS_URL to make the URL random and harder to guess.
