← All apps

Built in-house

InboxIQ

Built for

Outreach that converts - personalised at the level of each prospect's website

InboxIQ doesn't send generic emails. It visits each prospect's website, detects real technical issues, and builds a personalised pitch around them - as if you'd written it by hand.

PythonFlaskSMTPPageSpeed APIHetzner
InboxIQ - Dashboard
InboxIQ dashboard

What we built

An outreach engine that thinks before it sends

Before the first email goes out, InboxIQ automatically audits each prospect's website using Google PageSpeed. The issues found - slow load times, mobile errors, missing meta tags - feed directly into the pitch. Every prospect receives an email that speaks to their specific website, not a copy-paste blast.

  • Excel / CSV / PDF list import with deduplication and email validation
  • Automatic audit via Google PageSpeed: mobile, speed, headings, tap targets
  • Variable-field templates - {domain}, {audit_points} auto-filled per contact
  • Account warming: 20 emails/day → 1,000/day over 15 days, without burning the domain
  • Real-time tracking: open rate, clicks, bounces, replies
  • Automatic reply classification: Interested / Not Interested / Neutral
  • Automated follow-ups for contacts who opened but didn't reply
  • Postfix + OpenDKIM server management - auto-provisioned on Hetzner

Campaigns

Launch, monitor, adjust - without staying glued to a screen

Each campaign runs in the background. You choose the sender, sending time, daily volume and interval between emails - InboxIQ handles the rest. You can start, stop or pause at any time. The campaign list shows live status: how many have been sent, how many are queued, how many errored.

InboxIQ - Campaigns
InboxIQ - Campaigns list

Live stats

Know exactly what happened to every email

The campaign dashboard shows in real time: sent, opened, clicked, bounced, replied. Trend charts show how engagement evolved over the life of the campaign. You can drill down to each contact's individual status - sent, opened, clicked, bounced or unsubscribed.

InboxIQ - Campaign detail
InboxIQ - Campaign statistics

Contacts

Clean lists with audit profiles attached

Every contact carries the PageSpeed audit of their website - the issues detected are saved per contact and automatically injected into the pitch email. Import accepts XLSX, XLS, PDF and CSV, with automatic column detection and MX validation before any send.

InboxIQ - Contact list
InboxIQ - Contact list with audit profiles

Per-contact status

Every prospect tracked individually

See the detailed status of each contact: when they received the email, whether they opened it, whether they clicked any links, whether they replied or requested an unsubscribe. Filter the list by any parameter and export for further analysis.

InboxIQ - Contacts
InboxIQ - Contact view

Reply inbox

Replies classified automatically - you choose who to call

When a prospect replies, InboxIQ reads the message and classifies it automatically: Interested, Not Interested or Neutral. No more reading through hundreds of replies - filter for the high-potential ones and jump straight into the conversation.

InboxIQ - Reply inbox
InboxIQ - Classified reply inbox

Templates

Write once, personalise automatically for thousands of prospects

Templates support variable fields: {domain}, {city}, {audit_points} and any other column from the contact list. At send time, InboxIQ fills each field with the prospect's specific data and automatically injects the issues found on their site - the result reads like a hand-crafted email.

InboxIQ - Email templates
InboxIQ - Email templates

Why it matters

The concrete advantages of this approach

Real personalisation

Every prospect sees the issues specific to their own website in the email. Not a generic pitch - a real audit, presented as if you'd analysed it manually. Reply rates climb significantly versus mass blasts.

Clean deliverability

Progressive account warming, suppression lists for unsubscribes and bounced addresses, SMTP account rotation and dedicated IPs on Hetzner - emails land in the inbox, not spam.

Fully automated

Site auditing, campaign sending, bounce checking and reply classification all run in the background without manual intervention. Start the campaign and the system works on its own.

Intelligent prioritisation

Automatic reply classification (Interested / Not Interested / Neutral) shows you immediately who to contact. No more spending hours reading hundreds of replies - focus on the real prospects.

Tech stack

Built pragmatically, without unnecessary dependencies

Backend

  • Python 3.11
  • Flask 3.0
  • Flask-SQLAlchemy 3.1
  • APScheduler 3.10
  • Werkzeug + Jinja2
  • Paramiko (SSH)
  • dnspython (MX validation)

Database

  • SQLite (local)
  • 13 core tables
  • Full per-send tracking
  • Suppression list
  • Campaign replies log
  • Warming days planner

Email

  • Multi-account SMTP
  • IMAP polling (bounce + reply)
  • Account warming 20→1,000/day
  • Open rate pixel tracking
  • HMAC-SHA256 unsubscribe tokens
  • Rate limiting + per-contact timezone

Integrations

  • Google PageSpeed API
  • Hetzner Cloud API
  • Postfix + OpenDKIM (SSH)
  • openpyxl / xlrd / pdfplumber
  • requests (HTTP client)

Notable architecture

  • Multi-threaded: campaigns, bounce checker and reply checker run in parallel background threads
  • Automated per-contact web audit - PageSpeed detects: mobile viewport, speed, headings, tap targets
  • Account warming with auto-calculated daily plan: 20 → 1,000 emails/day over 15 days
  • Sentiment classification supports Romanian: positive / negative / neutral keyword matching
  • Hetzner provisioner - VPS creation + Postfix + OpenDKIM setup via SSH, fully automated
  • No Node.js, no build system - pure Python, local SQLite, Flask interface served directly

Actively used in-house for Graphic Beast's outreach campaigns - pitches for web redesign, IT services and free-site offers, in Romanian and English.

Want something similar for your business?

Let's talk →