Actuali

Credit Card Tracking

Actuali can track billing cycles, payment due dates, and credit limits for any account you mark as a credit card. This page explains what the feature does, how the data is stored, and what other Actual clients see.

What it does

Mark any account as a credit card and tell Actuali its statement closing day. From that, the app derives:

  • Billing cycle — the current statement period and how many days remain.
  • Payment due date — an offset you set (e.g. 25 days after the statement close).
  • Cycle spend — total spending since the current cycle opened.
  • Credit limit (optional) — when set, the app shows available credit (limit minus current balance) on the account detail screen.

Configured cards appear in Settings → Credit Cards and on each account's detail screen, with urgency-colored due-date pills and a badge on the Settings tab when a payment is coming up.

How the data is stored

Credit card configuration is stored inside your budget's SQLite database, in Actual'spreferences table — the same key-value store Actual uses for settings like your default currency. Each card gets a row keyedactuali:credit_card:<accountId>whose value is a small JSON object holding the statement day, due offset, and credit limit.

Writes go through Actual's CRDT sync engine — the same mechanism that syncs transactions, categories, and budgeted amounts — so changes are durable, conflict-free, and propagated to your server automatically.

Sync & multi-device

  • Multiple iOS devices: Yes — credit card settings sync across every device running Actuali against the same budget, just like transactions do. Set up a card on your iPhone and it appears on your iPad.
  • Actual's web app: The web client does not readactuali:* preference keys, so credit card settings are invisible there. The rows sit harmlessly in the preferences table and do not affect anything in the web app. If Actual adds native credit card support in the future, the namespaced keys ensure there is no conflict.
  • Deleting a card: Removing credit card tracking from an account writes a null value through the sync engine. Every device sees the removal after its next sync. The account itself is unaffected — only the billing-cycle overlay is removed.

Migration from older versions

Before version 1.1.0, credit card settings were stored locally on each device (in iOSUserDefaults). When you open a budget after updating, Actuali automatically migrates any existing card configurations into the synced preferences table and removes the old local keys. This is a one-time, per-device migration — you don't need to do anything.

FAQ

  • Does this change my Actual database? It adds rows to thepreferences table, which is a standard part of every Actual budget file. No schema changes, no new tables, no columns added.
  • Can I undo it? Yes — remove the card in Settings → Credit Cards. The preference row is set to null and the card disappears on every device.
  • Will this break if Actual adds its own credit card feature? No. Actuali's keys are namespaced under actuali:, a prefix Actual's own code never uses. The two would coexist without conflict.
  • What if I restore a budget from backup? A restored budget needs to be re-downloaded from the server before credit card settings can be edited. Existing settings are still visible (read-only) until sync is re-established.