Back to Nodes

YNAB

v1.0.1
Last updated Jul 24, 2026

A community node for the YNAB budgeting app

191 Weekly Downloads
218 Monthly Downloads

Included Nodes

YNAB
YNAB Trigger

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
  • 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.

  • Operations renamed to the “Get Many” convention. e.g. List Accounts
  • is now Get Many, Get Account is now Get. See the full migration table
    below.

  • Update operations use an “Update Fields” collection. Fields you want to
  • change are now added individually to an “Update Fields” collection instead
    of being fixed top-level parameters, matching standard n8n node UX.

  • Since parameter renamed. The UI label remains “Since”, but the internal
  • parameter key changed from since to sinceDate on operations that support
    delta requests (affects expressions referencing the parameter).

  • Scheduled Transaction update now uses PUT, matching the current YNAB
  • API (the endpoint no longer accepts PATCH).

    Fixed bugs

  • Amounts like -128.14 are no longer rejected (#1).
  • 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.

  • Delete Scheduled Transaction now actually works. In v1 this operation
  • was present in the UI but silently did nothing.

  • An amount of 0 is now accepted on create/update operations (v2 only)
  • — previously it was dropped.

  • The trigger node is more robust: the first poll after activation no
  • 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

  • Return All / Limit options on Get Many operations, so you can cap
  • results without pulling every record.

  • Name-or-ID dropdowns for Account, Category, and Payee fields — pick
  • from a searchable list instead of pasting a raw ID.

  • Usable as an AI Agent tool.
  • Credential test button to verify your Personal Access Token and

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.
accountsaccount, categoriescategory, payeespayee,
payeeLocationspayeeLocation, monthsmonth,
transactionstransaction, scheduledTransactionsscheduledTransaction,
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.