SN
All projects
Full-stack · Commercial Product Featured2025

Contact Data Enrichment Platform

A full-stack app that extracts and verifies contact data from CMS collections or URL lists — shipped commercially as a licensed Windows app.

Private repository
5-step
Guided enrichment wizard
4
Export formats (JSON / CSV / TSV / JSONL)
Licensed
Shipped as a signed Windows app

Tech stack

  • Python
  • Flask
  • React
  • Playwright
  • Scrapling
  • Google Maps
  • SMTP
  • PyInstaller

Problem

Sales and operations teams need enriched contact data — emails, phones, social links — pulled from thousands of company URLs, plus a reliable way to backfill the many records that are missing a website in the first place. Doing this by hand does not scale, and off-the-shelf tools don't push cleanly back into an existing CMS.

Approach

I built a Flask + Playwright + Scrapling backend with a React frontend. It pulls from a headless CMS or a pasted URL list, extracts emails / phones / social links with language detection and retryable crawling, and includes a Google-Maps website finder that runs before enrichment to populate missing sites. SMTP verification filters dead emails, a visual filter builder composes CMS queries without writing JSON, and results export to JSON / CSV / TSV / JSONL over a REST API or push back into the CMS. The whole suite is packaged for commercial distribution as a licensed Windows app with a signed, per-client licensing system.

Results

A real product delivered to clients — end-to-end from crawl to verified, exportable data. The step-by-step wizard (source → connect → fields → enrichment → export) makes it usable by non-developers, the visual filter builder replaces hand-written queries, and the licensing layer made per-client distribution safe.

Notable engineering

  • Dual sources — pull from a headless CMS (Directus) collection or a pasted URL list.
  • Extracts emails, phones and social links with language detection and retryable crawling.
  • Google-Maps website finder (pre-enrichment) backfills missing company websites via Scrapling's stealth fetcher.
  • SMTP email verification and a visual, drag-and-drop filter builder for CMS queries.
  • Packaged for commercial distribution as a licensed Windows app with a keypair-based per-client licensing system (allow / revoke).

Screenshots & diagrams

Real UI captures and figures — source is private and client brands are not shown.

Step 1 — choose a source: CMS collection, URL list, or Google-Maps finder.
Paste a URL list to extract and verify contacts in bulk.
Connect to a headless CMS — credentials encrypted, never stored.
The Google-Maps website finder backfills missing sites before enrichment.
Architecture — React ↔ Flask ↔ Playwright / Scrapling ↔ CMS.

Deep dive

The suite is intentionally split into a pre-enrichment stage and an enrichment stage. Many source records lack a website at all, so the Google-Maps finder resolves a business listing to its real site first; only then does the enrichment pipeline crawl, extract, verify, and export. Each stage supports stop / resume and live progress, which matters when a run spans thousands of URLs.

On the extraction side, the contact extractor handles emails, phones, and social profiles with language detection and retry logic, while SMTP verification prunes undeliverable addresses before they ever reach an export. Delivering it as a signed, licensed Windows executable — built with PyInstaller and gated by a keypair licensing system — is what turned an internal tool into a distributable commercial product.