actualbudget / actual

A local-first personal finance app
https://actualbudget.org
MIT License
13.77k stars 1.1k forks source link

Common way to enable future bank syncing tools #737

Open tjfinlinson opened 1 year ago

tjfinlinson commented 1 year ago

Verified feature request does not already exist?

đź’»

Pitch: what problem are you trying to solve?

With Nordigen Bank sync coming into Actual, we need a way to have some common places in place for adding additional bank syncing providers/tools in order to support more financial institutions in different countries.

Discussed providers are PLAID, SIMPLEFIN

https://discord.com/channels/937901803608096828/1077664629557301258

Describe your ideal solution to this problem

Ideally I think it would allow for different providers to be used for different accounts so we would need to have a method for storing that type of configuration as well as well as some UI for selecting the provider before adding in KEYS/SECRETS from that provider.

Teaching and learning

No response

j-f1 commented 1 year ago

+1 to this. I also think we should be able to configure the keys without having to update the server config (with a UI similar to GitHub’s secrets UI where you can add, update, and remove the secrets but can’t read them).

latetedemelon commented 1 year ago

Perhaps we could pursue progressive integration?

  1. Separate docker / application that calls the API.
  2. Integrated sync engine that is configured on the backend.
  3. Front end UI integration.

For Simplefin it looks like someone got 1) working but I haven't tested.

https://github.com/lancepick/actual-budget-sync https://github.com/lancepick/actual-simplefin-sync

tjfinlinson commented 1 year ago

Perhaps we could pursue progressive integration?

  1. Separate docker / application that calls the API.
  2. Integrated sync engine that is configured on the backend.
  3. Front end UI integration.

For Simplefin it looks like someone got 1) working but I haven't tested.

https://github.com/lancepick/actual-budget-sync https://github.com/lancepick/actual-simplefin-sync

I never tested that either, but he made it to work with the closed source version of actual, I don't know how much work it might be to take what he already did and get it working with the open source version.

Sadly, I don't really have much knowledge or skill in the dev side of things.

tjfinlinson commented 1 year ago

I would love to team up with someone though and try and help do something.

j-f1 commented 1 year ago

I think a good approach here would be to refactor the code for the existing Nordigen setup (ideally as little as possible) so that it’s just one of an arbitrary number of syncing providers. Then a separate PR can build on that foundation to actually actually add support for SimpleFin.

babsher commented 1 year ago

Hey I would be able to work on this feature! I wont have time until next week though. I am not too familiar with the actual server code but I think I can figure it out. The code from the simplefin sync repo is pretty straight forward. I think I can get a prototype working fairly quickly.

tjfinlinson commented 1 year ago

@babsher

That would be amazing, I don't have really any dev experience, but could help with testing. I have Simple-Fin credentials and can always share an opinion if needed. haha.

culpeppers commented 1 year ago

Hey @babsher I was told to reach out to you regarding bank sync. I plan on restarting my Plaid integration work, and it sounds like we should collaborate on best path forward for multiple bank syncing.

babsher commented 1 year ago

@culpeppers Sounds great to me! I was looking at the Plaid code and the existing sync. Seems like it could use a bit of refactoring like was mentioned above. I am still not familar with the codebase so I might not be able to give the best suggestions but I am alright JavaScript dev so I can code if there is plan. I am red_hook on the discord server if you want to start chatting there.

FeralFlora commented 1 year ago

Another open banking provider which would be nice to sync from, because it has better coverage in the Nordics and other parts of Europe than Nordigen, is Aiia: https://www.aiia.eu/.

babsher commented 1 year ago

So my current plan is to implement Simple Fin and open a PR for that. The problem I have doing a larger change this what the original ticket proposes is that I am not very familiar with the code base right now so my ability to design and implement such a large change is limited right now. After that I may consider adding other syncing services and refactoring the existing ones.

latetedemelon commented 1 year ago

I've uploaded the sync I've been trying to get to work below. Feel free to bash / borrow / steal.

https://github.com/latetedemelon/simplefin-actual

Based off of the project I found here:

https://github.com/lancepick/actual-simplefin-sync

rasmuslos commented 1 year ago

Maybe it is possible to add support for syncing with the API provided by the bank directly. An EU regulation introduced a few years ago requires all banks to support a standardized API (this is the one for Germany). There is even a python wrapper viable. You have to get a Product-ID to use it, and as far as I can tell, it is only intended for commercial applications, but I tried to register and maybe it will work.

This way, a third party has access to the private data of actual users. The higher difficulty in setting this up would probably hinder less technical users from using this way to syncing their transactions, but it for anyone who has the required knowledge to set this up, I think it would be a nice addition.

latetedemelon commented 1 year ago

That might work OK for Europe (or use the Nordigen integration) but this would support North American uses who don’t have that standardization and access.

rasmuslos commented 1 year ago

A standardised way for developers to implement a syncing integration would support both ways. Also, my request for a productID was approved, so it isn't really hard to get one

LakesideMiners commented 1 year ago

Plaid approves of use of the API for personal use if this is anything to go off of.

https://stackoverflow.com/a/49868230

The bank I use (PNC) dosnt have its own API for personal use but it dose work via Plaid. It's also very easy to get development access for plaid as well. I put in "for personal use" into the reason for requesting access.

github-actions[bot] commented 1 year ago

:sparkles: Thanks for sharing your idea! :sparkles:

This repository is now using lodash style issue management for enhancements. This means enhancement issues will now be closed instead of leaving them open. This doesn’t mean we don’t accept feature requests, though! We will consider implementing ones that receive many upvotes, and we welcome contributions for any feature requests marked as needing votes (just post a comment first so we can help you make a successful contribution).

The enhancement backlog can be found here: https://github.com/actualbudget/actual/issues?q=is%3Aissue+label%3A%22needs+votes%22+sort%3Areactions-%2B1-desc

Don’t forget to upvote the top comment with 👍!

tjfinlinson commented 1 year ago

Has anyone done any work on a standard way to implement syncing? Just curious. If someone is doing something have they created a branch or PR anywhere?

r1cebank commented 1 year ago

I will be open to work on this if anyone want to team up doing a poc.

tjfinlinson commented 1 year ago

Some work happening here

https://github.com/actualbudget/actual/issues/898

daveneeley commented 11 months ago

mx.com is another provider with a Data Access open finance API platform. It looks like MX uses a Connect Widget to do all the initial linking of accounts, but then reading the data would require their Data Recipient API which is compliant with the FDX (Financial Data Exchange) standard.

tjfinlinson commented 10 months ago

Just adding this link to a chat on discord so we can keep things linked together.

https://discord.com/channels/937901803608096828/1171096337111064626

damomato commented 8 months ago

Stumbled upon Basiq for Australia and New Zealand customers. Is this something that could be integrated into Actual? It costs 50 cents per month but I don't mind paying $6 a year for the convenience of bank syncing.

https://www.basiq.io/products/connect/

aescgar commented 8 months ago

I saw the server and app PRs for SimpleFIN. Is this in place of doing a Plaid integration, or is it in addition? It looks like SimpleFIN uses MX.com (the service pointed out above by @daveneeley) and charges monthly with no free tier option. In this comment, it seems that Plaid would potentially be free to use once integrated. Maybe I'm looking at it wrong, but it seems like Plaid has a free tier whereas SimpleFIN does not. Is this right? If so, why implement SimpleFIN integration instead of Plaid?

latetedemelon commented 8 months ago

I think there are add-ons that can provide plaid integration. If you want it, that’s how this integration started out. Simplefin is being added, in addition to the current gocardless integration. Maybe someone will add plaid as well in the future?

For me personally simplefin had better bank coverage than plaid.

On Sat, Jan 20, 2024 at 13:06 aescgar @.***> wrote:

I saw the server and app PRs for SimpleFIN. Is this in place of doing a Plaid integration, or is it in addition? It looks like SimpleFIN uses MX.com (the service pointed out above by @daveneeley https://github.com/daveneeley) and charges monthly with no free tier option. In this comment https://github.com/actualbudget/actual/issues/898#issuecomment-1894755624, it seems that Plaid would potentially be free to use once integrated. Maybe I'm looking at it wrong, but it seems like Plaid has a free tier whereas SimpleFIN does not. Is this right? If so, why implement SimpleFIN integration instead of Plaid?

— Reply to this email directly, view it on GitHub https://github.com/actualbudget/actual/issues/737#issuecomment-1902265153, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACDYM2IV4Q5EHMBD6ZH2F6DYPQWVXAVCNFSM6AAAAAAVV76AMSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMBSGI3DKMJVGM . You are receiving this because you commented.Message ID: @.***>