An always-on system, not a tool

Every morning, your queue is already built.

The Sales OS runs 24/7 across 30+ specialised modules — finding deals, scoring intent, coaching after every call, and assembling a prioritised task list for each manager before the work day starts.

30+
automated modules running daily
9
harvesters scanning for opportunities
85
target dials per rep per day
~700
tasks generated system-wide each day
What it does

Three jobs, run continuously.

The Sales OS replaces the 3-hour Monday morning ritual of "what should I work on this week?" with a personal queue waiting in HubSpot, ranked, scored, and timed.

1

Find the work

9 harvesters scan HubSpot, Aircall, Demodesk, jobboards, and trigger feeds for signals: champion job changes, stale-deal coverage gaps, hiring-funnel breaks, win-probability drops, untouched HIGH leads. Every signal becomes a candidate task.

2

Score and rank

Priority engine fuses ICP fit, deal size, recency, win-probability, peak-hour timing, and rep-feedback multipliers into a single 0–400 score. Top tasks float, low-quality gets dropped at the quality floor.

3

Land in HubSpot

Tasks land on each rep's HubSpot workspace by 08:30 CET — 85 targeted dials plus follow-up emails and reviews, time-stamped to peak connect windows learned from 12 weeks of Aircall history.

Daily rhythm

A 24-hour loop, not a workflow.

While you sleep, the system enriches yesterday's calls, refreshes intent signals, scores new pipeline, and stages tomorrow's queue. By the time you open HubSpot, the work has already been chosen for you.

02:00
Aircall sync
Refresh peak-hour timing data
06:30
Feedback recompute
Per-team multipliers refreshed
08:30
Queue build
Today's tasks in your HubSpot
09:00
Rollover escalator
Yesterday's misses promoted
every 5 min
Aircall follow-up
Drafts emails after each call
16:00
Untouched-HIGH nudge
Slack reminder before EOD
22:00
Pre-call briefs
Tomorrow's demo prep
Architecture

Data in, prioritised actions out.

Every task lands in HubSpot the same way: pulled from a source, scored by the priority engine, gated through quality + capacity, and pushed to the rep's workspace.

Sources
HubSpot deals + contacts open pipeline
Aircall calls, tags, transcripts
Demodesk meeting recordings
Jobboard prod DB apply-funnel signals
Career fairs · Job monitors
BA Statistik · Apollo
Harvesters
9 task signals auto-discovered
coaching_followup
hubspot_deal
win_prob_drop
unworked_contact
funnel_break · multi_thread
pipeline_coverage · champion_change · hiring_pain
Intelligence
Priority engine 0–400 score
ICP scorer · DACH trust
Timing optimizer peak-hour boost
Per-team feedback multipliers
Win-probability model
Stage-gate enforcer
Output
HubSpot task workspace per rep, per day
Pre-drafted Aircall follow-ups
Demo follow-up plans
Coaching narratives weekly Slack
Deal-health alerts
Forecast Slack reports
Module catalog

Every job has its own specialist.

The Sales OS isn't a monolith — it's a collection of single-purpose modules, each owning one stage of the funnel. New behaviour is added by writing a new module, not by changing existing ones.

HARVEST
coaching_followup

Acts on every coached call

Reads call-scoring outputs and emits a follow-up task per call where the next-step is unclear or the rep missed a qualification dimension.

HARVEST
hubspot_deal

Every open deal, every day

Pulls all open deals owned by each rep and emits one prioritised task each — push to close, follow up on proposal, or schedule next meeting.

HARVEST
win_prob_drop

Catches deals losing momentum

Flags deals whose win-probability dropped >15 points in the last 7 days. Often the earliest signal that a deal is slipping.

HARVEST
funnel_break

Hiring-funnel pain detector

Uses jobboard apply-completion data to spot companies losing 75 %+ of candidates after the redirect. High-intent outreach ammunition.

HARVEST
multi_thread

Single-threaded deal alarm

Spots large deals where only one contact is engaged and prompts a multi-threading conversation with a second stakeholder before close.

HARVEST
champion_change

Champion job-move tracker

Detects past closed-won contacts who moved companies. The new employer is one of the highest-converting outbound signals in B2B.

BRAIN
priority_engine

The single ranker

Every candidate task — regardless of source — passes through one scorer. ICP fit + deal size + recency + timing boost + feedback = a 0–400 score.

BRAIN
timing_optimizer

Peak-connect-hour learner

Aggregates 12 weeks of Aircall outcomes per rep × hour-of-day. Boosts tasks scheduled during your peak pickup windows by up to 15 points.

BRAIN
per_team_feedback

Reps train the queue

Every dismissed task with a "🚫 bad lead" Slack reaction down-weights similar leads next time. The system learns what your team actually closes.

GATE
stage_gate_enforcer

Catches sloppy stage transitions

Nightly QA pass. If a deal advances to Negotiation without MEDDPICC fields, the rep gets an alert task before the next sync.

GATE
queue_safeguards

Smart enough to take a holiday

German public holidays, OOO reps, weekends, and meeting-heavy days all reduce the queue automatically. No queue-bombing on Pfingstmontag.

GATE
rollover_escalator

Misses don't disappear

Yesterday's untouched HIGH tasks are promoted with +10 priority pts and re-assigned at 09:00, with a manager nudge if it slips a third day.

REPORT
aircall-followup

Email drafts, ready to send

Every 5 minutes, watches for tagged Aircall calls and pre-writes a personalised German follow-up email. One click in HubSpot to send.

REPORT
demodesk_brief_enricher

Pre-call briefs auto-generated

22:15 nightly, pulls Demodesk transcripts of recent meetings and writes a 3-sentence prep card for each scheduled demo tomorrow.

REPORT
rep_cohort_weekly

Monday Slack scorecard

Per-rep weekly view: dial volume, connect rate, meetings booked, deal velocity. Manager sees the team in 30 seconds.

REPORT
subject_ab_logger

Email subject A/B tracking

Logs which email subjects are getting opens vs. ignored. Patterns surface back into b2b-outreach-sequences for the next round.

Live snapshot · today

What the system delivered today.

Pulled live from the production queue at the most recent build. The system aims for 85 dials per rep — green = on target, blue = working, red = supply-short.

Tasks delivered per rep

Today's queue · target = 85 dials/day · vertical line shows target

At or above target 20–84 (working) Below 20 (supply-short)

Where today's tasks came from

7-day source mix · all 9 harvesters + manual sources

The supply leak

Where tasks die between harvest and HubSpot · today's queue build · top 10 by volume

SourceReason droppedTasks/day

Tasks by type

7-day mix across all reps

The fix that unlocks ~10 more tasks per rep per day

Fixing one harvester recovers 180+ tasks/day.

Of 423 tasks dropped at HubSpot push today, 169 came from a single source — coaching_followup — with mismatched rep-to-owner mappings. One reconciliation job restores those 180 tasks/day directly to the short-supply reps who need them most. That's how the 85-dial floor becomes real for everyone, not just the top six.

Shipped 2026-04-24

Last week in production.

Four targeted fixes deployed live. Each is independently rollback-able, fully backed up, and visible in tomorrow's logs.

cockpit/timing_optimizer.py · 3 bugs

Aircall pipeline restored

Fixed wrong import path, wrong API method name, and case-sensitive rep name match. The peak-hour timing signal now updates nightly instead of using stale aggregates.

cron · 15 2 * * *

Nightly timing refresh

New cron entry runs the timing optimizer at 02:15 every morning. Yesterday's call data is reflected in today's queue prioritisation.

cockpit/hubspot_tasks.py · +25 lines

Drop visibility, by source

New log line on every queue build: Drop breakdown (source/reason=count): coaching_followup/wrong_owner=169, … — making the supply leak diagnosable for the first time.

ampelsystem/hubspot_client.py · request cache

HubSpot rate-limit thrash killed

Request-scoped cache on /search endpoints. ~70 % fewer 429-rate-limit retries. Queue builds finish faster and more reliably across all 9 harvesters.