Skip to content

Repository files navigation

BlitzProspector

CI License: MIT Good first issues

An open-source, self-hosted, Apollo-style lead-sourcing UI for Blitz API. Search people and companies, filter like Apollo's own search, verify emails, and export straight to CSV/XLSX or a CRM-ready import template — no LLM, no hosted SaaS account, no vendor lock-in. Bring your own Blitz API key, run one Docker command, and you have a working multi-user tool in a couple of minutes.

Blitz API itself has no UI — you talk to it via API/MCP. BlitzProspector is that missing UI: a polished, self-hostable frontend any Blitz API customer (or small team) can stand up themselves.

Features

  • Apollo-style search — person and company filters (titles, seniority, industry, location, employee count, keywords, and more — see CONTRIBUTING.md for the full filter reference), plus a natural-language "describe your ICP" parser.
  • In-app results — paginated results table for every pull, no spreadsheet round-trip required.
  • Pluggable email verificationMillionVerifier by default, fully optional (searches still work with no verifier configured), and swappable for another provider (see CONTRIBUTING.md).
  • CRM-ready export — CSV/XLSX, plus one-click column-mapped exports for Instantly, Smartlead, and HubSpot/Salesforce-style imports.
  • Real accounts — username/password login, admin + member roles, an admin panel for user management. No shared API key as your only access control.
  • Shared suppression list — a simple do-not-contact list, shared across your team/deployment. Saved searches work the same way.
  • Light/dark theme, a Blitz-credits-used indicator, and a link to the auto-generated API docs at /docs.
  • Google Sheets export stays available as a fully optional secondary output if you configure a service account; without one, runs just export a local .xlsx.

Quick start

Requires Docker and a Blitz API key.

git clone https://github.com/<your-org>/blitzprospector.git
cd blitzprospector
cp backend/.env.example backend/.env
# edit backend/.env and set BLITZ_API_KEY — everything else is optional
docker compose up --build -d

Open http://localhost:8000 — you'll land on a "create admin account" screen the first time (shown whenever no users exist yet). Create it, log in, paste your Blitz key into Settings if you didn't set it in .env, and run a search.

docker compose down stops it; your data (SQLite DB + run checkpoints) persists in a named Docker volume across restarts.

Screenshots

Bootstrap / login
Login
Search & filters
Search
Search with a completed pull
Search results
Pulls (in-app results)
Results
Pulls with completed runs
Pulls completed
Settings (admin-only)
Settings
Admin panel
Admin

Sample outputs

A completed pull exports to CSV/XLSX with one row per contact. Below is a redacted sample (real names, emails, companies, and LinkedIn URLs are synthesized; only the title/city/country distribution is real) — the full file is at docs/samples/CXOs_USA_sample.csv.

email first_name last_name company_name title city country
alex.rivers@nimbuslabs.example Alex Rivers Nimbus Labs CEO Eagle US
jordan.calloway@cobaltrobotics.example Jordan Calloway Cobalt Robotics Co-founder CEO Santa Clara US
taylor.jennings@latticenetworks.example Taylor Jennings Lattice Networks Co-founder & CEO Miami-Fort Lauderdale US
morgan.quinlan@vectorworks.example Morgan Quinlan Vector Works Founder CEO US
casey.yardley@harbortechnologies.example Casey Yardley Harbor Technologies Founder & CEO Walnut Creek US

Configuration

All configuration lives in backend/.env (copy from backend/.env.example) or, for the fields marked below, in the in-app Settings screen (admin-only) — env vars always win when non-blank, so a Docker deploy with real secrets in the environment is never shadowed by an empty DB row.

Variable Required Notes
BLITZ_API_KEY Yes Your Blitz API key. Also settable in Settings.
MV_API_KEY / EMAIL_VERIFIER_PROVIDER No Email verification; omit for a NoopVerifier. Also settable in Settings.
GOOGLE_SERVICE_ACCOUNT_JSON / GOOGLE_SHEET_ID No Optional secondary export to Google Sheets.
APP_API_KEY No Extra shared-secret gate in front of login, for reverse-proxy setups.
ALLOWED_ORIGINS No Only needed if you run the frontend separately (see Development below) instead of the single Docker container.

See backend/.env.example for the complete list, including run-tuning knobs for large pulls.

Development

To run the backend and frontend separately (hot reload instead of rebuilding the container) or to contribute, see CONTRIBUTING.md.

Production notes

  • Reverse proxy / TLS: point a subdomain at the container's port 8000 and terminate TLS in front of it. Minimal Caddy example:
    yourdomain.com {
        reverse_proxy localhost:8000
    }
    
  • Secrets via Doppler: since config is just environment variables (Pydantic settings), a Doppler service token works with zero code changes — inject it in place of backend/.env (doppler run -- uvicorn app.main:app ... inside the container's entrypoint, or via DOPPLER_TOKEN).
  • Alternative to Docker Compose: render.yaml is a ready-to-use Render Blueprint that builds the same backend/Dockerfile. wrangler.jsonc lets you deploy just the frontend to Cloudflare Workers/Pages separately if you'd rather split frontend and backend hosts:
    cd frontend
    cp .env.production.example .env.production   # set VITE_API_BASE to your backend's URL
    npm ci && npm run build
    npx wrangler deploy                           # or: wrangler pages deploy dist
    Also set ALLOWED_ORIGINS on the backend to the frontend's origin so the session cookie's CORS check passes.

Roadmap

Deferred, not built yet — contributions welcome:

  • Scheduled / recurring searches
  • Additional email-verification providers beyond MillionVerifier (the interface is already pluggable — see CONTRIBUTING.md)
  • Additional CRM export profiles beyond Instantly/Smartlead/HubSpot

Contributing

See CONTRIBUTING.md — includes local dev setup, how to add a new email-verification provider, and a full filter-field reference. Check the issue tracker for open work, including anything tagged good first issue. By participating, you agree to abide by the CODE_OF_CONDUCT.md.

License

MIT — see LICENSE.

Releases

Packages

Contributors

Languages