Skip to content
All work

Case study

AI Lead Generation Platform

In plain English

Sales teams find local businesses in a map radius, score how digital they are, and draft a first-touch pitch.

Discover, analyze, pitch, and export, with manager-gated CSV export.

Who it is for

  • SDR and local-sales teams hunting businesses in a radius.
  • Managers who need RBAC so export and pitch are separately gated.

Problem

Lists of local businesses go stale, and judging whether a company even takes orders online still means opening fifty tabs. Outreach then starts from a blank email.

Managers need RBAC so not every user can dump the CSV.

Solution

We built a sales desk where users pick a map radius and business types, pull public local-business listings, enrich them, and score digital maturity with an LLM: website type, ordering, booking, and chat signals.

Saved leads, keyword pitches, CSV export, and an email-pattern generator sit behind permission flags. This is an internal sales tool, not an official listings partnership.

Outcomes

A full funnel: discover, analyze, pitch, export, with admin-gated search, notes, pitch, and CSV.

Signal-based analysis (order, book, chat) rather than a generic website summary.

FlaskPythonMySQLOpenAISeleniumDockerAWS ECR

How it works

Search desk, Flask API with RBAC, discovery workers and LLM analysis, plus MySQL and OpenAI.
Search desk, Flask API with RBAC, discovery workers and LLM analysis, plus MySQL and OpenAI.

From radius to a pitch

A map-radius search becomes an analyzed lead and a first-touch pitch.
A map-radius search becomes an analyzed lead and a first-touch pitch.

What we built

Search desk

  • Geo and category search

    Latitude, longitude, radius, business types, and keywords.

  • LLM analysis

    Website type plus ordering, booking, and chat signals from fetched pages.

  • Pitch and leads

    Keyword pitch from the analysis; notes, history, and CSV export.

Admin and outreach

  • Permission flags

    Search, notes, export, and pitch are separately gated per user.

  • Email maker

    Name plus domain emits common local-part patterns as downloadable CSVs.

How it works

The browser talks to a Flask API with JWT and MySQL. Discovery workers fetch public listings for a radius; analysis and pitch call OpenAI.

First signup on an empty database is Admin. Later signups are User. Public copy does not name the listings provider.

Integrations

  • Public listings

    Radius search for local businesses, provider unnamed on purpose.

  • OpenAI

    Digital-maturity analysis and pitch copy.

  • MySQL

    Users, search history, and saved leads.

Have a similar challenge?

Start a project