Embers
Turns LinkedIn engagement into a ranked queue of warm leads for founders and ghostwriters.

- 2,975
- organic search clicks, 90 days
- 7
- ICP dimensions
- 5
- billing tiers
The problem
People who post on LinkedIn get engagement they can't act on. The likes and comments are the warmest signal they will ever get, and they sit in a notification list that decays in a day. Reading them by hand does not scale past a couple of posts a week.
What I owned
- Scoring engine
- ICP classifier
- Dashboard
- Billing
- Marketing site
How it works
- 01
Hourly scrape, normalised
Apify actors run on a schedule and land raw engagement in Postgres through a normalisation layer, so a change in LinkedIn's shape is one adapter to fix rather than a migration.
- 02
Scoring across five dimensions
A lead's rank comes from engagement recency, frequency, comment intent, title match and company size. Every row carries the reason it scored what it did. A number with no explanation is a number nobody trusts.
- 03
ICP matching across seven dimensions
OpenAI structured outputs classify each profile against the user's stated ICP. Prompts are built to be cheap per row, because this runs over every engager on every post.
- 04
Voice-matched DM drafts
Drafts are generated against samples of the user's own writing, so the message that goes out sounds like them and not like a template.
- 05
Five-tier billing
Dodo Payments with webhook signature verification and idempotent handlers, so a retried webhook cannot double-provision a plan.
Stack
- Django 5
- DRF
- Celery
- Redis
- PostgreSQL
- OpenAI
- Apify
- React 19
- TanStack Start
- Cloudflare Workers
- Dodo Payments