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.

- Client
- B2B SaaS company
- Industry
- B2B SaaS
- Services
- AI lead scoring, CRM, Data pipelines
from signed scope to live
first-phase tasks done in three weeks
faster queries after the move to psycopg COPY and Polars
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

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

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

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

How it works
- 1
Intake
A post link from a CRM form, Telegram or a Google Form
- 2
Apify
Pulls the post and the people who engaged
- 3
Raw store
Raw data lands first, so any stage can re-run
- 4
Clean and enrich
Engagers deduplicated, filtered and enriched
- 5
AI scorer
Product match, then fit, with a written reason
- 6
CRM
Scored leads loaded per organization
- 7
Dashboard
Next.js screens and an AI assistant over MCP
Inside the product
AI Lead Scoring CRM
Results
- 01Live 9 days after the scope was signed
- 0216 of 18 first-phase tasks done in three weeks. The other 2 were moved or put on hold by the client
- 03One signed scope became a second signed phase within 4 weeks
- 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.