Find them first. Reach them right.
Vantarius is a local LinkedIn outreach engine that reads your Excel CRM and runs a structured multi-stage prospecting sequence, powered by a local LLM (Ollama). No API keys. No cloud. Messages written by AI, sent by you (automated).
Part of the Marius Intelligence Suite.
Reads your CRM and, for each lead, runs the right step based on where they are in the sequence:
| Stage | When | Action |
|---|---|---|
| J0 | New lead | Connection request + personalized note |
| J3 | 3 days after J0 | Follow-up DM (context/proof) |
| J7 | 7 days after J0 | Value-add DM |
| J10 | 10 days after J0 | Clean closing message |
Each message is generated by your local LLM using the tension signal from the CRM, then validated (length, tone, CTA) before sending.
- Node.js ≥ 18
- Ollama running locally with at least one model
- A LinkedIn account (login done once via
node setup.js) - An Excel CRM (use AxioMariuS to enrich it first)
# 1. Install dependencies
npm install
# 2. Edit config.yaml (CRM path, model, quotas, message templates)
# 3. Install a model in Ollama
ollama pull gemma3:12b
# 4. Log in to LinkedIn (one-time)
node setup.js# Run full pipeline (all stages, respects quotas)
npm start
# Preview what would happen — nothing is sent
npm run dry-run
# Process only a specific stage
npm run j0 # New leads only
npm run j3 # J+3 follow-ups only
npm run j7 # J+7 follow-ups only
npm run j10 # Closing messages onlyVantarius respects daily quotas, working hours, and deduplication automatically.
Vantarius reads from (and writes back to) your Excel file. Minimum columns:
| Column | Field | Description |
|---|---|---|
| A | Company | Company name |
| B | Stage | Pipeline stage (updated by Vantarius) |
| C | First name | Contact first name |
| G | LinkedIn URL | Profile URL |
| H | Signal | Tension signal (filled by AxioMariuS) |
| I | Date contact | Date J0 was sent |
Exact column positions are configured in config.yaml.
Key settings in config.yaml:
llm:
model: "gemma3:12b"
quality_threshold: 7 # Rewrite if AI scores below this
linkedin:
quota_per_day: 15 # Max invites per day
delay_min: 30000 # 30s minimum between leads
delay_max: 90000 # 90s maximum
working_hours:
start: 9
end: 18
messages: # Base templates — LLM personalizes them
j0: "I spotted friction signals at {COMPANY}..."- Daily quota — configurable cap on invites per day
- Dedup guard — never contacts the same profile twice in a day
- Working hours — no messages outside your configured window
- Dry run — preview everything before sending a single message
- Atomic CRM save — TEMP → BACKUP → RENAME, safe on OneDrive/Dropbox
vantarius/
├── config.yaml ← Edit this
├── setup.js ← LinkedIn login (run once)
├── src/
│ ├── main.js ← Orchestrator
│ ├── llm_polisher.js ← Message generation + validation
│ ├── linkedin_sender.js ← Connection requests + DMs
│ ├── dedup_guard.js ← Daily deduplication
│ ├── crm_writer.js ← Atomic Excel write
│ ├── config_loader.js ← YAML config reader
│ └── logger.js ← Console + file logging
└── .github/workflows/ ← CI
Vantarius and AxioMariuS form a two-stage pipeline:
AxioMariuS → Vantarius
(OSINT) (Outreach)
Enrich CRM Read signal → generate message → send
They share the same CRM format and LinkedIn session directory. They can be used independently or together.
MIT