[PR #6578] [CLOSED] [WIP] feat(schedules): add Wallos subscription import #41044

Closed
opened 2026-04-23 13:50:47 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/actualbudget/actual/pull/6578
Author: @StephenBrown2
Created: 1/6/2026
Status: Closed

Base: masterHead: wallos-import


📝 Commits (7)

  • 970490d feat(schedules): add Wallos subscription import
  • 5038ce4 [autofix.ci] apply automated fixes
  • 6e24885 Apply coderabbit-suggested fixes
  • 46972c1 [autofix.ci] apply automated fixes
  • 2d1a4fc Update VRT screenshots
  • d9b6fa4 Apply coderabbit-suggested docstrings
  • 8966964 Use console methods instead of logger in desktop-client code.

📊 Changes

37 files changed (+1580 additions, -0 deletions)

View changed files

📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-checks-the-page-visuals-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-checks-the-page-visuals-2-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-checks-the-page-visuals-3-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-full-list-of-schedules-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-full-list-of-schedules-2-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-full-list-of-schedules-3-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-10-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-11-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-12-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-2-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-3-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-4-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-5-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-6-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-two-new-schedules-posts-both-transactions-and-later-completes-one-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-two-new-schedules-posts-both-transactions-and-later-completes-one-10-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-two-new-schedules-posts-both-transactions-and-later-completes-one-11-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-two-new-schedules-posts-both-transactions-and-later-completes-one-12-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-two-new-schedules-posts-both-transactions-and-later-completes-one-2-chromium-linux.png (+0 -0)

...and 17 more files

📄 Description

Summary

This PR adds the ability to import subscriptions from Wallos (a self-hosted subscription tracker) as scheduled transactions in Actual Budget.

Addresses this Discord suggestion.

Totally fine if this gets put on the back burner until Plugins become more of a thing, just wanted to get the code out there in case it helps.

Features

  • JSON Import: Import subscriptions directly from Wallos JSON export files
  • Subscription Selection: Choose which subscriptions to import with a checkbox-based selection interface
  • Account Matching: Accounts are automatically matched by Payment Method or Notes fields if they contain an existing account name
  • Payee Handling: Select existing payees or automatically create new ones based on the subscription name
  • Duplicate Detection: Warns when a subscription may already exist as a schedule (matched by name and amount)
  • Schedule Conversion: Converts Wallos payment cycles (monthly, yearly, weekly, daily) to Actual's schedule format with proper frequency and interval settings

How to Use

  1. Export your subscriptions from Wallos as JSON
  2. In Actual, go to Schedules and click the menu button
  3. Select "Import from Wallos"
  4. Choose your exported JSON file
  5. Select the subscriptions you want to import and assign accounts
  6. Click "Import Selected" to create the schedules

Technical Details

  • New parser module for Wallos JSON format (wallos.ts, wallos-types.ts)
  • Server handlers for duplicate checking and schedule creation
  • New ImportWallosModal component with table-based UI
  • Uses existing AccountAutocomplete and PayeeAutocomplete components for consistent UX

AI Disclaimer

This was generated with help from Claude Opus 4.5


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/actualbudget/actual/pull/6578 **Author:** [@StephenBrown2](https://github.com/StephenBrown2) **Created:** 1/6/2026 **Status:** ❌ Closed **Base:** `master` ← **Head:** `wallos-import` --- ### 📝 Commits (7) - [`970490d`](https://github.com/actualbudget/actual/commit/970490dd55f3e615f0f30ea247eaeb706abe3bac) feat(schedules): add Wallos subscription import - [`5038ce4`](https://github.com/actualbudget/actual/commit/5038ce4d2967acfaaf66f67cbc999450c8696bac) [autofix.ci] apply automated fixes - [`6e24885`](https://github.com/actualbudget/actual/commit/6e24885fa5fccc409009da2391185c81d048fd0c) Apply coderabbit-suggested fixes - [`46972c1`](https://github.com/actualbudget/actual/commit/46972c161316cf878aa2553e6763517046e131b4) [autofix.ci] apply automated fixes - [`2d1a4fc`](https://github.com/actualbudget/actual/commit/2d1a4fc5b65da24c5d3f67d9e5a05719e9977908) Update VRT screenshots - [`d9b6fa4`](https://github.com/actualbudget/actual/commit/d9b6fa47b9cc2478bfbeea37763becf3d02f6948) Apply coderabbit-suggested docstrings - [`8966964`](https://github.com/actualbudget/actual/commit/896696477bfa5964470d680bccf8d83840f285d3) Use console methods instead of logger in desktop-client code. ### 📊 Changes **37 files changed** (+1580 additions, -0 deletions) <details> <summary>View changed files</summary> 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-checks-the-page-visuals-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-checks-the-page-visuals-2-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-checks-the-page-visuals-3-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-full-list-of-schedules-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-full-list-of-schedules-2-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-full-list-of-schedules-3-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-10-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-11-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-12-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-2-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-3-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-4-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-5-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-a-new-schedule-posts-the-transaction-and-later-completes-it-6-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-two-new-schedules-posts-both-transactions-and-later-completes-one-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-two-new-schedules-posts-both-transactions-and-later-completes-one-10-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-two-new-schedules-posts-both-transactions-and-later-completes-one-11-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-two-new-schedules-posts-both-transactions-and-later-completes-one-12-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/schedules.test.ts-snapshots/Schedules-creates-two-new-schedules-posts-both-transactions-and-later-completes-one-2-chromium-linux.png` (+0 -0) _...and 17 more files_ </details> ### 📄 Description ## Summary This PR adds the ability to import subscriptions from [Wallos](https://github.com/ellite/Wallos) (a self-hosted subscription tracker) as scheduled transactions in Actual Budget. Addresses [this Discord suggestion](https://discord.com/channels/937901803608096828/940290142579605514/1236672506832883833). Totally fine if this gets put on the back burner until Plugins become more of a thing, just wanted to get the code out there in case it helps. ## Features - **JSON Import**: Import subscriptions directly from Wallos JSON export files - **Subscription Selection**: Choose which subscriptions to import with a checkbox-based selection interface - **Account Matching**: Accounts are automatically matched by Payment Method or Notes fields if they contain an existing account name - **Payee Handling**: Select existing payees or automatically create new ones based on the subscription name - **Duplicate Detection**: Warns when a subscription may already exist as a schedule (matched by name and amount) - **Schedule Conversion**: Converts Wallos payment cycles (monthly, yearly, weekly, daily) to Actual's schedule format with proper frequency and interval settings ## How to Use 1. Export your subscriptions from Wallos as JSON 2. In Actual, go to Schedules and click the menu button 3. Select "Import from Wallos" 4. Choose your exported JSON file 5. Select the subscriptions you want to import and assign accounts 6. Click "Import Selected" to create the schedules ## Technical Details - New parser module for Wallos JSON format (`wallos.ts`, `wallos-types.ts`) - Server handlers for duplicate checking and schedule creation - New `ImportWallosModal` component with table-based UI - Uses existing `AccountAutocomplete` and `PayeeAutocomplete` components for consistent UX ## AI Disclaimer This was generated with help from Claude Opus 4.5 --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-04-23 13:50:47 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#41044