Joe Burwasser
All projects

AI Sales Lead Harvester

AI lead pipeline for the GoHighLevel CRM · 2025 – 2026

Built with: Next.js, SQLite, FastAPI, Ollama, Google Apps Script, Cloudflare Tunnel, GoHighLevel API

The problem

Some of the best sales leads show up as screenshots, like a Facebook post from a local business. Turning one into a usable CRM contact meant retyping names and numbers, looking the business up, and filling in fields by hand, one lead at a time.

What I built

AI Sales Lead Harvester (sold as GSheet Wizard) does all of that in one step. Paste a screenshot, and out comes an enriched, tagged contact in GoHighLevel, the client's sales and marketing CRM. Here's one demo lead making the trip:

Paste

A Facebook post, pasted into the web app or a Google Sheet

Extract

Business
Maple & Pine Pressure Washing
Contact
Dana Reyes
Phone
(555) 214-7788

Enrich

  • Google Places match
  • Yelp listing found
  • Website verified

Push

Dana Reyes

New GoHighLevel contact, screenshot attached

  • pressure-washing
  • facebook
Pasting runs through a Next.js web app or an Apps Script library. Vision runs on FastAPI and Ollama on a Mini PC behind Cloudflare Tunnel, enrichment uses Google Places and Yelp, and contacts land through the GoHighLevel API. Demo data.

Under the hood

  • Reading the screenshot. A FastAPI service runs a vision model locally with Ollama and pulls out the business and contact name, phone, email, website, social handles, and the service offered.
  • Checking the details. The pipeline matches the business on Google Places, finds its Yelp listing, and tracks down the official website while skipping directories, parked domains, and social links. It cross-checks names, phone numbers, and addresses to score each match.
  • Saving the contact. Each lead is created or updated in GoHighLevel, with tags and the original screenshot attached.
  • Two ways in. Operators can use a multi-tenant Next.js web app (email or Google sign-in, admin tools, SQLite) or a Google Sheets template backed by a versioned Apps Script library.

Why it's built this way

  • The AI runs on my own hardware. The vision model runs on a Mini PC I own, so there's no per-image API bill. Its services only listen locally and are reached through a Cloudflare Tunnel with API-key and session security.
  • Secrets stay on the server. Each client's GoHighLevel credentials live server-side. Operators sign in, paste, and push, and never have to touch an API key or Location ID.
  • AI agents in the loop. I set up the GoHighLevel MCP server so Cursor agents can work against the live CRM while I build and debug.

Screens

Lead Harvester extract view with fields pulled from a sample screenshot
Extract and review (demo data)
Lead Harvester admin page listing tenants and users
Tenant and user admin (demo data)