Back to Work
Lead-Prospecting Platform2026Solo build

Pulse

A personal lead engine for freelance devs. Twelve scrapers feeding a single inbox of founding-engineer roles, just-funded startups, indie launches, and local SMBs — with a 4-stage email verifier, sequence outreach, and a 1,832-keyword library tuned for senior fullstack work. Solves the lead-gen problem that $99-300/mo SaaS tools were never built to solve.

Pulse inbox — live leads from 4 source scrapers (HN, YC, ProductHunt, IndieHackers) with quick filters and per-source category tabs

The inbox after a fresh scan — leads from HN hiring, YC W26 companies, ProductHunt launches, and IndieHackers founders consolidated in one queue with quick filters and matched-skill highlighting.

12

live data sources

1,832

curated keywords

42

industry/role bundles

4-stage

email verifier

The Problem

Lead-gen SaaS isn't built for freelance devs

I needed a steady pipeline of remote contracts and founding-engineer roles. Every commercial option failed in a specific way:

  • Apollo, Hunter, Lemlist — $99-300/mo, optimized for SDR teams selling enterprise software. None surface the leads I actually want: founding engineers, recently-funded YC companies, indie founders.
  • LinkedIn / Wellfound — auth-walled, anti-scraping, and most listings filter out international candidates without surfacing the filter upfront.
  • HN "Who is hiring?" threads — gold-standard signal but lives in monthly comment threads with hundreds of posts. No filtering, no dedup, no structured data.
  • Local SMBs (cold outreach) — phone numbers and websites scattered across Google Maps, Yelp, Yellow Pages, Manta, BBB. Nothing consolidates them with verified contact emails.

So I built the tool I wished existed: a personal lead engine that pulls from twelve sources in parallel, filters by a keyword library tuned for fullstack work (including French/Tunisian variants for local job boards), verifies emails before they land in the inbox, and surfaces everything in a keyboard-first triage UI.

Architecture

Three pieces that took the most engineering

01

Source-aware scraper engine

12 scrapers behind a uniform DirectLead contract. Each picks its own fetcher tier — HTTP for HN Firebase + YC Algolia, Stealthy + Camoufox for Cloudflare-gated ProductHunt and IndieHackers. Per-source rate limits, retry with backoff, and React-SPA `wait_selector` for sources that hydrate client-side.

02

4-stage email verifier

Syntax → DNS MX → SMTP handshake → catch-all probe. Filters third-party widget emails (Stripe checkout, Sentry trackers, Intercom CDN) and prefers domain-matching addresses over anything that leaked from a footer pixel. Domain-protection layer prevents Gmail spam-flagging from cold sends.

03

42-bundle keyword library

1,832 unique keywords across roles (Frontend, Backend, AI/ML, DevOps), stages (Founding-eng, Contract, Remote), specialties (AR/VR, Embedded, Quant), verticals (Fintech, Healthtech, Climate), and locale (French/Tunisian variants for Tanit listings). Quick-add bundles toggle whole role/stack groups in one tap.

Saved Searches

Run scans on your schedule

Each saved search picks its sources, keywords, locations, and frequency. Hourly, daily, weekly, or on-demand. The background scheduler dispatches scans, persists results to Supabase, and updates the inbox. Saved searches auto-pause if a source rate-limits.

Pulse sources page — list of saved searches with run status, frequency, and per-search source counts
Pulse saved-search editor — Direct vs Cold mode with keyword chips and bundle picker

Editor

Direct vs Cold mode

Two distinct flows in one editor. Direct mode (jobs you apply to) takes keyword chips. Cold mode (businesses to sell to) takes location autocomplete + niche bundles. Switching modes resets sources to sensible defaults so a Cold scan never accidentally runs against LinkedIn.

Bundle Picker

42 quick-add bundles

Each chip toggles a whole bundle of keywords on or off in a single click. State is computed: a chip is "active" when every keyword from that bundle is selected, "partial" when only some are. Tap an active or partial chip to remove only that bundle's keywords; manually-added ones stay.

🚀 Founding eng🤝 Contract🤖 AI/ML/LLM💸 Fintech⚡ Modern Jamstack🇹🇳 French/Tunisian
Pulse bundle picker — 42 categorized chips for one-click multi-keyword selection
Pulse Cmd+K command palette — fuzzy search across pages and opportunities

Power UX

Cmd+K palette · J/K nav · A/R triage

Built for the kind of triage where you process 50 leads in 10 minutes. Cmd+K opens a fuzzy palette across every page and opportunity. J/K navigates the inbox, A applies/contacts, R rejects, V marks viewing, O / Enter opens the original posting in a new tab. Every action is reachable from the home row.

Engineering Challenges

The hard parts I had to solve

Scraping 12 sites with 12 different defenses

HN runs on plain HTML. YC ships everything via a public Algolia search index. Google Maps requires Playwright with stable data-item-id attribute selectors that survive UI redesigns. ProductHunt and IndieHackers are React SPAs behind Cloudflare and need a Camoufox-backed stealth fetcher with wait_selector to pause for client-side hydration. I built a singleScraperEngine that picks the right fetcher tier per source, applies per-source rate limits, retries with exponential backoff, and exposes one uniform DirectLead contract upstream.

Stopping email contamination

Naive email extraction returns garbage: Stripe checkout buttons leave @stripe.com, Sentry trackers leave 32-char-hex pixel addresses, Intercom widgets leak support emails. The verifier I built runs four stages — syntax → DNS MX → SMTP handshake → catch-all probe — and ranks results by domain match against the company's own website. A 25-suffix blocklist filters known third-party CDNs and tracking subdomains, so what reaches the inbox is the actual founder/recruiter email, not a payment-widget side-effect.

Async pipeline that doesn't feel stuck

Sequential email extraction made the dock progress bar freeze at 20% for two minutes. I rewrote the pipeline around asyncio.Semaphore-bounded concurrency: 8 parallel email-extraction workers, 4 parallel detail-page fetches, with live progress callbacks emitting after every lead. A 20-lead scan went from ~200s to ~30s and the user always sees forward motion.

Internationalised keyword matching

Tunisian job boards (Tanit) post in French. Two-letter tech stems like ai, ts, qa false-positive on words like Anglais and Carts. I built a word-boundary regex matcher that treats ., +, and # as word characters (so next.js, c++, c# match cleanly), normalises French accents (NFKD + diacritic strip), and applies negative-match guards (commercial, vendeur, femme de ménage) to keep software-only results clean.

Inbox triage UX

150 leads/scan needs a UX you can fly through. Cmd+K opens a fuzzy palette across every page and opportunity. J/K navigates, A applies/contacts, R rejects, V marks viewing, O / Enter opens the original posting in a new tab and auto-flips the stage. Quick-filter chips show live counts before you click them, so you know exactly how many leads "Has email" or "Founding eng" will surface. Matched keywords are highlighted inline in each description so the relevant signal jumps off the page.

The Stack

How it's built end-to-end

Modern fullstack stack picked for two reasons: I trust each piece in production, and the combination supports the long-running scrape jobs without forcing me into a dedicated worker queue.

Frontend

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind CSS 4
  • TanStack Query
  • Framer Motion
  • Radix UI
  • Vite (Pulse SPA)

Backend

  • FastAPI
  • Python 3.12
  • Pydantic
  • asyncio
  • httpx
  • BeautifulSoup

Data & Auth

  • PostgreSQL (Supabase)
  • Supabase Auth
  • Row-Level Security
  • Edge Functions

Scraping & Anti-Bot

  • Scrapling
  • Playwright
  • Camoufox (Stealthy)
  • Cloudflare bypass
  • Algolia public-API integration

Email & Outreach

  • SMTP handshake verification
  • DNS MX lookup
  • Catch-all probe
  • IMAP reply detection
  • Spintax + Liquid templating

Need a system like this for your team?

I build production scrapers, workflow automation, and full-stack internal tools end-to-end. Available for senior remote contracts.