Demo:

June 10, 2026 ยท View on GitHub

OpenOutreach Logo

Describe your product. Define your target market. The AI finds the leads for you.

GitHub stars GitHub forks License: GPLv3 Open Issues


Demo:

Demo Animation

๐Ÿš€ What is OpenOutreach?

OpenOutreach is a self-hosted, open-source LinkedIn automation tool for B2B lead generation. Unlike other tools, you don't need a list of profiles to contact โ€” you describe your product and your target market, and the system autonomously discovers, qualifies, and contacts the right people.

How it works:

  1. You provide a product description and a campaign objective (e.g. "SaaS analytics platform" targeting "VP of Engineering at Series B startups")
  2. The AI generates LinkedIn search queries to discover candidate profiles
  3. A Bayesian ML model (Gaussian Process Regressor on profile embeddings) learns which profiles match your ideal customer โ€” using an explore/exploit strategy to balance finding the best leads now vs. learning what makes a good lead
  4. An LLM classifies each profile selected by the model; the GP learns from every decision to select better candidates over time
  5. Qualified leads are automatically contacted, and an AI agent manages multi-turn follow-up conversations

The system gets smarter with every decision. It starts by exploring broadly, then progressively focuses on the highest-value profiles as it learns your ideal customer profile from its own classification history.

Why choose OpenOutreach?

  • ๐Ÿง  Autonomous lead discovery โ€” No contact lists needed; AI finds your ideal customers
  • ๐Ÿ›ก๏ธ Undetectable โ€” Playwright + stealth plugins mimic real user behavior
  • ๐Ÿ’พ Self-hosted + full data ownership โ€” Everything runs locally, browse your CRM in a web UI
  • ๐Ÿณ One-command setup โ€” Dockerized deployment, interactive onboarding
  • โœจ AI-powered messaging โ€” LLM-generated personalized outreach (bring your own model)

Perfect for founders, sales teams, and agencies who want powerful automation without account bans or subscription lock-in.


๐Ÿ“‹ What You Need

#WhatExample
1A LinkedIn accountYour email + password
2An LLM API keyOpenAI, Anthropic, or any OpenAI-compatible endpoint
3A product description + target market"We sell cloud cost optimization for DevOps teams at mid-market SaaS companies"

That's it. No spreadsheets, no lead databases, no scraping setup.


Pre-built images are published to GitHub Container Registry on every push to master.

docker run --pull always -it -p 5900:5900 -p 6080:6080 -v ~/.openoutreach/data:/app/data ghcr.io/eracle/openoutreach:latest

# Open http://localhost:6080/vnc.html in your browser to watch the automation live

The interactive onboarding walks you through the three inputs above on first run. All data persists in ~/.openoutreach/data on your host across restarts.

Once the container is running, open http://localhost:6080/vnc.html in your browser to watch the browser live (noVNC). Alternatively, connect a native VNC client to localhost:5900.

For Docker Compose, build-from-source, and more options see the Docker Guide.


โš™๏ธ Local Installation (Development)

For contributors or if you prefer running directly on your machine.

Prerequisites

1. Clone & Set Up

git clone https://github.com/eracle/OpenOutreach.git
cd OpenOutreach

# Install deps, Playwright browsers, run migrations, and bootstrap CRM
make setup

2. Run the Daemon

make run

The interactive onboarding will prompt for LinkedIn credentials, LLM API key, and campaign details on first run. Fully resumable โ€” stop/restart anytime without losing progress.

3. View Your Data (CRM Admin)

OpenOutreach includes a full CRM web interface powered by DjangoCRM:

# Create an admin account (first time only)
python manage.py createsuperuser

# Start the web server
make admin

Then open:


โœจ Features

FeatureDescription
๐Ÿง  Autonomous Lead DiscoveryNo contact lists needed โ€” LLM generates search queries from your product description and campaign objective.
๐ŸŽฏ Bayesian Active LearningGaussian Process model on profile embeddings learns your ideal customer via explore/exploit, selecting the most informative candidates for LLM qualification.
๐Ÿค– Stealth Browser AutomationPlaywright + stealth plugins mimic real user behavior for undetectable interactions.
๐Ÿ›ก๏ธ Voyager API ScrapingUses LinkedIn's internal API for accurate, structured profile data (no fragile HTML parsing).
๐Ÿ”„ Stateful PipelineTracks profile states (QUALIFIED โ†’ READY_TO_CONNECT โ†’ PENDING โ†’ CONNECTED โ†’ COMPLETED) in a local DB โ€” fully resumable.
โฑ๏ธ Smart Rate LimitingConfigurable daily/weekly limits per action type, respects LinkedIn's own limits automatically.
๐Ÿ’พ Built-in CRMFull data ownership via DjangoCRM with Django Admin UI โ€” browse Leads, Contacts, Companies, and Deals.
๐Ÿณ One-Command DeploymentDockerized setup with interactive onboarding and a live browser view in your browser (noVNC at http://localhost:6080/vnc.html).
โœ๏ธ AI-Powered MessagingAgentic multi-turn follow-up conversations โ€” the AI agent reads history, sends messages, and schedules future follow-ups.

๐Ÿค– Drive LinkedIn from Your Own LLM

OpenOutreach's LinkedIn layer is also published as a standalone, Django-free package โ€” linkedin-agent-cli โ€” so you can let your own LLM agent drive LinkedIn directly, no OpenOutreach install required. Every verb prints a human summary or the full result dict with --json, and errors go to stderr with stable types โ€” a clean tool-use contract any agent (or any language) can call:

pip install linkedin-agent-cli
python -m playwright install chromium

linkedin-cli session open --session work   # launch + bind a browser (this process owns it)
linkedin-cli login   --session work         # authenticate in that session
linkedin-cli search "head of growth" --network first --json   # โ†’ handles your LLM can parse
linkedin-cli profile alice-smith --json                       # โ†’ full profile dict
linkedin-cli message alice-smith --session work --text "Hi Alice"

Point your agent at the --json output and the per-verb --help; see the linkedin-cli README for the full verb surface and output contract.


๐Ÿ“– How the ML Pipeline Works

The daemon runs a continuous task queue backed by a persistent Task model. Three task types self-schedule follow-on work:

Task TypeWhat it does
ConnectRanks qualified profiles by GP model probability, sends connection requests (daily + weekly limits). Triggers qualification and search via composable generators when the pool is empty.
Check PendingChecks if a pending request was accepted (exponential backoff per profile)
Follow UpRuns an AI agent that manages multi-turn conversations with connected profiles

The qualification loop in detail:

Profiles discovered during navigation are automatically scraped and embedded (384-dim FastEmbed vectors). The connect task's backfill chain decides which profile to evaluate next using a balance-driven strategy:

  • When negatives outnumber positives โ†’ exploit: pick the profile with highest predicted qualification probability (seek likely positives to fill the pipeline)
  • Otherwise โ†’ explore: pick the profile with highest BALD (Bayesian Active Learning by Disagreement) score (seek the most informative label to improve the model)

All qualification decisions go through the LLM. The GP model selects which candidate to evaluate next and gates promotion from QUALIFIED to READY_TO_CONNECT (confidence threshold). Every LLM decision feeds back into the model, making candidate selection progressively smarter.

Cold start: With fewer than 2 labelled profiles, the model can't fit โ€” candidates are selected in order and qualified via LLM. As labels accumulate, the GP becomes better at selecting high-value candidates.

Configure rate limits and behavior via Django Admin (LinkedInProfile + Campaign models).


๐Ÿ“‚ Project Structure

โ”œโ”€โ”€ docs/
โ”‚   โ”œโ”€โ”€ architecture.md              # System architecture
โ”‚   โ”œโ”€โ”€ configuration.md             # Configuration reference
โ”‚   โ”œโ”€โ”€ docker.md                    # Docker setup guide
โ”‚   โ”œโ”€โ”€ templating.md                # Follow-up messaging guide
โ”‚   โ””โ”€โ”€ testing.md                   # Testing strategy
โ”œโ”€โ”€ openoutreach/                    # single source package; Django apps nested inside
โ”‚   โ”œโ”€โ”€ settings.py                  # Django/CRM settings (SQLite at data/db.sqlite3)
โ”‚   โ”œโ”€โ”€ core/                        # engine app: daemon, task queue + scheduler,
โ”‚   โ”‚                                #   Campaign/SiteConfig/Task, LLM factory, onboarding,
โ”‚   โ”‚                                #   follow-up agent, db helpers, management commands
โ”‚   โ”œโ”€โ”€ linkedin/                    # LinkedIn channel app: browser, discovery pipeline,
โ”‚   โ”‚                                #   ML qualifier, task handlers, channel models
โ”‚   โ”œโ”€โ”€ emails/                      # email channel app (Layer 1 of the email-first pivot)
โ”‚   โ”œโ”€โ”€ crm/                         # Lead + Deal models
โ”‚   โ””โ”€โ”€ chat/                        # ChatMessage model
โ”œโ”€โ”€ manage.py                         # Django management (no args defaults to rundaemon)
โ”œโ”€โ”€ local.yml                        # Docker Compose
โ””โ”€โ”€ Makefile                         # Shortcuts (setup, run, admin, test)

๐Ÿ“š Documentation


๐Ÿ’ฌ Community

Join for support and discussions: Telegram Group


๐Ÿ—“๏ธ Book a Free 15-Minute Call

Got a specific use case, feature request, or questions about setup?

Book a free 15-minute call โ€” I'd love to hear your needs and improve the tool based on real feedback.

Book a 15-min call


โค๏ธ Support OpenOutreach

This project is built in spare time to provide powerful, free open-source growth tools. Your sponsorship funds faster updates and keeps it free for everyone.

Sponsor with GitHub


TierMonthlyBenefits
โ˜• Supporter$5Huge thanks + name in README supporters list
๐Ÿš€ Booster$25All above + priority feature requests + early access to new campaigns
๐Ÿฆธ Hero$100All above + personal 1-on-1 support + influence roadmap
๐Ÿ’Ž Legend$500+All above + custom feature development + shoutout in releases

โš–๏ธ License

GNU GPLv3 โ€” see LICENCE.md


Not affiliated with LinkedIn.

By using this software you accept the Legal Notice. It covers LinkedIn ToS risks, built-in self-promotional actions, automatic newsletter subscription for non-GDPR accounts, and liability disclaimers.

Use at your own risk โ€” no liability assumed.


Star History Chart

Made with โค๏ธ