An AI Agent That Stalks Your Buyers (Effectively)

Decorative
Decorative

🎯 The Goal

Follow target buyers across the internet. Pull everyone in those threads, run them through a Company Brain (an LLM context layer) that knows the ICP, and surface the warm leads.

πŸ“¦ What You're Building

A system that:

  • Pulls intel from relevant posts from Influencers in the space, Competitors, Thought Leaders, etc. via Apify
  • Stores their name, title, profile URL, company details
  • Evaluates each person via Claude to score relevance against the company's ICP
  • Auto-drafts personalized openers for highly-scored target buyers
  • Displays an Engaged Leads pipeline counter on the dashboard

‍

βš™οΈ Setup

1. Clone & Install

LinkedIn activity tracking showing developer engagement signals used for go-to-market targeting and prospect identification.

‍

git clone <https://github.com/YOUR_USERNAME/gtm-linkedin-tracker.git>
cd gtm-linkedin-tracker
npm install

‍

2. Configure Environment

cp .env.example .env

Edit .env and add your API keys:

Key Where to get it
APIFY_API_KEY Apify Console β†’ Integrations
GEMINI_API_KEY Google AI Studio

‍

3. Initialize Database

npx prisma db push

‍

4. Run

npm run dev

Open http://localhost:3000

‍

πŸ“– How It Works

‍

Step 1: Add Profiles

Go to Profiles β†’ Add LinkedIn profile URLs of the thought leaders you want to track.

‍

Step 2: Configure Your ICP

Go to Settings β†’ Define your company context:

  • Company name & value proposition
  • Target buyer roles (VP Sales, CTO, etc.)
  • Anti-ICP signals (Recruiter, Student, etc.)
  • Target company size

‍

Step 3: Sync & Scrape

Click ⚑ Sync Now on the Signal Feed to:

  1. Fetch the latest posts from tracked profiles
  2. Scrape all commenters from those posts

‍

Step 4: Qualify Leads

Go to Pipeline β†’ Click 🧠 Qualify Leads to:

  1. Run all unscored commenters through the AI evaluator
  2. Each commenter gets an ICP score (0-100), intent level, reasoning, and a personalized DM draft

‍

Step 5: Outreach

Browse your qualified leads, filtered by intent level and ICP score. Copy the AI-drafted DM and reach out on LinkedIn.

πŸ—οΈ Tech Stack

  • Framework: Next.js 16 (App Router)
  • Database: SQLite via Prisma ORM
  • Scraping: Apify (LinkedIn profile posts + post comments actors)
  • AI: Google Gemini 2.0 Flash (structured JSON output)
  • Styling: Vanilla CSS with Apple-inspired design system

πŸ“ Project Structure

β”œβ”€β”€ prisma/
β”‚   └── schema.prisma          # Database schema
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ api/
β”‚   β”‚   β”‚   β”œβ”€β”€ context/       # Company ICP context CRUD
β”‚   β”‚   β”‚   β”œβ”€β”€ pipeline/      # Qualified leads endpoint
β”‚   β”‚   β”‚   β”œβ”€β”€ qualify/       # LLM qualification trigger
β”‚   β”‚   β”‚   β”œβ”€β”€ posts/         # Posts + commenters
β”‚   β”‚   β”‚   β”œβ”€β”€ profiles/      # Profile management
β”‚   β”‚   β”‚   β”œβ”€β”€ sync/          # Apify sync pipeline
β”‚   β”‚   β”‚   └── interests/     # Interest keyword filters
β”‚   β”‚   β”œβ”€β”€ pipeline/          # Lead Pipeline UI
β”‚   β”‚   β”œβ”€β”€ settings/          # ICP Configuration UI
β”‚   β”‚   β”œβ”€β”€ interests/         # Interest Filters UI
β”‚   β”‚   β”œβ”€β”€ profiles/          # Profile Management UI
β”‚   β”‚   β”œβ”€β”€ layout.js          # App shell + sidebar
β”‚   β”‚   β”œβ”€β”€ page.js            # Signal Feed (dashboard)
β”‚   β”‚   └── globals.css        # Design system
β”‚   └── lib/
β”‚       β”œβ”€β”€ apify.js           # Apify scraper integration
β”‚       β”œβ”€β”€ llmEvaluator.js    # Gemini AI qualification engine
β”‚       └── prisma.js          # Database client
β”œβ”€β”€ .env.example               # Environment template
└── package.json

πŸ’° Cost Estimates

Component Cost
Apify (posts) ~ $0.01 per profile
Apify (comments) ~ $0.01–0.10 per post
Gemini Flash (qualification) ~ $0.001 per 20 commenters
Total for 10 profiles/day ~ $0.15–0.50/day

‍

πŸ”§ Configuration

Changing the LLM Provider

The evaluator in src/lib/llmEvaluator.js uses Google Gemini by default. To use a different provider, modify the callGemini() function to point to the OpenAI or Anthropic API instead.

‍

Adjusting Qualification Batch Size

Edit BATCH_SIZE in src/lib/llmEvaluator.js (default: 15 commenters per LLM call).

‍

Custom System Prompts

Use the Settings β†’ Custom AI Instructions field to add domain-specific context like competitor names, tech stack preferences, or geographic targeting.

‍

πŸ“ License

MIT

🀝 Contributing

PRs welcome! Please open an issue first to discuss what you'd like to change.

🎬 See It In Action

Here’s a sample walkthrough of how this looks like once its set up!

Real-time signal feed displaying developer intent data from multiple sources for identifying high-intent prospects.
Filtered prospect list showing interested leads based on intent signals and engagement criteria for targeted outreach.
Lead pipeline view organized by intent signals showing prioritized prospects for outreach and conversion.

‍

πŸ” The Best Part

Surfacing warm leads is just one use case. The same setup is also pulling:

  • Themes target buyers are leaning into week over week
  • Topics heating up before they trend
  • Competitive intel - which competitors keep getting named, and in what tone
  • A live feed of what the category is actually thinking about
  • Whatever signal the GTM team needs before a call

The output is a daily brief that turns a noisy feed into a structured intel layer. SDRs walk into every conversation already knowing what the buyer cares about!

🧠 Want More AI-GTM Ideas Like This?

Follow the team building this stuff every day:

β†’ [Piyush, CRO, Co-Founder]

β†’ [Achintya, CEO, Co-Founder]

β†’ [Gaurav, CTO, Co-Founder]

β†’ [Disha, Head of Marketing]

β†’ [Reo.Dev]

Convert developer-intent signals into revenue
DecorativeDecorativeDecorativeDecorative