A TRMNL private plugin that displays recent transactions from Monarch Money on an e-ink screen.
Fetches your latest transactions from Monarch Money and renders them for TRMNL's e-ink display. Each transaction shows the merchant name, amount, category, account name, and relative date. Pending transactions are marked with a badge. Income and expenses are visually distinguished.
The plugin supports all four TRMNL display sizes:
- Full -- Up to 10 transactions with merchant, amount, category, account, date, and pending badge.
- Half Horizontal -- Up to 5 transactions with the same detail as full.
- Half Vertical -- Up to 7 transactions in compact mode (category icon, merchant, amount).
- Quadrant -- Up to 4 transactions in compact mode.
All layouts support toggling the title bar on or off via plugin settings.
Fork or clone this repo, then deploy to Vercel:
npm i -g vercel
vercel --prod
Or connect the repo directly in the Vercel dashboard for automatic deploys.
In your Vercel project settings, add one of the following authentication configurations (see the Authentication section below):
Token auth:
| Variable | Description |
|---|---|
MONARCH_TOKEN |
Session token from your browser |
Email/password auth:
| Variable | Description |
|---|---|
MONARCH_EMAIL |
Your Monarch Money email |
MONARCH_PASSWORD |
Your Monarch Money password |
MONARCH_MFA_SECRET |
(Optional) TOTP secret for MFA |
- In the TRMNL dashboard, create a new Private Plugin.
- Set the polling strategy to Webhook/Polling.
- Set the API URL to your Vercel deployment endpoint:
https://your-app.vercel.app/api/monarch - Upload the Liquid templates from
src/for each display size (full, half_horizontal, half_vertical, quadrant), along withshared.liquid.
These options are configurable in the TRMNL plugin settings panel:
| Setting | Default | Description |
|---|---|---|
| Show Account Name | true | Display which account each transaction is from |
| Show Category | true | Display category name/icon |
| Show Date | true | Display relative date (e.g. "Today", "3d ago") |
| Show Pending Badge | true | Show a badge on pending transactions |
| Show Title Bar | true | Display the plugin title bar |
Method 1 -- Session Token (recommended for Google OAuth users)
If you log in to Monarch Money with Google, you cannot use email/password auth. Instead:
- Log in to monarchmoney.com in your browser.
- Open DevTools and find a request to
api.monarchmoney.com. - Copy the
Authorizationheader value (the token afterToken). - Set
MONARCH_TOKENin your Vercel environment variables.
Note: Session tokens expire periodically and will need to be refreshed.
Method 2 -- Email and Password
Set MONARCH_EMAIL and MONARCH_PASSWORD. If your account has MFA enabled, also set MONARCH_MFA_SECRET to your TOTP secret (the base32 string you get when setting up an authenticator app). The server generates TOTP codes automatically at request time.
The /api/monarch endpoint accepts optional query parameters:
| Parameter | Default | Description |
|---|---|---|
limit |
10 | Number of transactions to fetch (max 50) |
start_date |
-- | Filter start date (YYYY-MM-DD) |
end_date |
-- | Filter end date (YYYY-MM-DD) |
npm run trmnl # Serve templates with trmnlp
npm run dev # Run Vercel dev server locally
The .trmnlp.yml file configures local development defaults for the TRMNL plugin preview tool.
- Node.js 18+ (Vercel Serverless Function, zero dependencies)
- Monarch Money GraphQL API
- Liquid templates (TRMNL rendering engine)
- Vercel for deployment