Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

License

NotificationsYou must be signed in to change notification settings

eracle/OpenOutreach

Repository files navigation

OpenOutreach Logo

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

GitHub starsGitHub forksLicense: GPLv3Open Issues


Demo:

Demo Animation

🚀 What is OpenOutreach?

OpenOutreach is aself-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 astealthy, human-like way:

  • Discovers and enriches target profiles
  • Qualifies and ranks profiles using online Bayesian active learning (BALD acquisition + entropy-gated auto-decisions)
  • 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 automationwithout account bans or subscription lock-in.


⚡ Quick Start (Docker — Recommended)

The fastest way to get started. Pre-built images are published to GitHub Container Registry on every push tomaster.

docker run --pull always -it -p 5900:5900 -v openoutreach_data:/app/assets ghcr.io/eracle/openoutreach:latest

The interactive onboarding will prompt you for LinkedIn credentials, LLM API key, and campaign details on first run. Your data persists in theopenoutreach_data Docker volume across restarts.

Connect a VNC client tolocalhost:5900 to watch the browser live.

For Docker Compose, build-from-source, and more options see theDocker 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.gitcd OpenOutreach# Install deps, Playwright browsers, run migrations, and bootstrap CRMmake 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 servermake admin

Then open:


✨ Features

FeatureDescription
🤖Advanced Browser AutomationPowered by Playwright with stealth plugins for human-like, undetectable interactions.
🛡️Reliable Data ScrapingUses LinkedIn's internal Voyager API for accurate, structured profile data (no fragile HTML parsing).
🐍Python-Native CampaignsWrite flexible, powerful automation sequences directly in Python.
🧠ML-Driven QualificationGaussian Process Classifier with BALD active learning qualifies and ranks profiles -- lazily re-fitted on all accumulated labels when predictions are needed.
🔄Stateful Workflow EngineTracks profile states (DISCOVEREDENRICHEDQUALIFIEDPENDINGCONNECTEDCOMPLETED) in a local DB -- resumable at any time.
⏱️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 in your browser.
🐳Containerized SetupOne-command Docker + Make deployment.
🖥️Visual DebuggingReal-time browser view via built-in VNC server (localhost:5900).
✍️AI-Ready TemplatingJinja 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:

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

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 afree 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) priority-schedules five action lanes:

LaneWhat it doesRate limited?
ConnectRanks QUALIFIED profiles by GPC posterior probability, sends connection requestsDaily + weekly limits
Check PendingChecks if PENDING requests were acceptedExponential backoff
Follow UpSends personalized messages to CONNECTED profilesDaily limit
EnrichScrapes DISCOVERED profiles via LinkedIn's Voyager API, computes embeddingsGap-filling
QualifyQualifies ENRICHED profiles via Bayesian active learning (BALD selects, entropy gates LLM calls)Gap-filling
SearchDiscovers new profiles via LLM-generated LinkedIn People search keywordsLowest-priority gap-filler

Profile states:DISCOVEREDENRICHEDQUALIFIEDPENDINGCONNECTEDCOMPLETED (orFAILED /IGNORED /DISQUALIFIED)

Pre-existing connections (already connected before automation) are automatically set toIGNORED during enrichment. Ifconnection_degree was unknown at scrape time, they're caught during the connect step. Profiles rejected by the qualification pipeline are set toDISQUALIFIED.

Configure rate limits, timing, and behavior in thecampaign: section ofaccounts.secrets.yaml.


📂 Project Structure

├── analytics/                       # dbt project (DuckDB analytics, ML training sets)│   ├── models/staging/              # Staging views (stg_leads, stg_deals, stg_stages)│   └── models/marts/                # ML training set (ml_connection_accepted)├── assets/│   ├── accounts.secrets.yaml        # Credentials + campaign + LLM config (gitignored)│   ├── inputs/                      # Optional input files│   ├── campaign/                    # Onboarding files (product_docs.txt, campaign_objective.txt)│   └── data/                        # crm.db (SQLite), analytics.duckdb (embeddings + analytics)├── docs/│   ├── architecture.md              # System architecture│   ├── configuration.md             # Configuration reference│   ├── docker.md                    # Docker setup guide│   ├── templating.md                # Message template guide│   └── testing.md                   # Testing strategy├── linkedin/│   ├── actions/                     # Browser actions (connect, message, scrape)│   ├── api/                         # Voyager API client + parser│   ├── conf.py                      # Configuration loading (secrets YAML + env vars)│   ├── daemon.py                    # Main daemon loop (priority-scheduled 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, qualify, connect, check_pending, follow_up, search)│   ├── management/setup_crm.py      # Idempotent CRM bootstrap (Dept, Stages, Users)│   ├── ml/                          # Bayesian qualifier, DuckDB embeddings, profile text, search keywords│   ├── navigation/                  # Login, throttling, browser utilities, enums│   ├── onboarding.py                # Interactive onboarding (product docs + campaign objective)│   ├── gdpr.py                      # GDPR location detection for newsletter│   ├── rate_limiter.py              # Daily/weekly rate limiting│   ├── sessions/                    # Session management (AccountSession)│   └── templates/                   # Message rendering (Jinja2 / AI-prompt)├── manage.py                         # Entry point (no args = daemon, or Django commands)├── local.yml                        # Docker Compose└── Makefile                         # Shortcuts (setup, run, admin, analytics, test)

📚 Documentation


💬 Community

Join for support and discussions:
Telegram Group


⚖️ License

GNU GPLv3 — seeLICENCE.md


📜 Legal Notice

Not affiliated with LinkedIn.

By using this software you accept theLegal 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.


Made with ❤️

Releases

No releases published

Sponsor this project

 

Packages

 
 
 

Contributors6

Languages


[8]ページ先頭

©2009-2026 Movatter.jp