How eracle/openoutfind works
OpenOutFind is a self-hosted CLI that turns a product description and campaign objective into qualified B2B leads, with a written fit reason, then exports them as CSV or JSON Lines. The documented run spans ICP setup, licensed-source discovery, LLM qualification, confidence-gated optional email lookup, and export; CRM records retain leads and verdicts across runs. The README documents the workflow and capabilities; sampled source confirms key provider, model, selection, and state responsibilities, but not all orchestration call sites.
Main entry points: job.py Run orchestration · lead.py CRM records · qualify.py Lead qualification · lookup.py Email lookup
Components 22
Campaign run
- Find command
openoutfind/core/management/commands/find.py - Run orchestration
openoutfind/core/job.py - Campaign config
openoutfind/core/config.py
Discovery and qualification
- ICP generation
openoutfind/core/pipeline/icp.py - Lead discovery
openoutfind/discovery.py - Query exploration
openoutfind/core/pipeline/discover.py - Query selection
openoutfind/core/pipeline/select.py - Keyword vocabulary
openoutfind/core/pipeline/vocabulary.py - Lead qualification
openoutfind/core/pipeline/qualify.py - LLM qualifier
openoutfind/core/ml/qualifier.py - Profile embeddings
openoutfind/core/ml/embeddings.py - Lookup readiness
openoutfind/core/pipeline/ready_pool.py
Campaign records
- CRM records
openoutfind/crm/models/lead.py - Deal state
openoutfind/core/db/deals.py
External services and output
- Email lookup
openoutfind/enrichment/lookup.py - Paid email provider
openoutfind/enrichment/bettercontact.py - Contact hub
openoutfind/contacts/service.py - BetterContact Lead Finder
- LLM service
openoutfind/core/llm.py - Lead export
openoutfind/core/export.py
Other components
- Campaign operator
- CSV or JSONL consumer
Connections 27
- Campaign operator → Find command: requests leads
- Find command → Campaign config: loads settings
- Find command → Run orchestration: starts run
- Run orchestration → ICP generation: prepares ICP
- ICP generation → LLM service: generates profile
- Run orchestration → Query exploration: explores queries
- Query exploration → Query selection: selects queries
- Query selection → Keyword vocabulary: expands keywords
- Query exploration → Lead discovery: requests pages
- Lead discovery → BetterContact Lead Finder: searches profiles
- Lead discovery → CRM records: records leads
- Run orchestration → Lead qualification: qualifies candidates
- Lead qualification → LLM qualifier: judges profiles
- LLM qualifier → LLM service: asks for verdict
- Lead qualification → Profile embeddings: embeds profiles
- Lead qualification → CRM records: stores verdicts
- Lead qualification → Deal state: updates deals
- Query selection → CRM records: reads lead labels
- Lookup readiness → CRM records: reads qualified leads
- Lookup readiness → Deal state: promotes lookup state
- Run orchestration → Email lookup: resolves addresses
- Email lookup → Contact hub: checks cached email
- Email lookup → Paid email provider: submits lookup
- Email lookup → CRM records: stores address
- Run orchestration → Lead export: exports campaign
- Lead export → CRM records: reads lead records
- Lead export → CSV or JSONL consumer: writes rows