{"id":13941728,"url":"https://github.com/bunsn/boiler","last_synced_at":"2025-07-20T05:31:03.597Z","repository":{"id":143736466,"uuid":"42263725","full_name":"bunsn/boiler","owner":"bunsn","description":"Simplify the task of exporting financial data from banking websites.","archived":false,"fork":false,"pushed_at":"2016-09-04T11:43:00.000Z","size":75,"stargazers_count":35,"open_issues_count":4,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-11T18:18:14.586Z","etag":null,"topics":["bank","financial-institutions","fintech","statement","transaction"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bunsn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2015-09-10T18:45:53.000Z","updated_at":"2024-10-06T13:11:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"ed03ba60-f3cd-4e4c-8b4f-175a6e85fb0f","html_url":"https://github.com/bunsn/boiler","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bunsn/boiler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bunsn%2Fboiler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bunsn%2Fboiler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bunsn%2Fboiler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bunsn%2Fboiler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bunsn","download_url":"https://codeload.github.com/bunsn/boiler/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bunsn%2Fboiler/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265273138,"owners_count":23738511,"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","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":["bank","financial-institutions","fintech","statement","transaction"],"created_at":"2024-08-08T02:01:26.331Z","updated_at":"2025-07-20T05:31:03.557Z","avatar_url":"https://github.com/bunsn.png","language":"JavaScript","readme":"# Boiler\n\nBoiler aims to simplify the task of exporting financial data from banking websites. It is currently experimental/prerelease software, and is testing to see if it’s possible to support many financial institutions through crowd-sourced statement definitions.\n\nFor a bookmarklet implementation, see [boiler-bookmarklet](https://github.com/bunsn/boiler-bookmarklet).\n\n## Installation\n\nBoiler is an npm module, designed to be run in a browser environment.\n\n```\nnpm i @bunsn/boiler\n```\n\n## Example Usage\n\n```javascript\nvar statementDefinitions = require('@bunsn/boiler/statement-definitions')\nvar Statement = require('@bunsn/boiler/statement')\n\n// Find a statement definition\nvar definition = statementDefinitions.findBy('host', window.location.host)\n\n// Create a statement from the definition\nvar statement = new Statement(definition)\n\n// Do something with the parsed data\nconsole.log(statement.transactions.toJSON(['date', 'description', 'amount']))\n```\n\n## Statement Definitions\n\nA statement definition is a JavaScript object literal which contains all the information needed to parse a particular bank’s table of transactions. The following properties are supported:\n\n### `institution` {String}\n\nThe name of the financial institution or bank.\n\n### `host` {String}\n\nThe host name of the statement page (can be found by calling: `window.location.host`).\n\n### `columns` {Array}\n\nThe names of the columns in the order they appear in the table. Column names include:\n\n- `'date'` (required)\n- `'type'` - often used to denote how a transaction was made e.g. ATM or DD\n- `'description'` (required)\n- `'paidIn'` (required if no `amount`)\n- `'paidOut'` (required if no `amount`)\n- `'amount'` (required unless `paidIn` \u0026 `paidOut` given) - a positive number for income, negative for outgoings\n- `'balance'`\n- `null` - for any empty columns\n\n### `dateFormat` {String}\n\nThe format used on transaction dates. Takes inspiration from the [year, month, and day tokens in moment.js](http://momentjs.com/docs/#/parsing/string-format/), e.g.\n\n- **1 Apr 2015** has format: `D MMM YYYY`\n- **1 Apr** has format: `D MMM`\n- **01/04/2015** has format `DD/MM/YYYY`\n- **2015-04-01** has format `YYYY-MM-DD`\n\n### `rows` {Function|NodeList}\n\nA function which returns a NodeList of `tr` elements, each representing an individual transaction.\n\n### `date` {Function|Date} (optional)\n\nA function that returns the statement date (a `Date` instance). This is used to generate transaction dates for statements that omit the year-part in the date cell (I’m looking at you, HSBC!). Alternatively you can pass in a native `Date` object.\n\n### Example\n\nHere is the NatWest statement definition:\n\n```javascript\n{\n  institution: 'NatWest',\n  host: 'www.nwolb.com',\n  columns: ['date', 'type', 'description', 'paidIn', 'paidOut', 'balance'],\n  dateFormat: 'D MMM YYYY',\n  rows: function () {\n    return window.frames.ctl00_secframe.contentDocument.querySelectorAll('.ItemsTable tbody tr')\n  }\n}\n```\n\n### Developing \u0026 Testing\n\n1. Log in to your online banking site, and navigate to a page of transactions.\n2. Construct your statement definition in your text editor or in your browser’s developer tools console (see above for a list of statement definition properties).\n3. Add [the developer script](dist/boiler.min.js) to the page either by copy and pasting the script into the your browser’s developer tools console, or appending the script to the DOM (this might be useful if your bank uses frames and your get cross-origin frame errors). To add the script, run the following code in your browser’s developer tools console:\n\n   ```javascript\n   (function () {\n     var script = document.createElement('script')\n     script.src = 'https://rawgit.com/bunsn/boiler/master/dist/boiler.min.js'\n     document.body.appendChild(script)\n   })()\n   ```\n4. Test your definition by running the following in a dev tools console:\n\n   ```javascript\n   var definition  = { … } // The definition you created in Step 2.\n   __boiler__.testStatementDefinition(definition)\n   ```\n\n   If successful, you should see a brief summary of the statement’s transactions. Otherwise you’ll get an error. (At this early stage, the error message probably won’t be too helpful!)\n\n   Note: this script does not store or send your transactions elsewhere. It is deliberately limited in functionality to discourage its use in production.\n\n## API\n\n### `Statement`\n\nTakes in a statement definition and parses a table of transactions to set up its `transactions` property.\n\n```javascript\nvar statement = new Statement(definition)\nstatement.transactions // an instance of Transactions\n```\n\nSee [transaction.js](transaction.js) for more documentation.\n\n### `Transactions`\n\nTakes in an array of `Transaction` objects, and associated statement:\n\n```javascript\nvar transactions = new Transactions([…], statement)\ntransactions.first()\ntransactions.last()\ntransactions.toArray(['date', 'type', 'description', 'amount'])\ntransactions.toJSON(['date', 'description', 'amount'])\n```\n\nSee [transactions.js](transactions.js) for more documentation.\n\n### `Transaction`\n\nRepresents a transaction and is responsible for transforming and formatting raw values.\n\n```javascript\nvar transaction = new Transaction({…})\ntransaction.getFormatted('date')\n```\n\nSee [transaction.js](transaction.js) for more documentation.\n\n## Limitations\n\nBoiler makes extensive use of ES5 array methods, and so you’ll require a reasonably modern browser to use it. It’s also early days, so some functionality may be limited.\n\n## License\n\nSee the [LICENSE](LICENSE.md) file for license rights and limitations (ISC).\n\n***\n\n[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)\n\nThe Bunsn logo is adapted from the [Fire Flame Match Icon](https://www.iconfinder.com/icons/289617/fire_flame_match_icon) by [Pixel Buddha](http://pixelbuddha.net), and is licensed under [Creative Commons (Attribution 3.0 Unported)](http://creativecommons.org/licenses/by/3.0/)\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbunsn%2Fboiler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbunsn%2Fboiler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbunsn%2Fboiler/lists"}