Pennylane automation · runs weekly
Categorise Pennylane bank transactions
Bank transactions land in Pennylane every day, and each week someone scrolls the new ones and gives each a category so the numbers by department, cost center or activity stay right.
Cotlet does it in your own Pennylane account with list_categories, list_transactions and categorise_transaction, called by your AI agent, an n8n workflow or a script.
Hosted · nothing to install or maintain
Can Pennylane do this on its own?
Pennylane's API lists transactions and sets their categories with transactions:all (checked 14 Oct 2026), but Pennylane's own MCP server is read-only and cannot categorise. Nothing in the documentation categorises a transaction from its label. The gap is the judgement per transaction; the agent reads your categories and your earlier choices and asks where it is unsure.
How you do it in Pennylane today
- Open the bank transactions in Pennylane and look at the ones from the past week.
- For each transaction, read the label and the amount, then pick the category that fits.
- Transactions that cover a purchase or a sale also need an invoice attached; Pennylane marks those with attachment_required in its data.
- Where one payment belongs to two activities, split it across categories with a weight, so the allocation adds up.
- The same supplier turns up every week with a slightly different label, so the same choice is repeated by hand.
How to categorise Pennylane bank transactions
List last week's bank transactions in Pennylane that have no category. Pick the category from the ones I already use by the transaction label, categorise the clear ones, and give me the doubtful ones with your best guess. - 01
Learn your categories
The agent reads list_categories first, with the category group and direction of each one, so it only picks from categories you already created and never invents one.
- 02
Read last week's transactions
list_transactions runs with the date range and pages through every result. A transaction that already has categories is left alone, so a category you set by hand is never overwritten.
- 03
Decide with a threshold
A label that matches a category you used before for the same supplier is categorised. A label it has never seen, or an amount that looks unusual for that supplier, goes into the doubtful list with a guess.
- 04
Keep weights valid
categorise_transaction sends the category and a weight. Weights inside one category group must sum to 1, and the agent splits a payment across groups only when your prompt says how.
- 05
Report what is still open
The report lists the transactions that still need an invoice, so a categorised transaction is not mistaken for a finished one.
What you get back
Last week: 14 transactions without a category
Categorised 11, for example "OVH SAS" as Hosting and "Qonto fee" as Bank fees
3 doubtful: "Virement M. Roux" 850.00, "AMZN Mktp" 63.90, "CB 4417 Lyon" 41.20
2 categorised transactions still need an invoice attached Other ways to ask
- Do the same for the last 30 days and only report, without categorising.
- Split every "Notion" payment 50/50 between Marketing and Product.
- Every Friday, list the transactions still waiting for an invoice, sorted by amount.
What Pennylane allows, and what to know first
- A Pennylane category has a label, a category group and an optional analytical code, and treasury categories have a direction of cash_in or cash_out.
- Pennylane takes the allocation as weights from 0 to 1, up to 7 decimals; weights inside one category group sum to 1, and categories from different groups combine freely.
- A transaction with attachment_required set to true must be matched with an invoice, and a category does not replace that.
- Pennylane returns each transaction with its amount in euros, the original currency amount, the bank account, the journal and its categories.
- The transaction list filters on id, bank account, journal and date only, and returns 1 to 100 per page.
categorise_transaction changes only your own Pennylane data and reach no one else, so it runs without asking first.
Sources: Pennylane API: List transactions · Pennylane API: Update transaction categories · Pennylane API: List categories · Pennylane MCP: Getting started
Call categorise_transaction from a script
curl -X POST https://cotlet.dev/api/v1/pennylane/transactions/5530021/categorise \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"categories":[{"id":59,"weight":"1"}]}' {
"transaction_id": 5530021,
"categories": [
{
"category_id": 59,
"label": "Hosting",
"weight": "1"
}
]
} MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is pennylane_write → categorise_transaction. Example data.
Schedule it in n8n, Make, Zapier or cronPennylane tools this automation uses
| Tool | Parameters |
|---|---|
| list_categories | category_group_id, limit, cursor |
| list_transactions | date_from, date_to, bank_account_id, limit, cursor |
| categorise_transaction | transaction_id, categories |
Frequently asked questions
Is it safe to connect Pennylane to Cotlet?
Yes. You sign in to Pennylane yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Pennylane once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.
Give your agent access to Pennylane.
Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Pennylane.