Full-Stack Lead Generation SaaS

NoSite Leads

A web app that searches official Google Places data for local businesses with no website listed, then delivers private results with a map view, filtering, and CSV export.

Next.jsTypeScriptCloudflare WorkersGoogle Places APIStripeSupabase
An earlier NoSite Leads interface from the product's first Chrome extension version.
NoSite began as a Chrome extension before being rebuilt as the current API-powered web app.

Problem

What it solves

Freelancers, web designers, agencies, and local marketers need a reliable way to find businesses with no website listed. NoSite turns an area, radius, and set of business categories into an outreach-ready lead list without requiring users to search listings by hand.

Main features

Feature set

  • Location, radius, category, and scan-size controls with a clear price before checkout.
  • Official Google Places searches across a hex grid, with deduplication and honest result classification.
  • Private results links with lead counts, filters, map view, and one-click CSV export.
  • Pay-as-you-go scans, credit packs, and monthly plans through Stripe Checkout.

Evolution

From extension to SaaS

NoSite started as a local Chrome extension that read Google Maps results. After the Chrome Web Store rejected that data-access approach as scraping, I rebuilt the product around the official Google Places API. The current version works on any device and no longer depends on browser-extension APIs or Google Maps page structure.

Backend

Scanning & billing

  • Stripe Checkout starts paid scans, with signature-verified and idempotent webhook handling.
  • Supabase stores scans, results, pricing configuration, and job state.
  • Atomic lease claiming, request-time drivers, status polling, and a scheduled sweep allow interrupted scan jobs to recover.
  • Server-side price checks and per-scan provider-cost fuses protect the payment and scanning flow.

Reliability

Built for long-running work

The scanner splits searches into recoverable chunks, deduplicates Places results, caps provider requests, and classifies ambiguous social-only listings for verification. Automated tests cover pricing, webhook signatures, authorization, CSV export, deduplication, and the scan state machine.

Tech used

Stack

Next.js 15, React 19, TypeScript, and Tailwind CSS on Cloudflare Workers through OpenNext. The application uses Google Places API (New) and Geocoding API for listing data, Stripe for payments, and Supabase Postgres for scans, results, configuration, and durable job state.