Lead capture + HubSpot sync
Capture website leads and route them to HubSpot in under an hour.

Home Servicesweb
Everything you need to ship
Stop renting your lead form.
Form SaaS charges monthly, Zapier glues it to your CRM, and somewhere in that chain leads quietly go missing. This template replaces the whole stack with one app you own: a polished public capture form, a single server round-trip that saves the lead and syncs it to HubSpot, and a password-protected admin inbox that shows you exactly what synced.
From submit to HubSpot in one round-trip
- Visitor submits name, email, company, and message. The payload is validated with zod before anything touches your data.
- The lead is created or matched in HubSpot (Contacts API v3). If the email already exists, the app finds the existing contact and records its id instead of failing.
- The lead lands in your own Supabase Postgres, stamped with its HubSpot contact id.
Built to never lose a lead
- HubSpot down? The lead still saves locally and the sync error is recorded on the row, so you can retry later. Nothing is dropped.
- No HubSpot yet? The app runs fine without it. Leads save locally and show a "Local only" badge until you add your token.
- Locked down by default. Row-level security lets anonymous visitors submit but only signed-in admins read.
An inbox, not a spreadsheet
- Admin view at /admin behind magic-link sign-in
- Recent submissions with a per-lead sync status badge, so a failed sync is visible at a glance
- Demo seed data included, so it looks alive the moment you run it
Built for AI editing
Ships agent-ready: AGENTS.md (auto-loaded by Claude Code, Cursor, and Windsurf) plus CUSTOMIZE_WITH_AI.md with ten ready-to-paste prompts your AI tool applies in seconds: add a phone field, Slack alerts on new leads, honeypot anti-bot protection, IP rate limiting, CSV export, auto-reply emails via Resend, an embeddable widget version, or swapping magic-link auth for email and password.
What's in the box
- Stack: Next.js 15 (App Router) + React 19, strict TypeScript, Tailwind v4, Supabase (Postgres + auth), HubSpot Contacts API v3 via a private app token (two scopes, no OAuth dance)
- Docs: step-by-step setup, Vercel deploy guide, troubleshooting, and copy-paste customization recipes
- Setup: create a Supabase project, run one migration, paste your HubSpot token. About 30 minutes.
Plays well with
- HubSpot
- Zapier
More from this shelf
Price shown: $149 · one-time
From · one-time
$149


