BareBones + n8n

n8n is a self-hostable automation tool — perfect for landlords who like to own their stack. One HTTP Request node is all it takes to post a ledger entry whenever a bill or rent notification lands.

HTTP Request · body
{
  "amount": 142.50,
  "type": "EXPENSE",
  "category": "UTILITIES",
  "property_id": 12,
  "transaction_date": "2026-03-03",
  "reason_description": "Water & sewer"
}

What you'll need

The one endpoint every step points at

POST/api/v1/ledger

Authorization: Bearer <your_api_key>

Create a key on your dashboard. Full reference in the API docs.

FieldTypeNotes
amount*numberDollar amount, e.g. 142.50
type*enumINCOME, EXPENSE, or CHARGE
category*enumRENT, UTILITIES, REPAIRS, INSURANCE, TAXES, …
property_idintegerWhich property (optional)
unit_idintegerSpecific unit; omit = property-wide
transaction_datestringYYYY-MM-DD; defaults to today
reason_descriptionstringFree-text note for the line
statusenumPAID or UNPAID (default UNPAID; ignored for INCOME)

* required

Step by step

Wire up the workflow

Any trigger works — an inbound email, a webhook, a schedule. The last node is always the same.

    1

    Create an API key

    On your BareBones dashboard, open API keys and generate one. Copy it now — you only see it once.

    2

    Start with a trigger

    Add whatever kicks the workflow off: an IMAP Email node watching for utility bills, a Webhook, or a Schedule.

    3

    Add an HTTP Request node

    Set Method: POST and URL: https://barebonespm.com/api/v1/ledger.

    4

    Store the key as a credential

    Create a Header Auth credential with name Authorization and value Bearer YOUR_KEY, so the key never sits in plaintext in the node.

    5

    Map the body to JSON

    Send JSON and map the fields — pull amount and a category from the trigger data using n8n expressions.

    6

    Execute and confirm

    Run it. A 201 Created means the line is in your ledger. Turn on the node’s retry-on-fail so a flaky bill email can’t drop an entry.

Confirm it worked

A successful call returns the new line

201 Created
{
  "data": {
    "id": 481,
    "amount": "142.50",
    "type": "EXPENSE",
    "category": "UTILITIES",
    "status": "UNPAID",
    "transactionDate": "2026-03-03"
  }
}

Get your API key and wire it up.

Create a key on your dashboard, point your tool at POST /api/v1/ledger, and your books start keeping themselves.

Other integrations