The open-source growth engine that puts your LinkedIn B2B lead generation on autopilot.
OpenOutreach is a self-hosted, open-source LinkedIn automation tool designed for B2B lead generation, without the risks and costs of cloud SaaS services.
It automates the entire outreach process in a stealthy, human-like way:
- Discovers and enriches target profiles
- Sends personalized connection requests
- Follows up with custom messages after acceptance
- Tracks everything in a local database (full data ownership, resumable workflows)
Why choose OpenOutreach?
- 🛡️ Undetectable — Playwright + stealth plugins mimic real user behavior
- 🐍 Fully customizable — Python-based campaigns for unlimited flexibility
- 💾 Local execution — You own your workflow
- 🐳 Easy deployment — Dockerized, one-command setup
- ✨ AI-ready — Built-in templating for hyper-personalized messages (integrate GPT easily)
Perfect for founders, sales teams, and agencies who want powerful automation without account bans or subscription lock-in.
Get up and running in minutes by running the application directly on your machine.
- Git
- Python (3.11+ recommended)
venvfor creating virtual environments (usually included with Python)
git clone https://github.com/eracle/OpenOutreach.git
cd OpenOutreachIt's highly recommended to use a virtual environment to manage dependencies.
# Create the virtual environment
python -m venv venv
# Activate it
source venv/bin/activateWe use uv for fast dependency management, which will be installed first.
# Install uv
pip install uv
# Install project dependencies
uv pip install -r requirements/local.txt
# Install required browser assets
playwright install --with-deps chromiumYou need to provide your LinkedIn credentials and target profiles.
-
Configure LinkedIn accounts
cp assets/accounts.secrets.template.yaml assets/accounts.secrets.yaml
Edit
assets/accounts.secrets.yamlwith your credentials. -
Add target profiles
Paste LinkedIn profile URLs intoassets/inputs/urls.csv.
You can run the main script directly:
python main.pyWe also support running the application via Docker. This is a great option for ensuring a consistent environment and simplifying dependency management.
For full instructions, please see the Docker Installation Guide.
| Feature | Description |
|---|---|
| 🤖 Advanced Browser Automation | Powered by Playwright with stealth plugins for human-like, undetectable interactions. |
| 🛡️ Reliable Data Scraping | Uses LinkedIn's internal Voyager API for accurate, structured profile data (no fragile HTML parsing). |
| 🐍 Python-Native Campaigns | Write flexible, powerful automation sequences directly in Python. |
| 🔄 Stateful Workflow Engine | Tracks profile states (DISCOVERED → ENRICHED → CONNECTED → COMPLETED) in a local DB – resumable at any time. |
| 💾 Persistent Local Database | Full data ownership via dedicated SQLite DB per account. |
| 🐳 Containerized Setup | One-command Docker + Make deployment. |
| 🖥️ Visual Debugging | Real-time browser view via built-in VNC server (localhost:5900). |
| ✍️ AI-Ready Templating | Jinja or AI-prompt templates for hyper-personalized messages (easy GPT integration). |
This project is built in spare time to provide powerful, free open-source growth tools.
Maintaining stealth, fixing bugs, adding features (multi-account scaling, better templates, AI enhancements), and staying ahead of LinkedIn changes takes serious effort.
Your sponsorship funds faster updates and keeps it free for everyone.
Popular Tiers & Perks:
| Tier | Monthly | Benefits |
|---|---|---|
| ☕ Supporter | $5 | Huge thanks + name in README supporters list |
| 🚀 Booster | $25 | All above + priority feature requests + early access to new campaigns |
| 🦸 Hero | $100 | All above + personal 1-on-1 support + influence roadmap |
| 💎 Legend | $500+ | All above + custom feature development + shoutout in releases |
Thank you to all sponsors — you're powering open-source B2B growth! 🚀
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.
The default campaign (linkedin/campaigns/connect_follow_up.py) handles:
- Profile enrichment
- Connection requests
- Personalized follow-ups
Profile states: DISCOVERED → ENRICHED → CONNECTED → COMPLETED (or FAILED)
Edit the campaign file directly for custom logic, templates, or AI integration.
├── assets/
│ ├── accounts.secrets.yaml # LinkedIn credentials
│ └── inputs/
│ └── urls.csv # Target profiles
├── docs/
│ ├── docker.md # NEW: Docker setup guide
│ └── ...
├── linkedin/
│ ├── actions/ # Browser actions
│ ├── api/ # Voyager API client
│ ├── campaigns/ # Workflows
│ ├── db/ # SQLite utilities
│ ├── navigation/ # Login helpers
│ └── sessions/ # Session management
├── main.py # Entry point
├── local.yml # Docker Compose
└── Makefile # Shortcuts
Join for support and discussions:
Telegram Group
GNU GPLv3 — see LICENCE.md
Not affiliated with LinkedIn.
Automation may violate LinkedIn's terms (Section 8.2). Risk of account suspension exists.
Use at your own risk — no liability assumed.
Made with ❤️

