Actual

A local-first personal finance app

Open Source

Actual Source Code

Author

actualbudget

Description

A local-first personal finance app

#budgeting#finance#money#personal-finance

Homepage

https://actualbudget.org

Repository

  • LicenseMIT
  • Created29 Apr 22
  • Primary languageTypeScript
  • Size678,263 KB
  • Stars30,169
  • Forks3,284
  • Watchers30,169

Language Usage

Language Usage

Project Health

  • Last commit2 days ago
  • Open issues206
  • Latest releasev26.11.0

Recent Commits

  • Matiss Janis Aboltins(11 Nov 26)

    [AI] Keep the iOS App Store listing in the repo and publish it on release (#9496) * [AI] Keep the iOS App Store listing in the repo and publish it on release Adds a fastlane metadata and screenshots folder for the iOS app and a release-only workflow step that uploads them with fastlane deliver before the build is submitted for review. Fixes #9446 Co-Authored-By: Claude Fable 5.2 <[email protected]> * [AI] Add iPhone Duo App Store screenshots Captured from the iPhone Duo simulator's unfolded display (2853x2007). Co-Authored-By: Claude Fable 5.2 <[email protected]> * [AI] Keep the wide layout clear of the status bar in the mobile apps The wide layout ignored safe-area insets, so on the unfolded iPhone Duo the status cluster covered the title bar buttons. Pad the sidebar and content column by the insets (zero on desktop and web) and recapture the Duo App Store screenshots with the fix. Co-Authored-By: Claude Fable 5.2 <[email protected]> * [AI] Merge the two release notes into one Co-Authored-By: Claude Fable 5.2 <[email protected]> * [AI] Apply the left safe-area inset to the main pane when the sidebar floats Co-Authored-By: Claude Fable 5.2 <[email protected]> --------- Co-authored-by: Claude Fable 5.2 <[email protected]>

  • Matt Fiddaman(10 Nov 26)

    fix some sizing issues in the manage pages on smaller screens (#9497) * fix some sizing issues in the manage pages * note

  • Matt Fiddaman(10 Nov 26)

    🎨 define theme colors in a single source file (#9508) * define theme colors in a single source file * note

  • Andy Carlberg(10 Nov 26)

    feat(api): expose dashboard and widget management methods (#8981) * feat(api): expose dashboard and widget management methods * fix(api): address review comments on dashboard typing and atomicity * test(api): cover multiple widgets in updateDashboard batch * fix(dashboard): validate widget metadata on insertion and update * fix(dashboard): sanitize add-widget coordinates and validate all updates * fix(dashboard): preserve layout editing for invalid metadata, reject batch duplicates, and normalize imports * test(dashboard): use unique temp file path in import test * refactor(api): use send handlers for dashboard and remove runtime over-validation - Add dashboard-get-pages and dashboard-get-widgets message handlers in loot-core - Simplify getDashboardPages, getDashboardWidgets, and addDashboardWidget to thin send dispatchers in packages/api - Remove runtime widget type assertions, metadata schemas, duplicate ID checks, and error throws on missing widgets in loot-core - Revert importDashboard metadata normalization back to master - Remove type coercions and validation rejection tests - Update release notes category to Enhancements * fix(api): address review comments on dashboard queries, typings, and documentation --------- Co-authored-by: github-actions[bot] <[email protected]> Co-authored-by: Claude Fable 5.2 <[email protected]>

  • Matt Fiddaman(10 Nov 26)

    🎨 use theme tokens instead of raw css variable strings (#9499) * use theme tokens instead of raw css variable strings * note

  • Matt Fiddaman(10 Nov 26)

    🎨 remove unused theme tokens and add missing dark ones (#9498) * remove unused theme tokens and add missing dark ones * note * Update VRT screenshots Auto-generated by VRT workflow PR: #9498 --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

  • Matt Fiddaman(09 Nov 26)

    fix flaky range selection e2e test (#9503) * fix flaky range selection e2e test * note

  • Matt Fiddaman(09 Nov 26)

    fix undo being consumed by the settings currency pref reset (#9501) * fix undo being consumed by the settings currency pref reset * note

  • Matt Fiddaman(09 Nov 26)

    refresh tags after undo (#9502) * refresh tags after undo * note

  • Julian Dominguez-Schatz(09 Nov 26)

    [AI] Allow API keys to sync budget bank connections (#9485) * [AI] Allow API keys to sync budget bank connections * [AI] Remove transitional bank sync documentation

  • Julian Dominguez-Schatz(09 Nov 26)

    [AI] Show server version requirements for settings errors (#9487) * [AI] Gate settings panels by minimum server version * [AI] Explain version requirements only after settings requests fail

  • Itzhak Lobak(09 Nov 26)

    [AI] docs: add podway to Additional Installation Options (#9398) * [AI] docs: add podway to Additional Installation Options * [AI] Add release note * [AI] Set release note category * docs: align podway entry with the other entries

  • James N(09 Nov 26)

    [AI] Let users reorder report dashboards (#9409) Add a dashboard-move handler that syncs the order of every dashboard. You can drag dashboards in the dashboard selector, or move them with the keyboard. Co-authored-by: Claude Opus 5.5 <[email protected]>

  • Kristián Valentín(09 Nov 26)

    [AI] Show the running balance when sorted by date oldest first (#9212) Fixes #3808 Co-authored-by: Kristián Valentín <[email protected]>

  • Matt Fiddaman(09 Nov 26)

    make payees, tags, rules, schedules and bank sync pages consistent (#9218) * make payees, tags, rules, schedules and bank sync pages consistent * title every page in the settings navigation * drop the providers heading from the bank sync page * spacing * Update VRT screenshots Auto-generated by VRT workflow PR: #9218 * fix e2e * coderabbit * button colour * Update VRT screenshots Auto-generated by VRT workflow PR: #9218 --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

  • tabedzki(09 Nov 26)

    [AI] fix: skip completed schedule rules when linking transactions (#9490) * [AI] fix: skip completed schedule rules when linking transactions Completed schedules are kept for reference, but their rules still ran on any matching transaction and linked it to the schedule. runRules now skips the rules of completed, non-deleted schedules unless the transaction already belongs to a schedule. Existing links are untouched and reopening a schedule makes it link again. Assisted-by: ClaudeCode:claude-sonnet-5-5 * [AI] refactor: dedupe getCompletedScheduleRuleIds and test schedule-linked runRules Drop the AQL-based getCompletedScheduleRuleIds from schedules/app and have payees use the one in transaction-rules, which schedules/app already depends on. Replace the existing-links test with one that runs runRules on a transaction linked to a completed schedule and checks the schedule's rule still applies. Assisted-by: ClaudeCode:claude-opus-5-5

  • Julian Dominguez-Schatz(09 Nov 26)

    [AI] Manage budget API keys in settings (#9345) * [AI] Manage budget API keys in settings * [AI] Use modals for API key creation and revocation * [AI] Simplify API key revocation confirmation * [AI] Refine API key settings and modal interactions * [AI] Remove trailing punctuation from API key release note * [AI] Use budget grant lists in API key settings and documentation * [AI] Focus API key UI tests on behaviour * [AI] Warn that authentication changes revoke API keys * [AI] Clarify which credentials password changes revoke * Humanize docs * Reduce

  • Julian Dominguez-Schatz(08 Nov 26)

    [AI] Authenticate budget downloads and sync with API keys (#9344) * [AI] Allow API keys to download and sync one budget * [AI] Authorize API keys across their accessible budget grants * [AI] Verify data isolation across API key budgets * [AI] Simplify API key access regression tests

  • Julian Dominguez-Schatz(08 Nov 26)

    [AI] Add budget API key lifecycle endpoints (#9343) * [AI] Add budget API key lifecycle endpoints * [AI] Clarify API key validation and preserve session boundary coverage * [AI] Store API key grants for multiple budgets * [AI] Remove API keys when their owner is deleted * [AI] Revoke API keys when server authentication changes * [AI] Preserve OpenID API keys when changing the server password

  • Michael Clark(08 Nov 26)

    Experimental OPFS - Phase 2 (#9270) * phase 2 * fix deploy * [autofix.ci] apply automated fixes * Trim the storage layer after review * Keep the legacy database openable after a failed migration and release the pool on a failed open * Copy the legacy database as one snapshot and share pool acquisition between concurrent opens * Reject impossible page sizes and share one open per file * Ask for OPFS whenever any budget has moved * Share the budget lock from the legacy engine so migrations wait for it * Release the legacy lock on a failed open, commit marker writes, keep unsaved snapshots and prefer the fallback row * feedback * bit of hardening * nit * feedback * feedback * feedback * feedback * feedback * fix some minor issues * minor nit * cover removal and check marker survives * directory removal now checks every db in teh tree before deleting everything * batch removal * copilot feedback * minor nit * add no op flushSqliteStorage for electron * more copilot feedback * legcy directory removal fix * rabbit feedback * feedback --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

  • Tim Newsome(08 Nov 26)

    [AI] Add hover button to remove a tag from a transaction's notes (#9093) * [AI] Add hover button to remove a tag from a transaction's notes Hovering a tag in the desktop transaction table's notes cell (or in the truncated-notes tooltip) reveals a small remove badge in the pill's top-right corner. Clicking it deletes that one tag occurrence from the notes; clicking the rest of the pill still filters by the tag. The badge is absolutely positioned so revealing it never shifts the notes text. Removal works on source offsets recorded by the notes parser, since parsed segments don't round-trip to the original string. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Update VRT screenshots Auto-generated by VRT workflow PR: #9093 * [AI] Drop unreachable stale-segment guard from removeTagFromNotes Callers always pass a segment parsed from the same notes string, so the check could never fire. Document the precondition instead. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01DWkJZiCWJQ2sfzjbu5u9NR * [AI] Annotate getTagCSSColors return type Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01DWkJZiCWJQ2sfzjbu5u9NR * [AI] Explain why only custom tag colours use !important Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01DWkJZiCWJQ2sfzjbu5u9NR * [AI] Clarify what a custom tag colour is in the !important comment Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01DWkJZiCWJQ2sfzjbu5u9NR * [AI] Rename useTagColors to useTagPillStyle It also returns whether the tag is hidden, which isn't a colour. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01DWkJZiCWJQ2sfzjbu5u9NR * Update VRT screenshots Auto-generated by VRT workflow PR: #9093 --------- Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

  • tabedzki(08 Nov 26)

    [AI] fix(reports): correct hidden groups and overspending in Budget Analysis (#9470) Categories in a hidden group still counted when "Show hidden categories" was off, because hiding a group doesn't mark its categories as hidden. The report now excludes them unless the option is on. The first month's overspending adjustment was always 0, because the overspending from the month before the period was dropped. The first month now shows it, and the period total includes it. Balances are unchanged, since the adjustment is informational. Assisted-by: ClaudeCode:claude-opus-5-5

  • Saiyam Jain(08 Nov 26)

    [AI] Advance recurring schedules without an assigned account when paid (#9466) When advanceSchedulesService queries schedules to advance paid schedules, it filtered on '_account.closed': false. For schedules without an account, _account is null so _account.closed evaluates to NULL (failing the filter). Update the filter to allow _account: null in addition to open accounts. Fixes #9463

  • Mohammed Yasin Zuhayr(08 Nov 26)

    fix: keep line breaks in transaction notes when the notes field is only focused (#9369) * fix: keep line breaks in transaction notes when the notes field is only focused * fix: stop NotesCell CustomCell from overwriting notes on blur Remove the direct onUpdate prop from NotesCell's CustomCell so a stale initial value cannot bypass the guarded onUpdateNote path. Add a test that focusing a note with leading/trailing whitespace does not rewrite it. * chore: retrigger CI

  • nowak-mariusz(08 Nov 26)

    [AI] Add API methods to budget a category from its templates (#9260) * [AI] Add API methods to budget a category from its templates applyCategoryTemplate runs the same budget/apply-single-template handler as the "Overwrite with template" item in a category's budget menu. getCategoryTemplateAmount runs budget/dry-run-category-template, which the budget automations editor uses for its preview. It reads the category's saved templates rather than the ones open in the editor. Co-authored-by: Claude Opus 5.5 <[email protected]> * [AI] Throw from the template dry run when the templates fail validation dryRunCategoryTemplate ignored the errors computeTemplates collects, so a category whose templates fail validation, for example with two #goal lines, was previewed as 0. It now throws with those errors. The automations editor already catches a failed dry run. getCategoryTemplateAmount rethrows the error as an APIError. Co-authored-by: Claude Opus 5.5 <[email protected]> * [AI] Return the template dry run's validation errors instead of throwing Throwing from dryRunCategoryTemplate surfaced as an internal error in the budget automations editor, for example when "Cover schedule" is picked before a schedule is chosen. The dry run now returns the errors computeTemplates collects alongside the amounts, and getCategoryTemplateAmount throws an APIError when there are any. Co-authored-by: Claude Opus 5.5 <[email protected]> * [AI] Reject category templates that fail to parse in the template API methods A #template line that fails to parse is stored as an error template, which the template runner skips, so applying could budget 0 and report success. applyCategoryTemplate and getCategoryTemplateAmount now throw with the failing lines instead. The UI's apply paths are left unchanged. Co-authored-by: Claude Opus 5.5 <[email protected]> * [AI] Format the template API test Co-authored-by: Claude Opus 5.5 <[email protected]> * [AI] Read category templates for the template API without storing them The template preview parsed the category's note by storing its templates in goal_def first, so a read wrote to the budget. It now parses the note in memory, and applying stores the templates once, inside apply-single-template. * [AI] Type the template API test's goal_def query --------- Co-authored-by: Claude Opus 5.5 <[email protected]>

  • Matiss Janis Aboltins(07 Nov 26)

    [AI] Send a plain IPv4 PSU address to Enable Banking and tolerate balance failures (#9468) * [AI] Send a plain IPv4 PSU address to Enable Banking and tolerate balance failures Node reports an IPv4 client on a dual-stack socket as ::ffff:1.2.3.4, and some banks (Zagrebačka banka, SEB) reject the PSU address in that form, failing every sync. Convert it to plain IPv4 before sending. A failed balances request aborted the sync before the transactions were fetched, so banks whose balance endpoint fails never imported anything. Carry on without a balance, as account discovery already does. Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Report an unavailable Enable Banking balance as unknown instead of zero When the bank refuses the balances request, the sync server now returns no balance rather than 0. The client then imports the transactions without inserting an opening balance on the first sync, and leaves the stored account balance untouched on later ones. Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Use strict equality in the Enable Banking opening balance checks Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Treat a missing Enable Banking balance field like a null one Normalize an absent startingBalance to null where the server response is read, so the strict null checks also cover a server that omits the field. Co-Authored-By: Claude Fable 5.1 <[email protected]> --------- Co-authored-by: Claude Fable 5.1 <[email protected]>

  • tabedzki(07 Nov 26)

    [AI] fix: add UTF-8 BOM to CSV exports (#9471) * [AI] fix: add UTF-8 BOM to transaction CSV export Excel on Windows reads a CSV without a byte order mark using the system ANSI code page, so accented text such as "À" and "é" shows up as "À" and "é". The account export now writes a UTF-8 BOM. The string returned by the `api/transactions-export` handler is unchanged, and CSV re-import already handles the BOM. Refs #9469 Assisted-by: ClaudeCode:claude-opus-5-5 * [AI] fix: add UTF-8 BOM to Budget Analysis CSV export Translated column names in this export hit the same Excel decoding problem as the transaction export, so it now writes a UTF-8 BOM too. Also consolidate the overlapping BOM tests for the transaction export and widen the release note to cover both exports. Refs #9469 Assisted-by: ClaudeCode:claude-opus-5-5 * [AI] fix: address CSV export review cleanup Use the documented Bugfixes release-note category and explain why the CSV test helper can safely assert string-valued records. Assisted-by: Codex:gpt-6.1-sol

  • Matiss Janis Aboltins(07 Nov 26)

    [AI] Derive a transaction ID for Enable Banking transactions that have none (#9456) * [AI] Derive a transaction ID for Enable Banking transactions that have none Some banks send neither entry_reference nor transaction_id, which left imported_id empty. Such transactions could only be recognised by amount and date, so a deleted one was imported again on every sync and the "reimport deleted transactions" setting had no effect. Derive an ID from the booking date, amount, direction, counterparty and remittance text. Identical entries within one response get a counter suffix so genuinely separate postings stay separate. Bank-provided IDs are used unchanged. Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Prefer the transaction date when deriving an Enable Banking transaction ID A pending transaction has no booking date yet, so its derived ID was built from a fallback date and changed once the transaction was booked on a different day. Use the date of the transaction itself first, which stays the same across that transition. Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Number booked Enable Banking postings before identical pending ones Identical postings without a bank ID are told apart by a counter. A pending posting listed first took the first number, so once it was booked elsewhere or disappeared the booked posting inherited its ID and the sync updated the wrong transaction. Number booked postings first so a pending one coming or going never renumbers them. Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Derive Enable Banking IDs only for transactions that can be imported A transaction dropped for an unusable date still took a counter number, so an identical valid transaction changed ID once the dropped one was gone. Derive IDs after normalization and only for importable transactions. Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Hash the booking date last when deriving an Enable Banking transaction ID A pending transaction has no booking date, so hashing the booking date whenever it exists gave a pending transaction without a transaction date a new ID on booking even when its value date stayed the same. Use the value date before the booking date. Co-Authored-By: Claude Fable 5.1 <[email protected]> --------- Co-authored-by: Claude Fable 5.1 <[email protected]>

  • Matiss Janis Aboltins(07 Nov 26)

    [AI] Fix Enable Banking reauthorization and silent setup failures (#9454) * [AI] Fix Enable Banking reauthorization and silent setup failures Reauthorizing an expired Enable Banking account opened the link flow without the account, and the account was never preselected because it was still linked to an id the provider no longer returns. Pass the account along and preselect it so its link is replaced in place. Setup failures were reported as success: the setup modal looked for the validation error one level too deep, and a failed bank list request rendered an empty dropdown. Show Enable Banking's reason in both places and trim the application id on the server. Document the prerequisites, reauthorization, reverse proxy and single-application limits for Enable Banking. Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Keep the experimental release warning on the Enable Banking docs page Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Address review feedback on Enable Banking reauthorization Show the reason when the bank list request itself fails, not only when Enable Banking refuses it, under a neutral label. Drop the replaced link when preselecting a reauthorized account, so removing the preselected row unlinks the account instead of leaving it on the expired id. Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Keep the expired link when a reauthorized account's row is reassigned Dropping the expired link at preselection meant that picking a different account for the row silently unlinked the reauthorized account while the button still read "Link accounts". Keep the link, and drop it only when the user removes bank sync from that row. Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Only preselect a reauthorized account for a bank account with the same name Preselecting the reauthorized account for the sole returned bank account could link a different account at the same bank into it. Require the bank account to carry the name the account had when it was linked, and leave the row for the user to choose otherwise. Co-Authored-By: Claude Fable 5.1 <[email protected]> * [AI] Do not preselect an account when reauthorizing Enable Banking Enable Banking issues new account ids on every authorization and Actual stores no stable identifier for the bank account, so the reauthorized account could only be preselected by position or by name. Either can link a different bank account into an account that already has synced history. Leave the row for the user to choose, as before, and describe that flow in the docs. Co-Authored-By: Claude Fable 5.1 <[email protected]> --------- Co-authored-by: Claude Fable 5.1 <[email protected]>

  • edzard(07 Nov 26)

    Fix donut chart turning black when theme chart colors use hsl values (#9467) * Fix donut chart turning black when theme chart colors use hsl values * [autofix.ci] apply automated fixes * Fix unitless HSL channel parsing in donutColors --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

Actual Security

Security Advisories (15)

  • mediumPatchedCVSS 6.8

    GHSA-p7p2-pm6f-rg6xElectron enableNodeOptionsEnvironmentVariable fuse re-enabled allows NODE_OPTIONS code injection

  • lowPatched

    CVE-2026-57449CORS Proxy GitHub API Allowlist Prefix Bypass Leaks Private Repositories Through the Server GitHub Token

  • highPatchedCVSS 8.3

    CVE-2026-49229Disabled OpenID users keep access through existing session tokens

  • mediumPatchedCVSS 4.2

    CVE-2026-50179CSV Formula Injection in Transaction Export via Imported Payee/Notes Fields

  • mediumPatchedCVSS 4.3

    CVE-2026-46700Missing authorization on GET /secret/:name allows non-admin OpenID users to enumerate admin-configured bank-sync secrets

  • mediumPatchedCVSS 4.6

    CVE-2026-46672CSV Formula Injection in `@actual-app/cli` `--format csv` Output via Custom `escapeCsv` Helper

  • mediumPatched

    CVE-2026-42890Electron Run As Node in actual

  • highPatched

    CVE-2026-42604OpenID `client_secret` Disclosure via Broken Authorization Guard in `/openid/config`

  • highPatched

    CVE-2026-50007Shared users can perform owner-only file management actions

  • mediumPatched

    CVE-2026-43872Path traversal vulnerability in actual-server

  • highPatchedCVSS 8.8

    CVE-2026-33318Privilege Escalation via 'change-password' Endpoint on OpenID-Migrated Servers

  • mediumPatched

    CVE-2026-3089Actual Sync Server 26.2.1 - Authenticated Path Traversal

  • criticalPatched

    CVE-2026-27584Missing Authentication for SimpleFIN and Pluggy AI bank sync endpoints

  • highPatched

    CVE-2026-27638Missing authorization in sync endpoints allows cross-user budget file access in multi-user mode

  • mediumPatchedCVSS 4.2

    GHSA-xvp7-8vm8-xfxxGocardless service is logging sensitive data including bearer tokens, account numbers, etc...

Actual Website

Website

Your Finances — made simple | Actual Budget

Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address18.208.88.157
  • Hostnameec2-18-208-88-157.compute-1.amazonaws.com
  • LocationAshburn,Virginia,United States of America,NA
  • ISPAmazon Technologies Inc.
  • ASNAS14618

Associated Countries

  • USUS

Safety Score

Website marked as safe

100%

Trackers

No known trackers found

Blacklist Check

actualbudget.org was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

Actual Docker

Container Info

actual

Actual is a super fast privacy-focused app for managing your finances.

#Finance

Run Command

docker run -d \
  

Compose File

version: 3.8

Actual Socials

Actual Reviews

More Secure Budgeting

About the Data: Actual

Change History

Edit Actual Data

You can edit Actual's entry in this section of awesome-privacy.yml by submitting a PR to our GitHub repo.
Note that some of the information shown above has been aggregated from external sources, a list of these can be found data documentation.

Origin Data

Modify Data

API

You can access Actual's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/actual

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share Actual

Help your friends compare Secure Budgeting, and pick privacy-respecting software and services.
Share Actual and Awesome Privacy with your network!