Skip to main content

Download financial transactions from Plaid as QIF files.

Project description

CircleCI

Description

Provides a mechanism for downloading transactions from various financial institutions (as supported by Plaid), and converts to formats (specifically QIF & CSV, but extensible) usable by financial software (especially GNUCash).

Summary

  # Save a long-lived access token (one-time only)
  plaid2qif save-access-token --institution=<name> --public-token=<token> --credentials=<file> [--verbose]

  # List out accunts that have been linked to Plaid
  plaid2qif list-accounts --institution=<name> --credentials=<file> [--verbose]

  # Download transactions in various formats (default QIF) from Plaid
  plaid2qif download \
    --institution=<name> \
    --account=<account-name> \
    --account-type=<type> \
    --account-id=<acct-id> \
    --from=<from-date> \
    --to=<to-date> \
    --credentials=<file> \
    [--output-format=<format>] \
    [--output-dir=<path>] \
    [--ignore-pending] \
    [--suppress-warnings=<tf>] \
    [--verbose]

Usage

  1. Install the plaid2qif command using pip
$ pip install plaid2qif
  1. Authenticate and link with your financial institution (first time only) -- see "Authentication Prerequisites" below.

  2. Once you've gotten that configured, you're ready to download transactions and save them as QIF files:

plaid2qif download \
    --from=<yyyy-mm-dd> \
    --to=<yyyy-mm-dd> \
    --institution=<name> \
    --account-type=<type> \
    --account=<account-name> \
    --account-id=<plaid-account-id> \
    --credentials=<file>
  • 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.
  • account-type is an account identifier type as documented here.
  • account-id is Plaid's account ID for the account you want to download, as obtained via list-accounts above.
  • 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.

Authentication Prerequisites

  • 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:
    {
      "client_id" : "<censored>",
      "public_key" : "<censored>",
      "secret" : "<censored>"
    }
  • Create a ./cfg directory for institution configuration data to be stored in.
  • Authenticate with your Financial Institution.

Steps to Authenticate with your Financial Institution

  1. Save this HTML locally, e.g. as auth.html
<html>
<body>
<button id='linkButton'>Open Link - Institution Select</button>
<script src="https://cdn.plaid.com/link/v2/stable/link-initialize.js"></script>
<script>
  var linkHandler = Plaid.create({
    env: 'development',
    clientName: 'Plaid2QIF',
    key: '[PUBLIC_KEY]', // Replace with your public_key from plaid-credentials.json
    product: 'transactions',
    apiVersion: 'v2',
    onLoad: function() {
      // The Link module finished loading.
    },
    onSuccess: function(public_token, metadata) {
      // Send the public_token to your app server here.
      // The metadata object contains info about the institution the
      // user selected and the account ID, if selectAccount is enabled.
      console.log('public_token: '+public_token+', metadata: '+JSON.stringify(metadata));
    },
    onExit: function(err, metadata) {
      // The user exited the Link flow.
      if (err != null) {
        // The user encountered a Plaid API error prior to exiting.
      }
      // metadata contains information about the institution
      // that the user selected and the most recent API request IDs.
      // Storing this information can be helpful for support.
    }
  });

  // Trigger the standard institution select view
  document.getElementById('linkButton').onclick = function() {
    linkHandler.open();
  };
</script>
</body>
</html>
  1. Open a web server on the root directory and open auth.html
$ python3 -m http.server
$ open auth.html # edit first to add the public token from plaid-credentials.json
  1. Follow instructions here to use the UI to link your financial institution to Plaid.

  2. Once you've succesfully linked, look in the browser's console (e.g. on Chrome use ⌘-⌥-i) and copy the public_token. The public_token is a short lived credential.

  3. Using the public_token, generate and save a long-lived access_token credential:

$ plaid2qif save-access-token --institution=<name> --public-token=<token> --credentials=<plaid-credentials-file>
  • 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.
  1. List the accounts connected with this institution in order to get Plaid's account_id:
$ plaid2qif list-accounts --institution=<name> --credentials=<plaid-credentials-file>

Distribution

# increment version in `plaid2qif/__init__.py`
# commit everything & push
$ git tag -s vX.Y.Z
$ git push --tags
$ python3 setup.py sdist bdist_wheel
$ twine upload dist/*

GitHub watchers Crates.io PyPi

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plaid2qif-1.3.3.tar.gz (9.0 kB view details)

Uploaded Source

Built Distribution

plaid2qif-1.3.3-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file plaid2qif-1.3.3.tar.gz.

File metadata

  • Download URL: plaid2qif-1.3.3.tar.gz
  • Upload date:
  • Size: 9.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.9.0

File hashes

Hashes for plaid2qif-1.3.3.tar.gz
Algorithm Hash digest
SHA256 7d3d32f02164cf16c2888c204b9a4e1b88855127a34537aaf21ca49eab62a1dc
MD5 15ff2db163e27a81b0b3e61a89a5879d
BLAKE2b-256 477dea1bbcf394233a673d16fd1db1fcc5bf66d4f4a1ba8664c2f5d50a1adf4f

See more details on using hashes here.

File details

Details for the file plaid2qif-1.3.3-py3-none-any.whl.

File metadata

  • Download URL: plaid2qif-1.3.3-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.9.0

File hashes

Hashes for plaid2qif-1.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 55bd58ad7da61d4e9e69537aa4a25d9d830a6264ed8447f16ad933572e522569
MD5 1d77bd6c36f222760c3f3a58eed3ea0e
BLAKE2b-256 5fbc8ee572dc853e1a9d6977046048c372b06fecff823af5ff6412867241507c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page