Skip to content

How it works

One chain. Eight links. Nothing re-entered.

Each stage hands the next its data. The client invoice and the rep payout cannot disagree because both are derived from the same booking row — not reconciled between two systems.

01Project02List03Reserve04Contact05Book06Outcome07Commission08Invoice
  1. 01ProjectAccount manager

    A client becomes a project

    A client project is the unit everything hangs off: its prospect lists, its products and pricing, its DNC list, its reps and its reporting. Projects can be created by hand or pulled from your own HubSpot — selected pipeline stages sync hourly and arrive as tentative projects, so your commercial pipeline becomes the work your SDRs get rostered onto.

    roster · 4 client projects
    NordkappAMMSLK3 SDRs
    VirtanenAMPN2 SDRs
    SaaristoLK1 SDR
    HämeenMSPNAMLK4 SDRs
  2. 02ListAccount manager

    Lists land clean

    Import a prospect list scoped to that project. Phone numbers normalise to E.164 so deduplication actually works, duplicates collapse on a stable key, rows missing required fields are reported individually rather than as a count, and the client’s DNC list filters records out before any rep sees them. A depletion threshold on the list warns you before a rep spends a week working nothing.

    import · vireo-q4.csv1,240 rows
    Aalto Clinics+358 9 4241 1100
    Medi Nord+358 40 551 2093
    Aalto Clinics+358 9 4241 1100duplicate
    Kuopio Care+358 17 288 400dnc
    Tampere Dental+358 3 315 6600

    E.164

    normalised

    38

    duplicates

    12

    DNC removed

  3. 03ReserveSDR

    A rep opens a lead and it is theirs

    Opening a lead reserves it: an expiring soft lock that pins it to that SDR so a colleague cannot dial the same company at the same time. The expiry matters — a background job releases stale holds, so an abandoned claim does not quietly remove the lead from circulation forever.

    lead · reserved to youexpires 6d

    Nordkapp Oy

    +358 40 123 4567 · Helsinki

    manufacturingrecent hire52 staff
    Call · 4m 12sanswered
    SMS · follow-up sent
    Note · asked for Q1
  4. 04ContactSDR

    Every touch lands on one timeline

    Calls over VoIP, SMS from presets, email and notes all write to a single activity log for that lead, discriminated by channel. Calls can be recorded and transcribed. The timeline streams live over SSE, so a manager watching a client’s list sees the work land rather than reading about it tomorrow.

    activity · Kaira Oystreaming
    1. Call · 4m 12srecorded · transcript ready14:02
    2. Email · deck sentopened twice14:09
    3. SMS · confirmationdelivered14:11
    4. Booked · Thu 10:00HubSpot · Outlook · Slack14:12
  5. 05BookSDR

    A booking is created and distributed

    The meeting syncs two-way to Google Calendar or Outlook, pushes into the client’s own HubSpot or Pipedrive (each client connects their own), and posts to Slack. The invite exists before the rep has hung up, which removes the most embarrassing category of no-show.

    bookings · october47 booked · 38 held
    CompanySDROutcomeValue
    Nordkapp OyAnna M.held€100
    Virtanen GroupMikko S.held€100
    Saaristo TechLiisa K.no-show—
    Hämeen MetalliAnna M.held€100
    Koskinen & CoPekka N.pending€100
  6. 06OutcomeTeam lead

    The outcome decides everything downstream

    Held, no-show, or no-show-with-reschedule — three distinct recorded states, not one "booked" flag. This is the hinge of the whole system: the outcome determines whether the booking is billable, what commission it generates, and what the client is credited. An auto-complete job closes out meetings whose time has passed without a recorded outcome.

    client portal · Nordkapp Oy

    47

    Booked

    38

    Held

    81%

    Show rate

    The client reads the same rows your team does — not a monthly export.

  7. 07CommissionAgency owner

    Commission computes, once

    A completed booking generates exactly one commission row, enforced by a unique database constraint on the booking — so a retried background job or a redelivered queue message cannot double-pay. The row then moves through approve → pay, with reversion available. Cancellations run the compensation matrix instead of a monthly negotiation.

    commission · approve → pay€3,800 pending
    SDRProductStateAmount
    Anna M.Meeting · stdpending€1,400
    Mikko S.Meeting · stdapproved€1,100
    Liisa K.Meeting · entpending€900
    Pekka N.Meeting · stdwithheld€400
    unique per bookingno double-pay
  8. 08InvoiceAgency owner

    The invoice leaves and the client sees it

    Billable bookings roll into a billing record with the price frozen onto it, so a sent invoice stays reproducible after a future price change. The record goes to Procountor and is polled for status. The client sees the same meetings, the same outcomes and the same figures in their own portal — not an export.

    INV-2041 · sent
    Nordkapp Oy€4,200.00
    Meeting · standard38 × €100€3,800
    Meeting · enterprise2 × €250€500
    Credit · no-show1 × −€100−€100

    Price frozen at invoice time — reproducible after a re-price.

Failure modes

How it behaves when things go wrong

Retries, outages, price changes and permissions — the questions an operations lead should ask before trusting a system with the money.

Does the rep have to enter anything twice?
No — that is the design constraint the whole chain exists to satisfy. A booking is created once; the calendar entry, the CRM deal, the Slack message, the commission row and the billing record are all derived from it. The only thing a rep records after the fact is the outcome.
What happens if an integration is down when a booking is created?
The booking still succeeds. Side effects are published as domain events after the database commit, written to a transactional outbox rather than fired at the broker directly — so a crash between the commit and the publish leaves the event pending and a drainer re-publishes it. Consumers are idempotent, tracked by message id, so a redelivery cannot double-handle.
Can we change a price without breaking old invoices?
Yes. The price is copied onto the billing record when it is created rather than looked up live, so a historical invoice reproduces at the price it was actually billed at. Products are archive-only and never deleted, so an old booking always resolves to the product that priced it.
How long does it take to set up one client?
The minimum is a client project, at least one product with a customer price and an SDR commission, a prospect list, and a roster. Integrations are optional per client — a client who does not use HubSpot or Pipedrive simply has no CRM push.
Do our reps see each other’s clients?
That is a permission decision, not a role one. Data scope keys off explicit permissions, so an SDR with no all-access grant sees only the projects they are rostered on. Granting the employee template flips the same person to all-access with no role change.

Book a walkthrough

Put every client on one floor

A walkthrough on your own roster, clients and commission model — from an imported list to a sent invoice. Judged on your operation, not a demo dataset.

EU-hosted · eu-central-1 · integrates the CRM, calendar and telephony you already run