Tiller logo

How to vibe codeTiller

Your Financial Life In A Spreadsheet, Automatically

tillerhq.com

Personal Finance SaaS

68/ 100
Solid side project

The verdict: can you vibe code Tiller?

You can build a personal Tiller clone with Next.js, Plaid, and the Google Sheets API, but bank aggregator fees will likely cost more than paying for the real product.

Building a custom finance sync pipeline is entirely achievable for a solo developer using AI coding agents. The architecture is straightforward: a Next.js app that connects to Plaid via webhooks, processes new transactions through a rule engine, and appends rows directly to a designated Google Sheet using the Google Sheets API. However, the catch is financial: Plaid production access or development volume tiers carry monthly minimums or per-item fees that quickly eclipse Tiller's $79/year subscription price. Furthermore, dealing with OAuth token expirations from banks and Google Workspace API rate limits requires ongoing debugging.

Estimated effort: 2-3 weekends

What you can't replicate

  • Proprietary enterprise aggregation pricing agreements with major financial institutions
  • Ten years of hardened edge-case handling for broken bank connections
  • Official Google Workspace and Microsoft Office store-verified add-on distribution

Founded

2015

Raised

$16.7M

Team

19-50

Cheapest paid tier

$79/yr

What Tiller does

Personal and solo-business finance tracking service that automatically aggregates bank accounts and feeds transactions into private Google Sheets and Excel spreadsheets.

Core features

  • Bank institution credential linking via Plaid
  • Automated daily transaction and balance ingestion pipeline
  • Google Sheets API integration for automated cell appending
  • Rule-based automatic transaction categorization engine (AutoCat)
  • Daily email digest generation summarizing spending and balances
  • Multi-account transaction normalization and deduplication layer

The business

Pricing

  • Annual Subscription$79/yr

Funding

$16.7M from Ring Capital, 360 Capital Partners, ADA Ventures, Concept Ventures, Haatch, HV Capital, Soma Capital

Pay vs build, cumulative

No break-even inside 24 months at these numbers.

The hard parts of vibe coding Tiller

  • Maintaining robust API error handling and token refresh lifecycles across banking aggregators
  • Handling Google Sheets API strict write rate limits and concurrent quota management
  • Securing sensitive bank access tokens and encryption-at-rest compliance
  • Implementing resilient background cron jobs for daily transaction polling without missing sync windows

How to vibecode Tiller

Prerequisites

  • Node.jsfree

    Runtime environment for the Next.js application and background sync workers.

  • Plaid Developer Accountfree tier / usage-based

    Required to obtain API keys for linking bank accounts and fetching transactions.

  • Google Cloud Console Projectfree

    Needed to configure OAuth credentials and enable the Google Sheets API for automated spreadsheet writes.

  • GitHubfree

    Version control and continuous deployment pipeline integration.

AI coding tools

Recommended stack

FrontendNext.js with Tailwind CSS
BackendNext.js API Routes / Server Actions
DatabaseTurso (SQLite at the edge for storing user tokens and sync state)
Authbetter-auth
PaymentsNone (personal-use clone)
OtherPlaid API for bank aggregation, Google Sheets API for spreadsheet updates, Resend for daily email summaries

Hosting & infrastructure

CloudflareHosting the Next.js frontend, API routes, and cron triggers for daily bank syncs.$0-5/mo

Build guide

  1. 01Project Scaffolding & Database Setup

    Initialize the Next.js application with Tailwind CSS, configure Turso SQLite via Drizzle ORM, and set up better-auth for secure single-user access.

    Scaffold a new Next.js TypeScript application with Tailwind CSS. Configure Drizzle ORM to connect to a Turso SQLite database. Create schema tables for users, linked_accounts (storing Plaid item IDs, access tokens, and institution names), and auto_cat_rules (pattern, category). Implement better-auth with email/password authentication restricted to a single admin user. Verify the build compiles successfully and migrations run cleanly.
  2. 02Plaid Link Integration

    Integrate Plaid Link SDK on the frontend and exchange public tokens for persistent access tokens on the backend.

    Create a dashboard page in Next.js containing a 'Link Bank Account' button using the Plaid Link React SDK. Implement the backend API route `/api/plaid/create-link-token` that communicates with the Plaid API to generate a link token. Create a companion callback route `/api/plaid/exchange-token` that takes the resulting public token, exchanges it for a permanent access token and item ID, and saves them securely in the Turso database linked to the authenticated user.
  3. 03Transaction Sync Engine & Deduplication

    Build the transaction polling and webhook sync loop to pull new transactions from Plaid and prevent duplicate records.

    Implement a backend synchronization service that queries Plaid's `/transactions/sync` endpoint for each stored item ID. Write logic to parse incoming transactions (date, amount, merchant name, account ID, pending status) and store them locally while checking for unique transaction IDs to prevent duplicates. Expose a manual 'Sync Now' button on the dashboard that triggers this routine and returns sync statistics.
  4. 04Google Sheets API Integration

    Connect the app to Google Sheets via OAuth to automatically append newly synced transactions into a user-specified Google Spreadsheet.

    Implement Google OAuth service account or user-delegated OAuth flow to access Google Sheets. Write a utility function using the Google Sheets API v4 that takes an array of normalized transactions and appends them as new rows into a specific spreadsheet ID and worksheet tab ('Transactions'). Handle Google API rate limits with exponential backoff and log any write failures to the database.
  5. 05AutoCat Rule Engine

    Build a rule-matching engine that automatically tags transactions based on merchant description patterns before writing them to the spreadsheet.

    Create an AutoCat settings UI where users can define rules with matching criteria (e.g., if merchant contains 'STARBUCKS', assign category 'Coffee & Dining'). Write a matching processor that runs automatically on every newly fetched transaction batch before it gets written to Google Sheets, updating the category field dynamically.
  6. 06Daily Email Summaries with Resend

    Configure automated cron jobs to compile daily account balances and new spending totals, dispatching a morning summary email via Resend.

    Configure a Cloudflare Workers Cron Trigger or Next.js cron route that runs daily at 6:00 AM. The job should fetch updated account balances from Plaid, calculate the previous day's total spending, and format a clean HTML email template using React Email. Send the summary email to the user's verified address using the Resend API.

Cost vs paying for Tiller

What will you build it with?

Est. 1.8M in / 0.4M out tokens· Includes access to introductory usage of the default model with dynamic rate limits.$0

Starting total with Claude Code$0 one-time

Starting costs (one-time)

  • Plaid Development Account / Production TransitionUsage-based (Free sandbox, varies in production)
  • Custom Domain (optional)$12 one-time

Total~$32 one-time

Ongoing costs (monthly)

  • Cloudflare Workers & Turso DB$0/mo (free tiers)
  • Resend Email API$0/mo (within 3k free tier)
  • Plaid API itemsVariable ($0-20+/mo depending on active links)

Total~$0-20/mo

Paying for Tiller

$6.58/mo ($79/yr)

Your time to build

16-24 hours

AI tool credits

$20 (one month of Claude Pro / Cursor)

Break-even

Paying for Tiller is cheaper and more reliable unless you enjoy maintaining banking API integrations.

Vibe code Tiller: FAQ

Can you vibe code Tiller yourself?
Solid side project — 68/100 vibecodeable. You can build a personal Tiller clone with Next.js, Plaid, and the Google Sheets API, but bank aggregator fees will likely cost more than paying for the real product.
How long does it take to vibe code Tiller?
2-3 weekends — roughly 16-24 hours of hands-on time with an AI coding agent.
How do you build your own Tiller?
Scoped to personal use: Next.js with Tailwind CSS on the front, Next.js API Routes / Server Actions behind it, Turso (SQLite at the edge for storing user tokens and sync state) for data. Follow the 6-step build guide on this page — each step has a paste-ready prompt for an AI coding agent.
How do you code your own Tiller without being an expert?
Use an AI coding tool (Claude Code or Cursor) and work in small steps: scaffold, data model, core screens, then deploy. Realistic effort: 2-3 weekends. The prompts on this page are written so the AI does the heavy lifting.
How much does it cost to vibe code Tiller instead of paying?
About ~$32 one-time to start and ~$0-20/mo to run, versus $6.58/mo ($79/yr) for Tiller. Break-even: Paying for Tiller is cheaper and more reliable unless you enjoy maintaining banking API integrations..
What stack should you use to vibe code Tiller?
Next.js with Tailwind CSS; Next.js API Routes / Server Actions; Turso (SQLite at the edge for storing user tokens and sync state); plus Plaid API for bank aggregation, Google Sheets API for spreadsheet updates, Resend for daily email summaries.

Sources

Alternatives & community builds

All alternatives →