{ "info": { "author": "Edward Bridges", "author_email": "ebridges@roja.cc", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: End Users/Desktop", "Intended Audience :: Financial and Insurance Industry", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3 :: Only", "Topic :: Home Automation", "Topic :: Office/Business :: Financial", "Topic :: Office/Business :: Financial :: Accounting", "Topic :: Utilities" ], "description": "[![CircleCI](https://img.shields.io/circleci/project/github/ebridges/plaid2qif.svg?style=flat-square)](https://circleci.com/gh/ebridges/plaid2qif)\n\n### Description\n\nProvides a mechanism for downloading transactions from various financial institutions (as supported by [Plaid](https://www.plaid.com)), and converts to formats (specifically QIF & CSV, but extensible) usable by financial software (especially GNUCash).\n\n### Summary\n\n```\n # Save a long-lived access token (one-time only)\n plaid2qif save-access-token --institution= --public-token= --credentials= [--verbose]\n\n # List out accunts that have been linked to Plaid\n plaid2qif list-accounts --institution= --credentials= [--verbose]\n\n # Download transactions in various formats (default QIF) from Plaid\n plaid2qif download \\\n --institution= \\\n --account= \\\n --account-type= \\\n --account-id= \\\n --from= \\\n --to= \\\n --credentials= \\\n [--output-format=] \\\n [--output-dir=] \\\n [--ignore-pending] \\\n [--suppress-warnings=] \\\n [--verbose]\n```\n\n### Usage\n\n1. Install the `plaid2qif` command using `pip`\n\n```\n$ pip install plaid2qif\n```\n\n2. Authenticate and link with your financial institution (first time only) -- see \"Authentication Prerequisites\" below.\n\n3. Once you've gotten that configured, you're ready to download transactions and save them as QIF files:\n\n```\nplaid2qif download \\\n --from= \\\n --to= \\\n --institution= \\\n --account-type= \\\n --account= \\\n --account-id= \\\n --credentials=\n```\n\n * `account` is the path to an account in the ledger in GnuCash that you ultimately want to import the transactions to. This is added to the `!Account` header in the QIF file. e.g.: `Assets: Checking Accounts:Personal Checking Account`. If the name has spaces be sure to quote this param.\n * `account-type` is an account identifier type as [documented here](https://github.com/Gnucash/gnucash/blob/cdb764fec525642bbe85dd5a0a49ec967c55f089/gnucash/import-export/qif-imp/file-format.txt#L23).\n * `account-id` is Plaid's account ID for the account you want to download, as obtained via `list-accounts` above.\n * By default, output will go to stdout to be redirected. If you want it to be written to a location use the `output-dir` parameter.\n\n### Authentication Prerequisites\n\n* Obtain and save your own personal credentials for Plaid to a local file, e.g. `./plaid-credentials.json`. This JSON file should contain values for the following keys:\n```\n {\n \"client_id\" : \"\",\n \"public_key\" : \"\",\n \"secret\" : \"\"\n }\n```\n* Create a `./cfg` directory for institution configuration data to be stored in.\n* Authenticate with your Financial Institution.\n\n#### Steps to Authenticate with your Financial Institution\n\n1. Save this HTML locally, e.g. as `auth.html`\n\n```\n\n\n\n\n\n\n\n```\n\n2. Open a web server on the root directory and open `auth.html`\n\n```\n$ python3 -m http.server\n$ open auth.html # edit first to add the public token from plaid-credentials.json\n```\n\n3. Follow [instructions here](https://plaid.com/docs/quickstart/#creating-items-with-link-and-the-api) to use the UI to link your financial institution to Plaid.\n\n4. Once you've succesfully linked, look in the browser's console (e.g. on Chrome use `\u2318-\u2325-i`) and copy the `public_token`. The `public_token` is a short lived credential.\n\n5. Using the `public_token`, generate and save a long-lived `access_token` credential:\n\n```\n$ plaid2qif save-access-token --institution= --public-token= --credentials=\n```\n\n * `institution` should be a string that can be used as a valid (i.e.: `[a-zA-Z0-9_]`) filename, used to store the `access_token`.\n\n6. List the accounts connected with this institution in order to get Plaid's `account_id`:\n\n```\n$ plaid2qif list-accounts --institution= --credentials=\n```\n\n### Distribution\n\n```\n# increment version in `plaid2qif/__init__.py`\n# commit everything & push\n$ git tag -s vX.Y.Z\n$ git push --tags\n$ python3 setup.py sdist bdist_wheel\n$ twine upload dist/*\n```\n\n[![GitHub watchers](https://img.shields.io/github/watchers/badges/shields.svg?style=social&label=Watch&style=flat-square)]()\n[![Crates.io](https://img.shields.io/crates/l/rustc-serialize.svg?style=flat-square)]()\n[![PyPi](https://img.shields.io/pypi/v/plaid2qif.svg?style=flat-square)]()\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "plaid qif gnucash", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "plaid2qif", "package_url": "https://pypi.org/project/plaid2qif/", "platform": "", "project_url": "https://pypi.org/project/plaid2qif/", "project_urls": null, "release_url": "https://pypi.org/project/plaid2qif/1.3.2/", "requires_dist": [ "wheel (==0.33.1)", "twine (==1.13.0)", "docopt (==0.6.2)", "plaid-python (==2.4.1)", "python-dateutil (==2.8.0)" ], "requires_python": ">=3", "summary": "Download financial transactions from Plaid as QIF files.", "version": "1.3.2" }, "last_serial": 4986749, "releases": { "1.2.2": [ { "comment_text": "", "digests": { "md5": "c36d0504608d7b99be3757d93768316a", "sha256": "95debc6b0ad9116a428aad1bfa84804d2acf519539ad539ffa0102bf8f3483ef" }, "downloads": -1, "filename": "plaid2qif-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c36d0504608d7b99be3757d93768316a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 7783, "upload_time": "2018-07-21T19:50:11", "url": "https://files.pythonhosted.org/packages/00/7b/5d16abf79738570671d6d344bb00760f86330bcdf14e52a9260dfb371ae6/plaid2qif-1.2.2-py3-none-any.whl" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "bc4f54804f66a6a227d40c8958015638", "sha256": "1f40615c5d8b3adddaa78bd979b8d98fee0298ed10b58a846cdd91858d7caf64" }, "downloads": -1, "filename": "plaid2qif-1.3.0-py3.7.egg", "has_sig": false, "md5_digest": "bc4f54804f66a6a227d40c8958015638", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": ">=3", "size": 13401, "upload_time": "2018-06-30T11:35:42", "url": "https://files.pythonhosted.org/packages/2f/1d/ad0b7ff077a3e7f66bbe75ccbaa88a79c6dfde88fe2f3d7cc48f64dfbbec/plaid2qif-1.3.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "9bc057d4b7202aec8e7e6f97dd46c6d9", "sha256": "6e29a3b86d962a0b497371806ba506311c736566bde9ce179f5f2e4f5b5114f5" }, "downloads": -1, "filename": "plaid2qif-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9bc057d4b7202aec8e7e6f97dd46c6d9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 7789, "upload_time": "2018-06-30T11:35:41", "url": "https://files.pythonhosted.org/packages/34/ab/c936f7ab9f6bb1ce2de3ff3f485e73f03a3569e2917411ca9a5fd0a18432/plaid2qif-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "094e1ccc50fc4f858f89c5340bf4383f", "sha256": "0b7f25963b752e512874afd52358f501106ffd8978bfe3e8f77441f0d3063bcf" }, "downloads": -1, "filename": "plaid2qif-1.3.0.tar.gz", "has_sig": false, "md5_digest": "094e1ccc50fc4f858f89c5340bf4383f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 7214, "upload_time": "2018-06-30T11:35:43", "url": "https://files.pythonhosted.org/packages/7a/21/3efffb0c70961960ceb4b366f90dcfc075aa847b994e35a2f6142c85e6d0/plaid2qif-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "9e1cd90a50318d72ebc726f0f6d02c21", "sha256": "bf01c81581d55a43475403e99a5db14b9b69b1d6c4d56b32c50e4550a11642ab" }, "downloads": -1, "filename": "plaid2qif-1.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9e1cd90a50318d72ebc726f0f6d02c21", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 7912, "upload_time": "2018-07-21T19:59:56", "url": "https://files.pythonhosted.org/packages/cf/7b/2338441d584c1eb2614aee50a0c7495a0e0e8df5f5c5eb01942def5fac3e/plaid2qif-1.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "042554bd4cc2cb15a53ececb5ea71a0e", "sha256": "2a022ffe6a7aed046b3f45814d630a241497cb26d8c049c04c8af2ce0f545c68" }, "downloads": -1, "filename": "plaid2qif-1.3.1.tar.gz", "has_sig": false, "md5_digest": "042554bd4cc2cb15a53ececb5ea71a0e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 7400, "upload_time": "2018-07-21T19:59:57", "url": "https://files.pythonhosted.org/packages/a0/8f/a88027e06c73f9ece74c80ddb93862e9ed83927eb4663c3dc5ef119e7c6e/plaid2qif-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "3e4845bdb14429aeaacc3241f8f8cdf3", "sha256": "2076123c0618202bff2147e860c3345fb1ea7486f6a5af9f34a1356c1950a407" }, "downloads": -1, "filename": "plaid2qif-1.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3e4845bdb14429aeaacc3241f8f8cdf3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 8955, "upload_time": "2019-03-26T09:21:34", "url": "https://files.pythonhosted.org/packages/7a/69/b677447433b03c059e2a869adf117e1b61693128a725d0ef21499b4835a9/plaid2qif-1.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1adcd32cdfa97b074e882c0b3e181879", "sha256": "8489eb618c8e50459f5f2cb239c106089f0330b4ed9908cbc2a7257fd2782241" }, "downloads": -1, "filename": "plaid2qif-1.3.2.tar.gz", "has_sig": false, "md5_digest": "1adcd32cdfa97b074e882c0b3e181879", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 7619, "upload_time": "2019-03-26T09:21:35", "url": "https://files.pythonhosted.org/packages/d9/af/08598c92d54564311c931d585c91e83073899b9d0139d1541d18208ef332/plaid2qif-1.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3e4845bdb14429aeaacc3241f8f8cdf3", "sha256": "2076123c0618202bff2147e860c3345fb1ea7486f6a5af9f34a1356c1950a407" }, "downloads": -1, "filename": "plaid2qif-1.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3e4845bdb14429aeaacc3241f8f8cdf3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 8955, "upload_time": "2019-03-26T09:21:34", "url": "https://files.pythonhosted.org/packages/7a/69/b677447433b03c059e2a869adf117e1b61693128a725d0ef21499b4835a9/plaid2qif-1.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1adcd32cdfa97b074e882c0b3e181879", "sha256": "8489eb618c8e50459f5f2cb239c106089f0330b4ed9908cbc2a7257fd2782241" }, "downloads": -1, "filename": "plaid2qif-1.3.2.tar.gz", "has_sig": false, "md5_digest": "1adcd32cdfa97b074e882c0b3e181879", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 7619, "upload_time": "2019-03-26T09:21:35", "url": "https://files.pythonhosted.org/packages/d9/af/08598c92d54564311c931d585c91e83073899b9d0139d1541d18208ef332/plaid2qif-1.3.2.tar.gz" } ] }