All work

Sendout.ai

LinkedIn prospecting and outreach, automated end to end

NestJSTypeScriptPrismaPostgreSQLNext.jsKafkaLinkedIn Voyager APIDocker
Role
Software Engineer
Company
Prospect Engine LLC
Period
February 2024 – Present
Location
Dhaka, Bangladesh
Domain
LinkedIn automation

Overview

Sendout.ai is a LinkedIn automation and outreach platform that takes over the top of the sales funnel — sourcing and qualifying prospects, then running multi-step campaigns against them and measuring what actually converted.

LinkedIn automation is an unusually hostile engineering problem. There is no public write API, so the platform drives LinkedIn's own internal Voyager API on behalf of each user's account. That account is the customer's real professional identity, and LinkedIn actively detects and restricts automated behaviour — so the difficulty is not sending messages, it is sending them in a way that stays within limits and never puts an account at risk.

The platform is TypeScript throughout: a NestJS API over PostgreSQL through Prisma, a Next.js front end, and Apache Kafka scheduling and dispatching every outreach action so campaigns are paced rather than blasted. It runs in Docker.

I built the lead generation and qualification system on the Voyager API, the campaign and sequence engine with A/B testing, the analytics that track performance in real time, and the integrations connecting it to the CRM and email platforms teams already run.

What I built

  • Built an automated lead generation and qualification system using the LinkedIn Voyager API.
  • Created multi-channel outreach campaigns with A/B testing capabilities.
  • Implemented real-time analytics and performance tracking for outreach campaigns.
  • Developed API integrations with major CRM platforms and email providers.

Walkthrough · 1 screen

A look at the running system, with a note on what it implies about the design underneath.

In depth

  1. 01

    LinkedIn Voyager API integration

    LinkedIn publishes no API for outreach, so the platform drives Voyager — the private API LinkedIn's own web client uses. That means holding a valid authenticated session per account, tracking the request shapes the client actually sends, and absorbing changes on an interface with no contract, no versioning and no deprecation notice.

  2. 02

    Automated lead generation and qualification

    Search and profile data are pulled through Voyager and passed through a qualification pass, turning prospecting from a manual search-and-copy exercise into a system that produces a scored, qualified list.

  3. 03

    Multi-step outreach sequences

    Campaigns are sequences rather than single sends: a connection request, then a follow-up once accepted, then further touches, with each step conditional on what the prospect did. Replies stop the sequence, because the fastest way to lose a warm prospect is to keep automating at someone who already answered.

  4. 04

    Kafka-driven action scheduling

    Every outreach action is an event on Kafka rather than an immediate call. That is what makes pacing possible: actions are queued, spread across the day, and dispatched by workers, so a campaign of thousands of prospects becomes a steady drip per account instead of a burst that would look exactly like a bot.

  5. 05

    A/B testing

    Campaigns run message variants against each other with A/B testing built in, so messaging decisions are settled by measured reply rate rather than by opinion.

  6. 06

    Real-time analytics

    Real-time analytics and performance tracking across campaigns — acceptance, reply and conversion rates — making it visible which sequences are working while they are still running and can still be changed.

  7. 07

    CRM and email provider integrations

    API integrations with major CRM platforms and email providers, so outreach activity lands in the systems of record a sales team already works from, and outreach can fall back to email where LinkedIn is exhausted.

  8. 08

    Type-safe data layer with Prisma

    PostgreSQL through Prisma models the whole domain — accounts, prospects, campaigns, sequence steps and every action taken — with the schema as the single source of truth and versioned, reviewable migrations.

Stack

Backend

  • NestJS
  • Node.js
  • TypeScript
  • REST APIs

Frontend

  • Next.js
  • React
  • TypeScript

Data

  • PostgreSQL
  • Prisma ORM
  • Redis

Messaging & events

  • Apache Kafka
  • Queues
  • Background workers
  • Webhooks

Integrations

  • LinkedIn Voyager API
  • CRM platforms
  • Email providers

Infrastructure

  • Docker
  • CI/CD