mirror of
https://github.com/actualbudget/actual.git
synced 2026-11-14 21:15:41 -06:00
[Bug]: Importing via API silently matches with existing split transactions #2046
Open
opened 2026-02-28 20:01:59 -06:00 by GiteaMirror
·
5 comments
No Branch/Tag Specified
master
matiss/enable-banking-pending-and-rate-limit
claude/lucid-turing-br8zwl
jfdoming/api-key-shared-bank-sync
worktree-pr-description-rules
ios-ci-launch-test
worktree-count-points-gh-bot
theme-number-contrast
theme-contrast-test
fix/automatic-bank-sync-mobile-app
future-buffer
carryover-chain
copilot/fix-failing-github-actions-job
copilot/fix-failing-github-actions-job-compare
fix/hide-sab-warning-in-capacitor
release
tabedzki/feat/docker-non-root
ios-home-screen-widgets
mobile-budget-redesign
ai/fix-mobile-carryover-arrow-alignment
jfdoming/provider-identity-update
jfdoming/electron-signin-update
jfdoming/openid-flow-update
release-update/26.10.1
release-notes/26.10.1
matiss/dazzling-babbage-b9rjwi
react-query-rules
ai/add-loan-formula-autocomplete
claude/pr-8519-regression-testing-fhvrrh
speed-up-transaction-list-and-schedules
fix-slow-balance-recompute-on-transaction-edit
jfdoming/opfs-sahpool-mobile
jfdoming/opfs-sahpool
fix-8612-schedule-delete-menu
jfdoming/api-tokens-part-8
jfdoming/api-tokens-part-7
jfdoming/api-tokens-part-6
jfdoming/api-tokens-part-5
jfdoming/mobile-safe-area-header
jfdoming/api-tokens-part-4
jfdoming/mobile-splash-lifecycle
jfdoming/api-tokens-part-3
jfdoming/mobile-shared-array-buffer
jfdoming/api-tokens-part-2
jfdoming/api-tokens-part-1
persist-transaction-filters
claude/modernize-transactions-tanstack-orgrze
bank-sync-per-file-03-pluggy-loot-core
claude/auto-close-prs-no-profile-pic-mjqpsy
cross-version-sync-stage2
claude/react-table-library-research-afx83z
tolerate-newer-migrations
claude/verify-migration-guardrails-i82c8m
tabedzki/feat/replacing-month-picker-with-day-picker
delay-initial-sync-until-loaded
cross-version-sync-compat
jfdoming/mobile-app-updates
claude/budget-version-migration-compat-151jlr
claude/worker-error-serialization-9iqtl7
claude/issue-8401-regression-test-9nw9l3
jfdoming/mobile-app-foundation-part-1
jfdoming/mobile-app-scaffold
ai-fix-cleanup-def-8290
claude/relaxed-shannon-jusywa
claude/fervent-keller-s6f2fq
claude/determined-feynman-st1y9z
claude/wizardly-einstein-vi2wce
claude/sweet-albattani-7nseio
feat/bank-sync-per-budget-file
claude/affectionate-cannon-y0kc82
claude/dependabot-findings-m9pgmb
claude/mac-app-ios-publish-zjs1lz
claude/vigilant-tesla-aiiyos
claude/quirky-cerf-v5qck7
claude/animation-removal-alternative-2etfh1
claude/netlify-preview-comments-consolidate-9XPYa
osc/7391-error-boundaries-reports
claude/pensive-dijkstra-7DYui
claude/server-app-version-mismatch-HTCGv
claude/pr-8027-review-feedback-mELuO
claude/zealous-wozniak-e5pO0
claude/intelligent-heisenberg-BSHJq
claude/translation-download-refactor-jFRsO
claude/mobile-performance-ideas-G9PAO
claude/github-issue-7988-5A5ly
blacksmith-migration-ff70d2d
claude/great-mayer-KRvOk
claude/react-native-ios-compilation-fcJh5
claude/serene-goldberg-58xv0
claude/kind-euler-LVG3K
release-automation/edge-nightly
7710-bundle-migrations
claude/fix-docker-build-error-WMfed
claude/llm-compatible-release-notes-t20Nr
7710-tests-tdd
cursor/transaction-table-rewrite-f077
claude/plan-ci-secure-context-OtEe1
claude/fix-issue-7667-DPXi3
cursor/resolve-pr-7449-ee11
claude/fix-typescript-build-error-JPtZ5
copilot/add-repository-configs-to-packages
worktree-compressed-drifting-ritchie
claude/api-consumer-verification-kfz1K
pr-7454
claude/fix-issue-7410-LLLQ4
revert-7281-generate-icons
react-query-useSchedules
copilot/sub-pr-6140
package-upgrades
v26.11.0
v26.10.0
v26.9.0
v26.8.1
v26.8.0
v26.7.0
v26.6.0
v26.5.2
v26.5.1
v26.5.0
v26.4.0
v26.3.0
v26.2.1
v26.2.0
v26.1.0
v25.12.0
v25.11.0
v25.10.0
v25.9.0
v25.8.0
v25.7.1
v25.7.0
v25.6.1
v25.6.0
v25.5.0
v25.4.0
v25.3.1
v25.3.0
v25.2.1
v25.2.0
v25.1.0
v24.12.0
v24.11.0
v24.10.1
v24.10.0
v24.9.0
v24.8.0
v24.7.0
v24.6.0
v24.5.0
v24.4.0
v24.3.0
v24.2.0
v24.1.0
v23.12.0
v23.11.0
v23.10.0
v23.9.0
v23.8.1
v23.8.0
v23.7.2
v23.7.1
v23.7.0
v23.6.0
v23.5.0
v23.4.2
v23.4.1
v23.4.0
v23.3.2
v23.3.0
v23.2.9
v23.2.5
v23.1.12
v22.12.9
Labels
Clear labels
AI generated
API
bank sync
budgeting
bug
can’t replicate
dependencies
docker
documentation
electron
experimental feature
feature
feedback
goal templates
good first issue
help wanted
importers
maintenance
needs info
needs testing
needs triage
needs votes
openid
payees
pull-request
regression
reports
responsive
rules
schedules
server
✨ merged
split transactions
tech debt
tech-support
theme
transaction import
transaction reconciliation
transactions
translations
upstream
user interface
✅ approved
wontfix
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/actual#2046
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Originally created by @NikxDa on GitHub (Apr 14, 2025).
Verified issue does not already exist?
What happened?
When importing with the Actual API, I see some transactions are randomly not imported. Looking through the source code, I noticed that some matching with existing transactions happens for non-bank-sync accounts (which have strict ID checking enabled). Notably, this matching also considers split transactions.
Example: I have a transaction worth
-18.00withimported_idequal toA. I split it into two with amount-9.00each (both of which will haveimported_idset tonull) . I then try to import a new transaction withimported_id = Ba couple days later, worth-9.00. Actual will match it with one of the previous split transactions, which is clearly wrong.Expected: I see a few solutions
How can we reproduce the issue?
Please see above.
Where are you hosting Actual?
Docker
What browsers are you seeing the problem on?
Chrome
Operating System
Mac OSX
@NikxDa commented on GitHub (Apr 14, 2025):
If somebody can recommend a solution, I am happy to implement it (though probably not very quickly)
@NikxDa commented on GitHub (May 14, 2025):
@youngcw Could I get your eyes on this one please, or can you recommend the right person to look at this? Like I said, happy to proceed with fixing this as long as I can get a second pair of eyes on it.
@youngcw commented on GitHub (May 14, 2025):
I would think either your second or third option.
@jonasludwig commented on GitHub (Jul 14, 2025):
@youngcw I just encountered the same issue when running my bank sync. The flow that led to the issue is as follows:
-10. I create a split transaction for it because it falls into different budget categories and assign the values-4and-6-4which now gets matched to the split transaction created in the step before.-4in the cleared total, since the second transaction was included into the first, which is not correct. Instead, a new transaction should have been created.To resolve this issue, I recommend to only consider split transactions ("child transactions") for matching on imports/bank syncs, when the transaction that is being matched has a parent transaction. If not, child transactions may not be considered for matching. This would resolve this issue.
@jonasludwig commented on GitHub (Sep 1, 2025):
I would like to bump up this issue since I encountered the bug again today. This is very confusing behaviour when trying to budget. The bug appeared in a similar fashion as described in my last comment. A transaction got created by my bank sync, I split it to multiple budgets and on a new bank sync another transaction got matched to one of the child transactions, which is not correct.
I suggest to not match to child transactions to avoid this bug.