Source-aware acquisition
Twelve connectors share one lead contract while each source keeps its own fetch strategy, rate limit, retry behavior, and hydration rules.
A personal acquisition workspace for reviewing leads from twelve different sources in one queue. It combines source-specific collection, email verification, saved searches, and outreach sequences around a keyword library tuned to the work I actually pursue.

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
I needed one review queue for remote contracts, product roles, recently funded companies, and local businesses. The existing tools I tried were built around different acquisition workflows:
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.
Lead pipeline
Pulse treats prospecting as a pipeline, not a list of scraped links. Each stage removes noise or adds context until a lead is useful enough to review, contact, and track.
Twelve connectors share one lead contract while each source keeps its own fetch strategy, rate limit, retry behavior, and hydration rules.
Syntax, MX, SMTP, and catch-all checks filter weak addresses before outreach and prefer contacts that match the company domain.
Keywords, bundles, source context, and saved-search criteria turn raw posts into comparable opportunities in one inbox.
Reviewed leads move into sequenced contact and reply tracking without losing the source evidence that made them relevant.
Saved Searches
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.


Editor
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
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.


Power UX
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
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.
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.
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.
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.
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.
System architecture
The architecture separates the fast review experience from source-specific collection and verification jobs, while one shared record model keeps the entire prospecting workflow coherent.

React, TypeScript, TanStack Query, and reusable interface primitives power fast triage, filters, editors, and command-driven navigation.
Python, asyncio, Pydantic, and source adapters handle scheduled acquisition and verification outside the interactive request path.
PostgreSQL, authentication, and row-level rules provide one durable home for saved searches, leads, contacts, and outreach state.
Direct APIs, HTTP parsing, Scrapling, and browser automation are selected per source instead of forcing every target through one brittle scraper.
I build production scrapers, workflow automation, and full-stack internal tools end-to-end. Available for senior remote contracts.