Everything to run your own send.
Multi-engine delivery, your own Ubuntu nodes, Microsoft 365 integration, an AI Leads Enricher, an Email Verifier, live DNS validation, real-time controls, and a configurable database backend — all in a single Windows desktop app. Your infrastructure stays yours; the platform is just where you buy and manage your license.
Pick the engine that fits the campaign.
Built-in MTA
Direct-to-MX delivery from the desktop on port 25 with full DKIM signing and per-domain rate limits. The radio is auto-disabled when port 25 is blocked on the network.
- ▸ Live port-25 probe at startup
- ▸ Per-recipient MX resolution
- ▸ RSA-2048 DKIM signing
- ▸ Bounce + retry classification
Custom SMTP rotation
Pool any SMTP relays you control — provider-supplied or self-hosted — and rotate through them with the strategy that fits your reputation profile.
- ▸ Round-robin · Weighted · LRU · Random
- ▸ Hourly + daily caps per account
- ▸ Outbound proxy (SOCKS5/4/4a, HTTP)
- ▸ Health score — auto-disable failing accounts
Node Delivery
External Ubuntu MTAs running Postfix + OpenDKIM + Redis + PostgreSQL + a Python FastAPI control agent. Provisioned end-to-end over SSH from inside the desktop.
- ▸ One-click SSH install (Ubuntu 20–26)
- ▸ 15s health polling + categorized error feed
- ▸ Per-node hourly + daily limits
- ▸ Postfix queue depth visible in real time
Send through your own Microsoft 365 mailboxes.
Connect Outlook / Microsoft 365 accounts via Microsoft Graph — device-code OAuth or a pasted token bundle. The desktop harvests contacts, classifies them by ESP, and dispatches campaigns through each user's own Mail.Send permission with throttling that matches Microsoft's published limits.
- ▸ Device-code OAuth — no app registration required
- ▸ Token-paste import for harvested sessions
- ▸ Contact harvesting from inbox + sent + folders
- ▸ ESP bucketing (Gmail / Outlook / corporate / etc.)
- ▸ Default 30/min · 8,000/day caps per account
- ▸ Schedule sends to fire while the app is running
Paste emails. Get qualified leads.
Drop a list of email addresses. The desktop fetches each company's website, runs the content through the AI you configured, and emits a CSV with company name, industry, business summary, services, and address. The enriched fields then resolve as merge tags inside any campaign.
Two AI providers, your choice.
Point it at OpenAI (or any OpenAI-compatible endpoint — Together, Groq, Anthropic-via-proxy, your own gateway) when you want frontier quality. Point it at a local Ollama instance when you want zero per-call cost and full data confinement on your own hardware.
- ▸ OpenAI-compatible: custom base URL, custom model, DPAPI-encrypted API key
- ▸ Local LLM via Ollama (default
llama3.1:8b) — runs on your machine - ▸ Configurable temperature, request timeout, and cache TTL
- ▸ Per-domain cache — already-enriched companies never re-hit the LLM
- ▸ Optional global proxy routing for site fetches (off by default for accuracy)
- ▸ One-click "Test connection" — verifies provider, model, and key
Paste emails or load .txt
The enricher dedupes input and groups by company domain so each website is fetched once, no matter how many addresses share it.
Live status, cancel anytime
Provider, model, cache count, current phase, and progress sit in the status strip. Pull the plug mid-run and partial results are kept.
Push into a campaign
"Save as Recipients" or "Use in Campaign" sends the leads — and their enriched fields — straight to the Campaign Builder.
Per-recipient merge tags from enrichment
Once a list is enriched, the standard placeholder set expands. Every campaign sent to those recipients can address them by what their company actually does — not just by their email address.
35-category industry pick-list · website fetch with proxy fallback · result caching · DPAPI-encrypted API key · works offline when paired with a local Ollama model.
Validate every address before you send.
Plug in your own credentials for the deliverability provider you already pay for and the desktop runs each address through it — concurrent, normalised, and streamed straight into a CSV alongside the live grid. The Valid set ships to a Recipients list or directly to the Campaign Builder in one click.
Three providers. Your key, your credit.
Pick the verifier you've already provisioned with your own credit. The desktop normalises every backend's native vocabulary into a single four-bucket verdict so your campaign filters work the same regardless of which API spent the credit.
- ▸ NeverBounce · Debounce.io · MillionVerifier
- ▸ Normalised verdicts: Valid · Risky · Invalid · Unknown
- ▸ Role · disposable · catch-all flags surfaced per row
- ▸ Bounded concurrency (1–50) — never trip a rate limit
- ▸ Streamed CSV — kill mid-run, partial output is recoverable
- ▸ One-click "Test connection" — verifies the key without burning a credit
- ▸ All keys DPAPI-encrypted at rest; inactive providers' keys kept so you can flip back without re-pasting
Paste, load, or push from a sort
The verifier dedupes input automatically and shows a unique-count before you commit. Drop a .txt, paste from clipboard, or send a sorter bucket straight in.
Live counters, cancel anytime
Provider, status, progress, and per-bucket counters (Valid · Risky · Invalid · Unknown) update in real time. Stop and the partial CSV stays on disk.
Ship Valid into a campaign
"Save valid as Recipients" or "Use valid in Campaign" filters to the green-bucket addresses and pushes them into the Campaign Builder.
Per-request timeout · optional global proxy · streamed CSV with role/disposable/catch-all columns · credentials probe never burns a verification credit.
Live DNS validation. Per record. Per domain.
Every sending domain you attach to a node gets the full validation chain — A, MX, SPF, DKIM, rDNS — checked against public resolvers and rendered as colored chips. The agent generates the DKIM keypair on the node; the desktop hands you the exact records to publish in your DNS.
- ▸ Auto-generated RSA-2048 DKIM keypair per (selector, domain)
- ▸ Click Verify — chips flip in seconds
- ▸ SPF authorisation check against the node's public IP
- ▸ rDNS / PTR alignment with the registered domain
- ▸ Full DNS record sheet copy-to-clipboard
Real-time control plane.
A live dashboard that aggregates every active engine — Campaign sends, Office B2B, scheduler, node fleet — into a single view.
Live activity feed
Last 200 entries from every subsystem in one stream — color-coded per source.
Pause / Resume
Hit pause on any running campaign or Office send straight from the dashboard. State survives the round trip.
Status chips
License · Port 25 · Tracking · Proxy · Nodes — at-a-glance health for every dependency.
System health
Per-subsystem dot grid in the right rail: SMTP rotation, Node delivery, License, Port 25, Tracker, Proxy.
Templates, placeholders, attachments.
Built-in WYSIWYG editor with Visual / HTML toggle. Templates with one-click placeholder insertion. Per-recipient attachment naming. Optional render-as-image for HTML that needs to land pixel-perfect.
- ▸
{{email}}·{{fromname}}·{{rand_string_8}}·{{tracking_url}} - ▸ Placeholder picker side-panel with descriptions
- ▸ Templates shared across Campaign and Office B2B
- ▸ URL pool —
{{url}}picks one at random per recipient
Local SQLite by default. Configurable for what you actually run.
The desktop ships with a single-file SQLite store next to the EXE. Settings → Database lets you point it at MySQL, MariaDB, or PostgreSQL — connection details are tested live with the official driver and DPAPI-wrapped at rest.
- ▸ Local · MySQL · MariaDB · PostgreSQL
- ▸ Live connection probe with version readback
- ▸ SSL-mode pass-through
- ▸ Passwords DPAPI-encrypted (Windows DP API)