BareBones + Apify

Some numbers only live on a web page — a utility portal, an HOA statement, a rent-comparison site. An Apify actor scrapes them on a schedule; a few lines at the end of the run post each one to your ledger.

actor · post each row
for (const row of items) {
  await fetch(
    'https://barebonespm.com/api/v1/ledger', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      amount: row.amount,
      type: 'EXPENSE',
      category: 'UTILITIES',
      property_id: row.propertyId,
    }),
  });
}

What you'll need

Where the scraped rows land

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

From scrape to ledger

Do the POST inside the actor, or let Apify hand off to n8n / Make — both work.

    1

    Create an API key

    Generate one under API keys and store it as an Apify secret, not in the code.

    2

    Build or pick an actor

    Use an existing actor or write one that scrapes the page you need and pushes results to its dataset.

    3

    Post each dataset item

    At the end of the run, loop over the items and POST each to /api/v1/ledger (see the snippet). Map the scraped amount and pick a category.

    4

    Or hand off with a webhook

    Prefer no code in the actor? Add an Apify webhook on “run succeeded” that triggers an n8n or Make flow to read the dataset and post the rows.

    5

    Schedule the run

    Set the actor’s schedule (monthly for a utility bill, say). Each run reconciles the new charges into your ledger untouched by you.

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