Skip to content
All work
Company · Jul 2024 – Dec 2025
Seleqt logo

Seleqt

Outbound platform for sales teams: lists, enrichment, AI research, campaigns

Role
Co-founder, product & engineering
When
Jul 2024 – Dec 2025
Status
Acquired, Dec 2025
Highlight
~104K lines of code I wrote
0:00 / 0:59

Overview

What it is

Seleqt is an outbound sales platform for sales teams and agencies. Users build lead lists from LinkedIn, Sales Navigator, Recruiter or CSV, enrich contacts with emails and phones, and run AI research on each lead to qualify it. They then launch multi-step LinkedIn and email campaigns that branch on conditions. Replies from both channels land in one inbox, and interested leads move to a deals board or a CRM.

I designed and built most of it as the technical co-founder: the Django backend, the React frontend, the campaign scheduler, the public API, billing and the white-label agency mode. I wrote about 104K lines of its code.

The company grew from 0 to 65 paying customers and was acquired by a strategic buyer in December 2025. Its contact enrichment ran on Synce, which was part of Seleqt and has its own page here.

Why it’s interesting

  • A constraint-based scheduler fits every action into per-account gaps under daily limits, sending windows, time zones and step delays, with limits shared across campaigns on one LinkedIn account.
  • Campaign branches are event-driven on top of a time-driven queue: conditions are checked at run time, and an invite acceptance found by a 30-minute sync plans the YES branch immediately.
  • AI lead qualification scrapes several sources, retrieves chunks from ChromaDB, answers with structured output, then runs a second call that checks the answer against its own explanation.
  • Enrichment is split across two services with a billing boundary: Seleqt debits and refunds credits, and Synce runs the provider waterfall and calls back on a webhook.
  • A public REST API with hashed keys, Redis rate limiting and webhooks, plus a white-label agency mode with per-agency Stripe accounts.
65
paying customers

company records

Acquired
by a strategic buyer, Dec 2025
~104K
lines of code I wrote

git blame

5
CRM and sheet integrations

HubSpot, Pipedrive, Monday, Attio, Google Sheets

Architecture

How it fits together

Chrome extensionMV3, ReactWeb appReact, ViteRealtimeChannels, Redis layerAPIDjango 5, DRFTask workersCelery, Redis brokerAction runnerdjango-q2DatabaseMySQL, ChromaDBUnipileLinkedIn, emailSynceenrichment serviceOpenAI, GeminiLLM APIsREST, JWTlink accountread, writeplan actions.delay()send actionsenrich emailreply webhooksresult webhookresearchresultspush eventsevents
The API plans each campaign action as a django-q2 schedule that sends through Unipile and calls Synce, replies and enrichment results return by webhook, and Celery runs the AI work and pushes events to the browser over WebSocket. data external sync call async / webhookhover a box to trace it

Try it

Watch the research agent enrich leads

Salespeople add a question as a column, like "last funding round" or "CRM in use", and an AI agent answers it for every lead from fresh web sources, with a certainty and a self-check. Companies here are invented.

Screens

A closer look

Lead list with AI columns. Found emails and phones sit beside AI research columns: a 1-5 ICP fit score and a yes/no hiring signal per lead.

1 / 10

Tap a screenshot to enlarge it.

Features

Everything it does

Lead lists

  • Multiple sources — Import from LinkedIn search, Sales Navigator, Recruiter, post engagers, groups or CSV.
  • Duplicate cleanup — Preview and run duplicate removal across lists and campaigns.
  • Excluded domains — A per-workspace blocklist that stops prospects at enrichment time.
  • Export — Export prospects and companies to CSV, or add them to a list or campaign.

Enrichment and AI research

  • Contact finding — Find email, phone, website, or enrich a LinkedIn profile, with an email waterfall.
  • Custom research columns — Prompts with chosen sources return text, boolean, number or score answers.
  • Explained answers — Each answer carries an explanation, a certainty value and cited sources, and can be edited.
  • AI snippets — Message segments are filled per lead from research answers.
  • Cost preview — Each job shows its cost before it runs, and running jobs can be cancelled.

Campaigns

  • Visual flow builder — Step and condition nodes: invite, message, visit, InMail, like post, email, send to CRM.
  • Conditions — Branch on accepted invite, already connected, or has email.
  • Sending settings — Time zone, per-weekday windows, daily limits and sender accounts per campaign.
  • Messages — Variables, fallback text, A/B variants, attachments, signatures and templates.
  • Campaign control — Pause, resume, relaunch leads, and apply an edited flow to a running campaign.

Inbox and deals

  • Unified inbox — LinkedIn and email replies with read state, archive, flags, labels and saved filters.
  • Reply tools — AI-drafted replies, notes, reminders and an executed-actions timeline per prospect.
  • Reply classification — Replies are labeled interested, not interested or neutral, with an email notification.
  • Kanban boards — Drag-and-drop stages, bulk actions and a table view.

Integrations and API

  • CRMs — HubSpot, Pipedrive, Monday, Attio and Google Sheets with field mapping and OAuth.
  • Public REST API — Lead lists, enrichment (sync or async), campaigns, analytics and import/export.
  • Webhooks — Incoming messages and enrichment results are posted to a customer URL.
  • Chrome extension — Connects a LinkedIn account in one click and imports profiles from a list page.

Agencies and billing

  • White-label — Agency brand, colors, custom domain and 13 feature flags per agency.
  • Client management — Client organizations, impersonation, credits and subscriptions.
  • Stripe billing — Subscriptions, credit purchases, a portal and seat-based extra accounts.
  • Workspaces and teams — Workspace switching, invites, trials and referral codes.

Tech stack

What it's built with, and why

Frontend

React 18 + Vite + TypeScript
The single-page app: lists, flow builder, inbox, deals, settings and agency pages.
Tailwind 4
Styling, with agency brand colors applied at runtime for white-label.
TanStack Query + Zustand
Server state for lists and campaigns; small stores for WebSocket, chat and branding.
TipTap, Chart.js, dnd
Message editor, analytics charts and kanban drag and drop.

Backend

Django 5 + DRF
Viewsets for the app and the public API, middleware for keys and subscriptions.
Channels + Daphne
WebSocket events for new messages, enrichment progress and credits.
django-q2
One scheduled action per planned campaign step.
Celery + django-cron
Long enrichment and AI tasks, plus credit top-ups, LinkedIn sync and trial expiry.

Data

MySQL
54 models and 181 migrations, with composite indexes on planned actions.
Redis
Task broker, API rate-limit counters and the Channels layer.
ChromaDB
Stores scraped chunks for retrieval during AI research.

AI

OpenAI
Structured-output research answers, a consistency check, reply classification and message generation.
Gemini
Message draft generation and organization descriptions.

Payments & integrations

Unipile
Sends and receives LinkedIn and email, links accounts, delivers webhooks.
Stripe
Platform billing plus one Stripe account per agency.
CRM interface
HubSpot, Pipedrive, Monday, Attio and Google Sheets behind one service factory.
Brevo, PostHog
Transactional email and product analytics.

Tooling

Django TestCase
A 23-test scheduler suite, plus planning logs and campaign export/import commands.
Mintlify
40 pages of public API documentation.