What you can automate with Max
Any output, any schedule, any infrastructure you already use.
Scheduled CLI syncs (cron)
Add sheetlink sync --output postgres://user:pass@host/db to your crontab and run it on any schedule: daily, weekly or hourly. It writes to Postgres, SQLite, CSV or JSON.
JSON for any language
sheetlink sync prints JSON to stdout. Read it from Python, Node.js, Go or anything that reads stdin, narrow it with --from, --to or --item, and push it to your own storage or dashboard.
Webhook-style polling
Run a script after each sync, like sheetlink sync | node check-new-txns.js. Compare the latest transaction IDs against your database and trigger downstream actions: Slack alerts, email reports or budget warnings.
CI/CD pipeline integration
Add bank sync as a step in GitHub Actions or any other CI workflow. sheetlink auth --api-key $SHEETLINK_API_KEY works headless: no browser, no Google sign-in.
Automation recipes
Copy and paste these patterns to build your own bank data pipeline.
Scheduled runs need a Max API key, since nobody is there to sign in. Save it once with sheetlink auth --api-key sl_..., or set SHEETLINK_API_KEY in your crontab or CI secrets. Each crontab entry is a single line.
1. Daily CSV to S3
Export a fresh CSV every morning and archive it in S3 for a permanent transaction record.
# crontab -e
0 7 * * * sheetlink sync --output csv --file ~/bank.csv && aws s3 cp ~/bank.csv s3://my-bucket/bank-data/$(date +\%Y-\%m-\%d).csv2. Weekly Postgres sync and dbt run
Refresh your database every Sunday night and rebuild your dbt models against fresh transaction data.
# crontab -e: every Sunday at 11 PM
DATABASE_URL=postgres://user:pass@host/db
0 23 * * 0 sheetlink sync --output $DATABASE_URL && cd /path/to/dbt-project && dbt run --select finance3. Monthly CSV snapshot
Write a dated CSV on the first of each month for your monthly review. Google Sheets and Excel aren’t CLI outputs: they sync from the Chrome extension and the Excel add-in when you press Sync now.
# crontab -e: the 1st of each month at 8 AM
0 8 1 * * sheetlink sync --output csv --file ~/reports/bank-$(date +\%Y-\%m).csv4. Slack alert on large transactions
Save the JSON, look for transactions over a threshold, and post a Slack message.
sheetlink sync > sync.json && node check-large-txns.mjs
// check-large-txns.mjs
import fs from 'node:fs';
const { items } = JSON.parse(fs.readFileSync('sync.json', 'utf8'));
const large = items.flatMap((i) => i.transactions).filter((t) => Math.abs(t.amount) > 500);
for (const t of large) {
await fetch(process.env.SLACK_WEBHOOK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
text: `Large transaction: ${t.merchant_name ?? t.description_raw}, $${t.amount} on ${t.date}`,
}),
});
}SheetLink in GitHub Actions
Run a scheduled bank sync from a GitHub Actions workflow. Store your Max API key as a repository secret.
# .github/workflows/bank-sync.yml
name: Daily Bank Sync
on:
schedule:
- cron: '0 7 * * *' # Every day at 7 AM UTC
workflow_dispatch: # Allow manual trigger
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Install SheetLink CLI
run: npm install -g sheetlink
- name: Authenticate with API key
run: sheetlink auth --api-key ${{ secrets.SHEETLINK_API_KEY }}
- name: Sync transactions to Postgres
run: sheetlink sync --output $DATABASE_URL
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}Privacy note
Nothing runs unless your schedule runs it. Each sheetlink sync fetches your transactions through Plaid at that moment, and they pass through SheetLink’s server in memory on their way to your database. SheetLink doesn’t store them.
Manual sync vs. scheduled automation
Manual sync (Free and Pro)
- Open Chrome or Excel and press Sync now
- Works well for a personal monthly review
- Syncs to Google Sheets or Excel
- You choose when data is fetched
- No API keys
- Best for: individuals, occasional use
Scheduled CLI automation (Max)
- Cron or GitHub Actions runs it on a schedule
- No manual steps: it runs while you sleep
- Output to Postgres, SQLite, CSV or JSON
- API key auth: no browser required
- Trigger downstream jobs after each sync
- Best for: developers, business owners, analysts
Who automates bank data with SheetLink
SaaS financial dashboards
Build an internal finance dashboard that shows spending, cash runway and account balances, fed by a scheduled SheetLink sync into Postgres and visualized in Metabase or Grafana.
Accountant automation
Run a nightly CSV sync and email the file to your bookkeeper. They get fresh transaction data every morning without any manual bank logins.
Multi-entity bookkeeping
Manage finances for several business entities or clients. Sync each entity’s banks (with --item) to its own Postgres database on the same schedule, for one automated workflow.
Developer finance tools
Build your own spending tracker, net worth calculator or budget app on the CLI’s JSON output. Query transactions in your language of choice and render the UI however you want.
Pricing
| Plan | Price | What you get |
|---|---|---|
| Free | $0 | 1 bank, your last 7 days, Google Sheets |
| Pro | $4.99/mo or $39.99/yr | Every bank you connect, up to 2 years of history, Google Sheets and Excel, priority support |
| Max | $10.99/mo or $99/yr | Everything in Pro, plus CLI automation (API keys), Postgres and SQLite output, investments, and Claude |
Scheduled syncs need Max. Compare every plan ›
Questions
How do I automate bank transaction sync?
Install the SheetLink CLI (npm install -g sheetlink), create an API key in your SheetLink dashboard, and save it with sheetlink auth --api-key sl_... (or set the SHEETLINK_API_KEY environment variable). Then run sheetlink sync on a schedule with cron, GitHub Actions or any task scheduler. API keys and CLI automation are part of Max.
Does SheetLink sync bank data automatically in the background?
No. Nothing syncs on its own. In Google Sheets and Excel, SheetLink syncs when you press Sync now. With Max, you can schedule the CLI yourself with cron or GitHub Actions; it writes JSON, CSV, Postgres or SQLite, not Google Sheets or Excel. Either way, a sync only happens when you, or a schedule you set up, runs it.
Can I run SheetLink in GitHub Actions or a CI/CD pipeline?
Yes, with a Max API key. Store the key as a GitHub Actions secret, run sheetlink auth --api-key with it (or set SHEETLINK_API_KEY), then call sheetlink sync with your preferred output on a schedule trigger. No browser or Google sign-in is needed.
What outputs can I automate?
JSON (the default, printed to stdout), CSV (--output csv, with --file to choose the path), Postgres (--output postgres://user:pass@host/db) and SQLite (--output sqlite:///path/to/finance.db). Postgres and SQLite output are part of Max. Google Sheets and Excel aren’t CLI outputs: they sync from the Chrome extension and the Excel add-in when you press Sync now.
Can I trigger actions after a sync completes?
Yes. The CLI exits with code 0 when a sync succeeds and a non-zero code when it fails (for example, a revoked API key or an unreachable database), so you can chain commands with && in your shell or add them as later steps in a GitHub Actions job.
What plan do I need for automation?
CLI automation is part of Max, at $10.99 a month or $99 a year. Max includes the API keys that let sheetlink sync run unattended, plus Postgres and SQLite output, investments and Claude. On Free and Pro, you sync from the Chrome extension, or the Excel add-in on Pro, by pressing Sync now.