{"id":16528298,"url":"https://github.com/azeemba/lpaid","last_synced_at":"2025-07-30T19:17:02.772Z","repository":{"id":66139087,"uuid":"95167306","full_name":"azeemba/lpaid","owner":"azeemba","description":"Personal Plaid-based money tracker (banks, credit cards, investment accounts)","archived":false,"fork":false,"pushed_at":"2019-05-26T23:53:09.000Z","size":24,"stargazers_count":46,"open_issues_count":1,"forks_count":12,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-03T19:22:18.548Z","etag":null,"topics":["budget","money","plaid","plaid-api","plaid-link","spending","spending-tracker"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/azeemba.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-23T00:18:24.000Z","updated_at":"2025-01-07T18:01:46.000Z","dependencies_parsed_at":"2023-03-22T02:18:03.078Z","dependency_job_id":null,"html_url":"https://github.com/azeemba/lpaid","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/azeemba/lpaid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azeemba%2Flpaid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azeemba%2Flpaid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azeemba%2Flpaid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azeemba%2Flpaid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/azeemba","download_url":"https://codeload.github.com/azeemba/lpaid/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azeemba%2Flpaid/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267927613,"owners_count":24167315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["budget","money","plaid","plaid-api","plaid-link","spending","spending-tracker"],"created_at":"2024-10-11T17:39:04.421Z","updated_at":"2025-07-30T19:17:02.694Z","avatar_url":"https://github.com/azeemba.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Lpaid\n======\n\nPersonal Plaid-based money tracker\n\n# Goal\n\nThere are many money tracking apps out there with many tradeoffs. Some\nrequire too much manual work, some don't work with multifactor authentication,\nand others store the login info on their servers. \n\nLpaid does none of those. It uses [Plaid](https://plaid.com/) which allows you to link your bank\naccounts to an access token which can be used to retrieve transaction. This\naccess token and the downloaded transactions are stored on your machine.\n\nHowever the trade off is that Lpaid is not designed to be used for people with little\ntechnical background. It requires people to get developer keys from plaid, and run `npm`and `node` locally.\n\n# Workflow\n\nAfter running `node index.js` you will see a page to add new users or select a user:\n\n![lpaid-pick-user](https://user-images.githubusercontent.com/2160795/30006235-f96b94fc-90c1-11e7-9039-cdb1defa8cc0.png)\n\nOnce you pick the user, you will be taken to a screen where you can add new accounts or revalidate accounts for which passwords have changed:\n![lpaid-accounts](https://user-images.githubusercontent.com/2160795/30006234-f4f69160-90c1-11e7-9db0-4c8c2d6ffcd0.png)\n\nAfter you use `node cli.js` to fetch transactions, you can use the website to look at recent transactions:\n![lpaid-transactions](https://user-images.githubusercontent.com/2160795/30006236-fbf82ab4-90c1-11e7-874a-e801dcdce7a3.png)\n\n# Design\n\nLpaid contains two components:\n\n - Account setup server (needed to run only when accounts need to be\n   added/removed)\n - Update script (fetches new transactions for all accounts)\n\nLpaid provides nothing to help analyze the data. The plan is to keep the db schema consistent to allow many possible \"frontends\" to analyze the data.\n\n# Set up\n\n### Set up keys \nCurrently `config/default.json` contains dummy values that do not work.\nIn order to be able to access test or real world data, you must\ncreate a new plaid account. Upon account creation, you will get \"sandbox\" keys.\nTo access real world data, you must request development keys which allow you to\nlink up to 100 accounts. (Of course Plaid may decide to decline your request or\neven decide to revoke my keys. So no guarantees on that end).\n\nOnce you have have the keys, create a new file `config/local.json`. \nThe data should look like the defaul config file. Also change \"ENV\" to \"development\" if you have development keys.\n\nMake sure not to share these keys! `config/local.json` has been\nadded to the `.gitignore` to avoid any accidental commits.\n\n\n### Initialize DB\n\nInitialize the db by running `./init_db.sh`.\n\nThis will initialize a sqlite3 db in the db/ folder. If you would like to use\nany other database, jump to the advanced section.\n\n### Run Account Setup\n\n```\nnpm install\nnode index.js\n```\n\nand then go on `localhost:8000` in your browser. This will allow you to link\nyour various accounts so that plaid can fetch the information for this account.\nIf your account has multifactor authentication, the first login may fail.\nHowever, on the second attempt, plaid will attempt the other form of\nauthentication as well. \n\nOnce your accounts are linked, you should wait a little bit so that plaid has\ntime to load all the linked data (roughly 30ish mins).\n\nIf any of your login information changes, you can rerun this server to update the login information. \n\n### Fetch transactions\n\n`node cli.js --help` will tell you what commands you have available.\n\nNormally you will only need to do:\n\n - `node cli.js fetch`: this will retrieve transactions for the past 30 days\n   for all your accounts.\n - `node cli.js balance`: This will fetch the balance of your\n   checking/savings account for today and save it. Since plaid doesn't\n   maintain balance history (or rather banks don't provide that to plaid), we\n   have to maintain this history ourselves. So you should run this every few\n   days to have a running balance`.\n\n Note that the above command assumes that there is only one \"user\" in your\n db. If you have multiple users, then the commands accept the user id\n (integer) as the first argument after the command name.\n\n\n## Advanced\n\n### Database:\n\nLpaid uses `sequelize` as an ORM layer to talk to the database. Since sequelize\nsupports multiple dbs (namely postgres, mysql, sqlite and mssql), you should be\nable to create any of those databases with the appropriate tables and use it.\nThe only change you should have to make is in the config json file, you should\nchange the `DB_STRING` to the appropriate database connection string for your\ndb.\n\n### Analysis\n\nCurrently, Lpaid provides no scripts to analyze the data. However, the existing\ncode should be easy to leverage to do analysis. Additionally, many other\nlanguages have libraries to easily talk to sqlite3 databases.\n\nThe goal is to have various frontends to the current db schema.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazeemba%2Flpaid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fazeemba%2Flpaid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazeemba%2Flpaid/lists"}