Client under NDA · B2B SaaS

People who engage with a sponsored post, scored with a reason

A B2B SaaS company pays LinkedIn influencers for sponsored posts. I built the AI CRM behind it: it collects everyone who reacts or comments, scores each person against the company's products and writes down why.

B2B SaaS company: live product
Client
B2B SaaS company
Industry
B2B SaaS
Services
AI lead scoring, CRM, Data pipelines
9 days

from signed scope to live

16 of 18

first-phase tasks done in three weeks

22x

faster queries after the move to psycopg COPY and Polars

6

enrichment actors benchmarked on real posts before picking one

The challenge

Sponsored posts brought reactions and comments, but the company could not see which of those people were real prospects. It also could not prove that a post brought pipeline.

My approach

I started with evaluation, not prompts. Golden and held-out datasets came from the client's ideal customer profile, and the pass bars were set before the first test. Then I built the pipeline around it: every stage writes its result and its reason, retries on its own and can re-run from stored raw data.

A score no one can check is a guess. So every lead comes with a written reason.

What I did

01

Collect

A post link comes in from a CRM form, Telegram or a Google Form. The REST API validates the link, normalizes it and drops duplicates. A worker then pulls the post and its engagers through Apify and lands the raw data first.

  • Intake from a CRM form, Telegram and Google Form
  • Link validated, normalized and deduplicated
  • Engagers extracted through Apify
  • Raw data stored before any processing
B2B SaaS company: Collect

02

Score

Engagers are cleaned, deduplicated, filtered and enriched. A two-step LLM scorer then checks each person: product match first, then fit checks. Every lead gets a written reason.

  • Two-step LLM scorer: product match, then fit
  • A written reason for every lead
  • Golden and held-out datasets from the client's ideal customer profile
  • Pass bars set before testing
B2B SaaS company: Score

03

Run and control

Three Airflow pipelines handle lead extraction, post analytics and influencer scoring. Each stage is idempotent and re-runnable. Cost is tracked per run and per lead, with a monthly spend cap and one kill switch.

  • Three Airflow pipelines that retry on their own
  • Every stage idempotent and re-runnable
  • Per-run and per-lead cost tracking
  • Monthly spend cap and one kill switch
B2B SaaS company: Run and control

04

Use the data

A FastAPI REST API with an OpenAPI spec serves a Next.js dashboard. An AI assistant answers questions over the CRM data through MCP tools. The client receives a full copy of its version and owns it.

  • REST /v1 API with an OpenAPI spec and API keys
  • Data isolated per organization, idempotent writes
  • Next.js dashboard and an AI assistant over MCP
  • The client owns a full copy of its version
B2B SaaS company: Use the data

How it works

  1. 1

    Intake

    A post link from a CRM form, Telegram or a Google Form

  2. 2

    Apify

    Pulls the post and the people who engaged

  3. 3

    Raw store

    Raw data lands first, so any stage can re-run

  4. 4

    Clean and enrich

    Engagers deduplicated, filtered and enriched

  5. 5

    AI scorer

    Product match, then fit, with a written reason

  6. 6

    CRM

    Scored leads loaded per organization

  7. 7

    Dashboard

    Next.js screens and an AI assistant over MCP

Inside the product

AI Lead Scoring CRM

Results

  1. 01Live 9 days after the scope was signed
  2. 0216 of 18 first-phase tasks done in three weeks. The other 2 were moved or put on hold by the client
  3. 03One signed scope became a second signed phase within 4 weeks
  4. 04Queries 22x faster after the move to psycopg COPY and Polars: one analytics run went from 1.47 s to 0.23 s

Built with

Backend
Python · FastAPI · PostgreSQL · Polars
Pipelines
Airflow · Apify
AI
LLM evaluation · OpenRouter · MCP
Frontend
Next.js · TypeScript · Prisma
Delivery
Docker · GitHub Actions

Next case · ZOOP

Personal feeds for 10,000+ monthly users

Let's talk

Have a system that needs to work in production?

Tell me what you want to automate or personalize, and what data you already have. I'll reply with how I would approach it.

Vienna, AustriaGerman, English, Russian
Start a conversationLinkedIn

Hire me on Upwork or message me on LinkedIn