Skip to content

Linkedin Automation Tool: Visit Profile, Connect, Message with AI

License

Notifications You must be signed in to change notification settings

eracle/OpenOutreach

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

388 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OpenOutreach Logo

The open-source growth engine that puts your LinkedIn B2B lead generation on autopilot.

GitHub stars GitHub forks License: GPLv3 Open Issues


Demo:

Demo Animation

πŸš€ What is OpenOutreach?

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
  • Ranks profiles using ML (logistic regression + Thompson Sampling) for smart prioritization
  • Sends personalized connection requests
  • Follows up with custom messages after acceptance
  • Tracks everything in a built-in CRM with web UI (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 + CRM β€” You own your data, browse it in a web UI
  • 🐳 Easy deployment β€” Dockerized, one-command setup
  • ✨ AI-ready β€” Built-in templating for hyper-personalized messages (easy integration with latest models like GPT-5.3-Codex)

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


⚑ Quick Start (Local Installation)

Get up and running in minutes by running the application directly on your machine.

Prerequisites

  • Git
  • Python (3.11+ recommended)
  • venv for creating virtual environments (usually included with Python)

1. Clone the Repository

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

2. Set Up a Virtual Environment

It's highly recommended to use a virtual environment to manage dependencies.

# Create the virtual environment
python -m venv venv

# Activate it
source venv/bin/activate          # Windows: venv\Scripts\activate

3. Install Dependencies & Set Up the CRM

We use uv for fast dependency management and DjangoCRM for the local database.

# Install deps, run migrations, and bootstrap CRM data
make setup

# Install required browser assets
playwright install --with-deps chromium

4. Configure the Application

You need to provide your LinkedIn credentials and target profiles.

  1. Configure LinkedIn accounts + optional OpenAI key

    cp assets/accounts.secrets.template.yaml assets/accounts.secrets.yaml

    Edit assets/accounts.secrets.yaml with your credentials (and add your OpenAI key under env: if you want AI follow-ups).

  2. Add target profiles Paste LinkedIn profile URLs into assets/inputs/urls.csv.

5. Load Target Profiles

make load CSV=assets/inputs/urls.csv                  # import URLs into CRM
make load CSV=assets/inputs/urls.csv HANDLE=myhandle  # import for a specific account

6. Run the Daemon

make run                    # run with first active account
make run HANDLE=myhandle    # run with a specific account

The daemon round-robins through four action lanes (enrich, connect, check pending, follow up) with configurable rate limits. Fully resumable β€” stop/restart anytime without losing progress.

7. View Your Data (CRM Admin)

OpenOutreach includes a full CRM web interface powered by DjangoCRM:

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

# Start the web server
make admin

Then open:


🐳 Docker Installation

We 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.


✨ Features

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.
🧠 ML-Driven Prioritization Logistic regression + Thompson Sampling ranks profiles by predicted connection acceptance -- learns and retrains as data grows.
πŸ”„ Stateful Workflow Engine Tracks profile states (DISCOVERED β†’ ENRICHED β†’ PENDING β†’ CONNECTED β†’ COMPLETED) in a local DB -- resumable at any time.
⏱️ Smart Rate Limiting Configurable daily/weekly limits per action type, respects LinkedIn's own limits automatically.
πŸ’Ύ Built-in CRM Full data ownership via DjangoCRM with Django Admin UI -- browse Leads, Contacts, Companies, and Deals in your browser.
🐳 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 (plug in latest models like GPT-5.3-Codex easily).

❀️ Support OpenOutreach – Keep the Leads Flowing!

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.

Sponsor with GitHub


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! πŸš€


πŸ—“οΈ 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


πŸ“– Usage & Customization

The daemon (linkedin/daemon.py) round-robins through four action lanes:

Lane What it does Rate limited?
Enrich Scrapes DISCOVERED profiles via LinkedIn's Voyager API Throttled by batch size
Connect ML-ranks ENRICHED profiles, sends connection requests Daily + weekly limits
Check Pending Checks if PENDING requests were accepted, retrains ML model Age-gated
Follow Up Sends personalized messages to CONNECTED profiles Daily limit

Profile states: DISCOVERED β†’ ENRICHED β†’ PENDING β†’ CONNECTED β†’ COMPLETED (or FAILED / IGNORED)

Pre-existing connections (already connected before automation) are automatically set to IGNORED during enrichment. If connection_degree was unknown at scrape time, they're caught during the connect step.

Configure rate limits, timing, and behavior in the campaign: section of accounts.secrets.yaml.


πŸ“‚ Project Structure

β”œβ”€β”€ analytics/                       # dbt project (DuckDB analytics, ML training sets)
β”œβ”€β”€ assets/
β”‚   β”œβ”€β”€ accounts.secrets.yaml        # Credentials + campaign config (gitignored)
β”‚   β”œβ”€β”€ data/                        # crm.db (SQLite), analytics.duckdb
β”‚   └── inputs/                      # Target profile CSVs
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ docker.md                    # Docker setup guide
β”‚   └── ...
β”œβ”€β”€ linkedin/
β”‚   β”œβ”€β”€ actions/                     # Browser actions (connect, message, scrape)
β”‚   β”œβ”€β”€ api/                         # Voyager API client + parser
β”‚   β”œβ”€β”€ daemon.py                    # Main daemon loop (round-robin across lanes)
β”‚   β”œβ”€β”€ db/crm_profiles.py           # CRM-backed profile CRUD (Lead, Contact, Company, Deal)
β”‚   β”œβ”€β”€ django_settings.py           # Django/CRM settings (SQLite at assets/data/crm.db)
β”‚   β”œβ”€β”€ lanes/                       # Action lanes (enrich, connect, check_pending, follow_up)
β”‚   β”œβ”€β”€ management/setup_crm.py      # Idempotent CRM bootstrap (Dept, Stages, Users)
β”‚   β”œβ”€β”€ ml/scorer.py                 # ML profile ranking (LogisticRegression + Thompson Sampling)
β”‚   β”œβ”€β”€ navigation/                  # Login, throttling, browser utilities
β”‚   β”œβ”€β”€ rate_limiter.py              # Daily/weekly rate limiting
β”‚   └── sessions/                    # Session management
β”œβ”€β”€ main.py                          # CLI entry point (load / run subcommands)
β”œβ”€β”€ manage_crm.py                    # Django manage.py (migrate, runserver, createsuperuser)
β”œβ”€β”€ local.yml                        # Docker Compose
└── Makefile                         # Shortcuts (setup, run, load, admin, analytics, test)

πŸ“š Documentation


πŸ’¬ Community

Join for support and discussions:
Telegram Group


βš–οΈ License

GNU GPLv3 β€” see LICENCE.md


πŸ“œ Legal Disclaimer

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 ❀️

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Contributors 6

Languages