Skip to main content
This tool uses the Redbark REST API, which is in beta. Behaviour may change as the API evolves.
Actual Budget sync runs as a standalone Docker container that pulls transactions from the Redbark API and imports them directly into your Actual Budget server. It is not a dashboard destination.
This is a self-hosted Docker tool. You run it on your own infrastructure alongside your Actual Budget server.

Prerequisites

  • A running Actual Budget server
  • Docker installed on your machine or server
  • A Redbark account with connected bank accounts
  • A Redbark API key

Setup

1

Get a Redbark API key

Plan required: Developer or Professional. API access is not available on the Saver plan.
Log into Redbark, go to Settings > API Keys, and create a new key. Copy it. It is only shown once.
2

Find your Redbark account IDs

Run the tool with --list-redbark-accounts to see your connected accounts and their IDs:
3

Find your Actual Budget account IDs

Run with --list-actual-accounts to see your Actual Budget accounts:
You can also find account IDs in the Actual Budget web UI by copying the UUID from the account URL.
4

Create your account mapping

Map each Redbark account to an Actual Budget account using the format redbark_id:actual_id, comma-separated:
5

Configure environment variables

Create a .env file with your configuration:
6

Dry run

Preview what would be imported without writing any changes:
7

Sync

Run the sync:

Configuration

Environment variables

CLI flags

Running with Docker

Docker run

The /app/data volume caches the Actual Budget SQLite database locally. Mount a persistent volume so it doesn’t re-download the full budget every run.

Docker Compose

Kubernetes CronJob

Scheduling

Use cron or your orchestrator’s scheduling to run syncs automatically:

How deduplication works

Each transaction is imported with an imported_id of redbark:<transaction_id>. Actual Budget’s importTransactions() uses this to detect duplicates:
  1. If a transaction with the same imported_id exists, it updates instead of creating a duplicate
  2. If no imported_id match, Actual falls back to fuzzy matching on amount + date + payee
You can run the sync as often as you want. Duplicates are never created.

Exit codes

Troubleshooting

Connection refused to Actual server Make sure your Actual Budget server is running and reachable from the Docker container. If both services are in the same Docker Compose stack, use the service name (e.g. http://actual-server:5006) rather than localhost. Budget not found Double-check your ACTUAL_BUDGET_ID. This is the sync ID found in Actual under Settings > Advanced, not the budget name. Encryption password required If you’ve enabled end-to-end encryption in Actual Budget, set the ACTUAL_ENCRYPTION_PASSWORD environment variable to your encryption passphrase. Self-signed certificates For Actual servers behind self-signed TLS certificates, set NODE_EXTRA_CA_CERTS=/path/to/cert.pem in the container environment. Version mismatch The tool automatically detects your Actual server version and downloads a matching client library. If you see version errors, make sure the /app/data volume is mounted so the cached client persists between runs.

Security

Your Redbark API key is only sent over HTTPS. Never bake secrets into Docker images. Use --env-file, Docker Secrets, or Kubernetes Secrets. The tool caches your Actual budget locally in ACTUAL_DATA_DIR, so encrypt the Docker volume on shared infrastructure.

Source code

The sync tool is open source: github.com/redbark-co/actual-sync