finds.dev← search

// the find

eracle/OpenOutreach

★ 2,089 · Python · NOASSERTION · updated Jun 2026

Linkedin Automation Tool: Describe your product. Define your target market. The AI finds the leads for you.

OpenOutreach is a self-hosted LinkedIn automation tool that skips the contact-list step entirely — you describe your product and target market, and it generates search queries, scrapes profiles, and uses a Gaussian Process model with Bayesian active learning to decide which profiles to qualify via LLM before auto-sending connection requests and managing follow-up conversations. It's aimed at founders and small sales teams who want programmatic outreach without paying for tools like Dux-Soup or Expandi.

The Bayesian active learning loop is the genuinely interesting part: using a GP regressor on FastEmbed vectors to balance explore/exploit when selecting which profile to send to the LLM for qualification is a real idea, not just 'AI' window dressing. The linkedin-agent-cli split — publishing the browser automation layer as a standalone pip package with stable JSON output and stderr error types — is a clean design decision that makes the LinkedIn layer actually composable. Docker setup with noVNC so you can watch the browser live is a smart debugging affordance for automation that's inherently visual. The stateful task pipeline (QUALIFIED → READY_TO_CONNECT → PENDING → CONNECTED → COMPLETED) with full resumability means a crash or restart doesn't lose work mid-campaign.

LinkedIn ToS violation is load-bearing to the entire product, and LinkedIn actively detects and bans automation — 'playwright-stealth' slows detection, it doesn't prevent it. The legal notice even acknowledges this risk, which means you're building a campaign on an account you can afford to lose. The ML pipeline trains on its own LLM classification decisions, so if the LLM qualifier has systematic bias (which LLMs do), the GP learns to replicate that bias with increasing confidence — there's no ground-truth signal unless a human labels outcomes. SQLite as the default database is fine for a single-user local tool, but the schema (13+ migrations) shows real complexity that SQLite will start to hurt at a few thousand profiles. The follow-up agent managing multi-turn LinkedIn conversations autonomously is where things go wrong in practice: there's no mention of tone guardrails, escalation paths, or human review before the agent replies — a hallucinated or off-brand message goes out immediately.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →