Description
Overview of YNAB Node
I created this node for personal use.
While I am currently an employee of n8n, this is an unofficial node I built in my own time.
I have no affiliation with YNAB beyond being a user.
Haven’t heard of YNAB? Check it out here.
Version 2 (breaking changes)
As of 1.0.0, the YNAB node has a new version 2. Version 2 is the default for
any node you newly add to a workflow. If you already have YNAB nodes in
existing workflows, they are unaffected — n8n pins them to version 1
automatically, so nothing breaks. You can manually upgrade a node to v2 by
removing it and re-adding it (or replacing it), then updating its parameters
to match the changes below.
Version 1.0.0+ of this package requires n8n 1.80 or newer, since it uses
APIs that older n8n versions lack. If you’re on an older n8n, stay on package
version 0.1.6.
Breaking changes
- One item per record. List-type operations (Get Many) now output one
- Operations renamed to the “Get Many” convention. e.g.
List Accounts - Update operations use an “Update Fields” collection. Fields you want to
Sinceparameter renamed. The UI label remains “Since”, but the internal- Scheduled Transaction update now uses
PUT, matching the current YNAB - Amounts like
-128.14are no longer rejected (#1). Delete Scheduled Transactionnow actually works. In v1 this operation- An amount of
0is now accepted on create/update operations (v2 only) - The trigger node is more robust: the first poll after activation no
- Return All / Limit options on Get Many operations, so you can cap
- Name-or-ID dropdowns for Account, Category, and Payee fields — pick
- Usable as an AI Agent tool.
- Credential test button to verify your Personal Access Token and
n8n item per YNAB record, instead of a single item wrapping all results.
v1 returned: [{ "json": [ {account1}, {account2} ] }] for List Accounts, or
[{ "json": { "payees": [...] } }] for List Payees. v2 returns one item per record,
so Split In Batches and Filter work naturally downstream.
is now Get Many, Get Account is now Get. See the full migration table
below.
change are now added individually to an “Update Fields” collection instead
of being fixed top-level parameters, matching standard n8n node UX.
parameter key changed from since to sinceDate on operations that support
delta requests (affects expressions referencing the parameter).
API (the endpoint no longer accepts PATCH).
Fixed bugs
Converting to milliunits with floating point math could produce a
non-integer (e.g. -128140.00000000001), which YNAB’s API rejects. This is
fixed in both v1 and v2.
was present in the UI but silently did nothing.
— previously it was dropped.
longer floods your workflow with every historical event, each event type
tracks its own delta cursor, and the deduplication buffer is larger.
New in v2
results without pulling every record.
from a searchable list instead of pasting a raw ID.
Budget ID before running a workflow.
Migration table (v1 operation → v2 operation)
| Resource | v1 operation | v2 operation |
| — | — | — |
| Budget | budgetDetails | get |
| Budget | budgetSettings | getSettings |
| Account | listAccounts | getMany |
| Account | getAccount | get |
| Account | createAccount | create |
| Category | listCategories | getMany |
| Category | getCategory | get |
| Category | updateCategory | update |
| Payee | listPayees | getMany |
| Payee | getPayee | get |
| Payee | updatePayee | update |
| Payee Location | listPayeesLocations | getMany |
| Payee Location | getLocationById | get |
| Payee Location | getLocationByPayee | getByPayee |
| Month | listMonths | getMany |
| Month | getMonth | get |
| Transaction | listTransactions | getMany |
| Transaction | getTransaction | get |
| Transaction | getTransactionByCategory | getManyByCategory |
| Transaction | getTransactionByPayee | getManyByPayee |
| Transaction | getTransactionByMonth | getManyByMonth |
| Transaction | createTransaction | create |
| Transaction | createTransactions | createMany |
| Transaction | updateTransaction | update |
| Transaction | deleteTransaction | deleteTransaction |
| Scheduled Transaction | listScheduledTransactions | getMany |
| Scheduled Transaction | getScheduledTransaction | get |
| Scheduled Transaction | createScheduledTransaction | create |
| Scheduled Transaction | updateScheduledTransaction | update |
| Scheduled Transaction | deleteScheduledTransaction | deleteScheduledTransaction |
Note that resource values also changed from plural to singular in v2, e.g.
accounts → account, categories → category, payees → payee,
payeeLocations → payeeLocation, months → month,
transactions → transaction, scheduledTransactions → scheduledTransaction,
budget stays budget.
Bugs/Contributing/Feature Request
If you have a bug to report or a feature request, please submit a GitHub issue with as much detail as you’re able to give.
Feel free to submit PRs, but please get in touch with me first to make sure I am willing to add the feature before you spend the time on it.
Documentation
Installation
This can only be installed if you are self-hosting n8n or if this node becomes a verified community node.
Follow the installation guide in the n8n community nodes documentation.
Operations
It should be pretty self explainitory.
If you get stuck, try checking out the YNAB api docs and refrence since this node is just a thin layer ontop of the API.
Credentials
You need a personal access token and your budget ID to authenticate with this node.
This will tell you how to create an access token in YNAB.
And the budget ID will be in this spot on your URL when you are on the webapp.
!screenshot of id
You will need to make a credential per budget if you work with multiple budgets
Development
If you’re contributing to this node, npm run dev now runs n8n-node dev,
which starts a local n8n instance with the node loaded and hot reload enabled.
On very new Node.js versions (26+), npm install may need to be run as
npm install --ignore-scripts to work around a transitive native dependency
of the dev CLI. This only affects contributors setting up a dev environment —
it has no effect on users installing the published node.