All Startup Ideas

Where's My Payment Invoice Reconciler

Auto-match freelance payments to invoices and chase the late ones for you. A weekend-buildable accounts-receivable tool for solo operators.

For a freelancer, sending the invoice is the easy part. The hard part is the silence that follows. Payments trickle in through Stripe, bank transfer, PayPal, and Wise, often without any reference to which invoice they belong to. So the freelancer ends up doing detective work every week: cross-checking a $2,400 deposit against three open invoices, trying to remember if the March retainer ever cleared, and working up the nerve to send another awkward "just following up" email.

Built for Solo Founders, Side Hustlers, Freelancers, Small Business Owners.

29% of invoices from a base of 100,000+ freelancers were paid late; 85% of freelancers face late payments at least sometimes (Bonsai / Hello Bonsai).

65% of freelancers wait over 30 days, 33% wait over 60 days, and 19% carry at least one unpaid invoice at any time (Jobbers, Clockify).

Suggested stack: Next.js + TypeScript (Vercel), Stripe + PayPal APIs + Plaid, Claude, Postgres (Supabase), Inngest or BullMQ + Redis, Resend or Postmark. Weekend scope: about 10 hours.

The Problem

For a freelancer, sending the invoice is the easy part. The hard part is the silence that follows. Payments trickle in through Stripe, bank transfer, PayPal, and Wise, often…

The Solution

A tight tool that does two jobs a freelancer actually needs: figure out which payments matched which invoices, and automatically chase the ones that did not. You connect your…

Market Research

29% of invoices from a base of 100,000+ freelancers were paid late; 85% of freelancers face late payments at least sometimes (Bonsai / Hello Bonsai).

Competitive Landscape

Chaser — Multi-channel invoice chasing and cash-flow forecasting for small-to-mid businesses. The closest competitor, but starts around $49/month for up to 50 invoices and assumes…

Business Model

Free ($0) — Connect accounts, auto-reconcile, and see your paid/late status board (read-only).

Recommended Tech Stack

Next.js + TypeScript (Vercel) — Status board, settings, and reminder template editor.

AI Prompts to Build This

Copy these build prompts into Claude, Cursor, or your AI coding tool. Create a free account to unlock the full research behind them.

  1. 1. Project Setup

    Build the weekend MVP of "Where's My Payment": a freelancer uploads open invoices and a list of deposits, the app matches each payment to an invoice, and polite reminders go out on the ones still unpaid.
    
    Stack: Next.js (App Router), TypeScript, Tailwind, Supabase (Postgres, Row Level Security, Auth with email magic link), the Anthropic API to rank matches when the rules cannot decide, Resend for the reminders. Invoices and payments come in by CSV this weekend. A Vercel Cron route runs daily. Deploy on Vercel.
    
    Tables (Row Level Security on, each user reads only their own rows):
    - invoices(id, user_id, number, client_name, client_email, amount_cents, issued_at, due_at, paid_cents, status)  status is due, partial, paid or overdue
    - payments(id, user_id, posted_at, amount_cents, payer, memo, source)
    - matches(id, invoice_id, payment_id, amount_cents, confidence, method, confirmed_at, reversed_at)
    - reminders(id, invoice_id, step, send_at, sent_at, subject, body, paused boolean)  unique on invoice_id and step
    
    Screens: /login, /import, /board (every invoice with its status and matched payments), /review (ambiguous matches), /reminders.
    Env vars (names only): NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY (server only), ANTHROPIC_API_KEY, RESEND_API_KEY, CRON_SECRET.
    
    Do not build: billing, plans, Stripe, PayPal or bank connections, Plaid, a job queue or Redis, client reply detection, SMS.
    Done when: npm run dev starts, you can sign in, and the four tables exist with Row Level Security on.
  2. 2. Core Feature

    Build the one feature that proves Where's My Payment: every payment lands on the right invoice, and the unpaid ones get a polite nudge.
    1. Import invoices (number, client_name, client_email, amount, issued_at, due_at) and payments (posted_at, amount, payer, memo) from two CSV files.
    2. For each unmatched payment, match in code first: the memo contains an invoice number and the amount does not exceed the balance, or the amount equals one open balance exactly and the payer name is close to the client name. Both are high confidence.
    3. Otherwise send the payment and up to 5 candidate invoices to the Anthropic API with a strict JSON schema { invoice_id: string or null, confidence: number from 0 to 1, reason: string }. It may only choose from the candidates it was given. Apply a match at 0.9 or more. Put the rest in /review for one tap to confirm or reject.
    4. Support partial payments: apply the smaller of the payment and the balance, and keep the remainder as unapplied money on the payment. Recompute paid_cents and the status after every change.
    5. Every match can be reversed with a button that sets reversed_at and recomputes the invoice.
    6. The board shows each invoice as due, partial, paid or overdue with the days overdue and its matched payments.
    7. Reminders: the user sets a cadence (default day 1 friendly, day 7 firm, day 14 final) with editable templates that fill in the invoice number, the amount and the days overdue. A daily cron route (protected by CRON_SECRET) sends each due step through Resend and sets sent_at. Marking an invoice paid, or a Pause button, stops its unsent steps.
    Rules: never send a step twice. Show the user each template before any email goes out. Keep every match traceable to its payment row.
    Empty state: with no data, show both CSV formats and sample files.
    Done when: a sample of 10 invoices and 12 payments matches the clear ones automatically, queues the ambiguous ones, handles one partial payment, reverses a match cleanly, and sends a due reminder once and stops it when the invoice is paid.
  3. 3. Landing Page

    Build a one-page landing site for Where's My Payment, an invoice matcher and gentle chaser for solo operators.
    Hero: "Know who paid. Chase who didn't." Sub: "Upload your invoices and deposits. We match them, show what is still outstanding and send polite reminders so you never write the 'where's my payment' email again." One button: Join the waitlist.
    Sections: a sample status board with paid, partial, due and overdue invoices, how it works in four steps (upload, match, review, chase), and an FAQ on how matches are decided (rules first, a model only for the unclear ones), how to undo a match and which payment tools connect next.
    Waitlist: store the email in a waitlist table in Supabase. No other service.
    Style: Geist, an off-white background, near-black type, one teal accent.
    Done when: the page renders on a phone and a submitted email appears in the waitlist table.
  4. 4. Branding Package

    Use a design or image tool for this one. A coding agent cannot draw a logo.
    Brand for Where's My Payment: a wordmark and an icon that suggest two halves of a receipt that fit together.
    Colors: off-white, near-black and one teal. Type: Geist, with tabular numbers for amounts.
    Deliverables: wordmark, icon, four status chips (due, partial, paid, overdue) that differ by shape as well as color, three reminder email headers in a polite voice, and one launch graphic.
    Done when: each deliverable is saved in one folder and the status chips are distinguishable without color.