Platform · the Effort Graph

Every activity labeled, mapped and sized — automatically.

Lumopath reads the tools your team already uses and extracts what was done, for whom, by whom, how long it took, and what it drove. Including what didn't happen.

TICKAcme user migration bugEscalated · partner defect · 4 handoffs26h 10m
CHAT#cs-escalations · 72 repliesCS, Product, Engineering19h 30m
MAILRe: migration timeline11 threads · 2 exec recipients18h 20m
DOCSOnboarding kick-off deckEdited by 2 people8h 00m
CALNo business review heldAbsence — nothing was scheduled142 days
One record The Effort Graph Acme Corp
72 hours · last 9 days
Client
Acme Corp · $610K ARR · renews in 2 quarters
People
3 contributors · CS, Product, Engineering
Work
Reactive escalation — a defect, not coverage
Effort
72 hours across 9 elapsed days
Impact
Renewal at risk — no review in 142 days
Read, not loggedNo process change12 months backfilled on day one

Measured, not assumed

The difference between what was scheduled and what actually got done.

Most signals capture what someone scheduled, logged or was assigned. The Effort Graph looks at the work itself — across every tool, all day — and only then decides what happened and how long it took.

01 · Time

How long did the QBR prep actually take?

Algorithms assign a specific amount of time to each action, based on the work itself.

The usual signal
Calendar"Work on QBR" · 2:00–4:00 pm

A block of time that may or may not have gone to the QBR.

2h assumed
What the Effort Graph sees
9 am12 pm3 pm6 pm
ScheduledEdits to the Acme QBR deck

Three bursts of edits to the deck, mostly outside the block. The algorithm turns the edit stream into active working time.

56m measuredacross 3 sessions, attributed to Acme
02 · Activity

Did the QBR actually happen?

An activity only counts once several independent signals agree.

The usual signal
CRM activityType: QBR · logged by rep

Depends on someone remembering to log it — and logging it the same way every time.

Logged as a QBR
What the Effort Graph sees
  • Calendar — a meeting with the client, 45 minutes
  • Title — "Acme × Lumopath · Q3 Business Review"
  • Transcript — usage review, roadmap and renewal discussed
  • Attendees — the economic buyer and champion were on the call
Classified as a QBRonly once every signal agrees
03 · Capacity

Who actually has room for more?

Capacity comes from each person's full day of activity, not the size of their book.

The usual signal
Book of businessMaya · 24 accountsBook of businessJordan · 24 accounts
Equal capacity assumed
What the Effort Graph sees
Maya36h of 40 used
Jordan22h of 40 used

Same book, very different weeks: Maya's accounts generate constant escalations across email, chat and tickets; Jordan's run smoothly.

4h vs 18h of real headroommeasured across every tool, every week

Under every number

Four stages between raw activity and a number you can defend.

Nobody logs anything — the Effort Graph reads the work itself. Getting from there to a trustworthy number takes four stages of engineering, and each one has to hold up every day, for every team.

01 · Connect

Every tool, kept in sync

Email, chat, calendar, ticketing, CRM, docs and project tools — connected once, then kept current through outages and silent API changes.

  • Incremental sync in each provider's own format, with history backfilled separately so the live feed never stalls
  • Access refreshed before it expires; revoked access flagged before anyone notices a gap
  • Throttling absorbed — one connector retries up to 1,000 times with randomized backoff
  • Every source normalized into one consistent shape
143+tools connected · 12 months backfilled on day one
02 · Resolve

Six IDs, one person

The same person appears under different IDs in every tool. Get this wrong and every number quietly double-counts or misses people.

  • Email aliases across Google and Microsoft directories resolved to one real person
  • Chat IDs matched to people, including fuzzy name matching
  • Joiners and leavers inferred from activity when HR data lags
  • Meeting rooms and shared mailboxes recognized and excluded
Stablethe same identities on every re-run
03 · Interpret

Activity becomes work

"Meeting time" and "focus time" sound simple. Each hides a dozen ways to be wrong.

  • Time assigned from the work itself — a stream of edits, not a calendar block
  • Activities classified from several signals — title, transcript, attendees — before they count
  • Email threads reconstructed across mailboxes — no API provides this — to measure real response times
  • Declined, cancelled and vacation time excluded, against each person's hours and timezone
  • Absences detected — no review in 142 days, no exec contact in 90
Hundredsof hand-curated shift, part-time and weekend schedules
04 · Compute & verify

Numbers that hold

Every KPI is produced by a pipeline that runs in strict order, every day, and is watched while it runs.

  • Hundreds of dependent steps, run in the exact order the math requires
  • Freshness checked every 30 minutes, with alerts on any breach
  • Upstream format changes and duplicate records detected automatically
  • Every metric versioned, so any past number can be reproduced and audited
900+pipeline steps across 439 data models

Four years of engineering

The Effort Graph is a product, not a prompt.

4 yrsof continuous development
11,600+code commits
~165Klines of production code
143+tools connected
900+data-pipeline steps
364database migrations
The Effort Graph · connect, resolve, interpret, compute, verifyThe model · 5%

The AI is the last 5%. It reasons over data that has already been pulled in, cleaned, matched to the right person, de-duplicated, quality-checked and added up. Everything that makes its answer right lives in the graph underneath it.

Consistency by design

Ask the same question twice. Get the same number.

A model calculating on the spot gives a slightly different answer each time — fine for a chat, not for a board deck, a headcount plan or a performance review. So every number in the Effort Graph is computed by the pipeline, stored and versioned. The AI explains it. It never does the math.

Computed
By the pipelineThe same method, in the same order, on every run
Stored
Versioned and auditableAny past number can be reproduced exactly
Explained
By the AIGrounded in the stored number — never recalculated
Hours on Acme · asked Monday312h 40mDEFINITION V14
Hours on Acme · asked Thursday312h 40mDEFINITION V14

Four years of edge cases

The hard part is knowing when a plausible number is wrong.

A failure that throws an error is easy to fix. The ones that matter look fine. Every definition in the Effort Graph has been tuned against real teams until it matched how the work actually felt.

A real correction
7.5h→40m
Time on one account, before and after

Nothing was broken — the raw data honestly looked like seven and a half hours. Then someone who knew the work said "that can't be right." We found the cause, corrected the definition, and checked the same pattern everywhere else it could appear.

A model can read data; it can't tell when the data is wrong. That loop — people who know the work, a definition that changes, history re-applied so numbers still line up — is built into every KPI.

Quiet failures we've caught — and now check for automatically

Looked fine

A one-line timezone default blanked a metric for everyone west of Eastern time, every afternoon — no error, just "—".

Now caught by

Metrics that return nothing are treated as failures, not displayed as empty.

Looked fine

A weekly briefing said a rep owned 191 accounts; the dashboard said 8. Two pieces of code counted differently.

Now caught by

The same metric computed in two places is reconciled on every run.

Looked fine

A sync showed green while millions of updated rows sat behind a stuck checkpoint.

Now caught by

Freshness is measured on the data itself, not on the job's status.

Looked fine

"Meeting time" counted vacation days, because two code paths disagreed on what to exclude.

Now caught by

Exclusion rules are validated identically across every code path.

Trust

Privacy and Security by Construction.

The Effort Graph is designed so your team only ever sees finished, role-scoped metrics.

Role-scoped

Seven tiers of access control, so managers only ever see their own org.

Isolated

Strict per-customer data isolation, enforced in every single query.

Metadata by default

No screen capture, no keystroke tracking, no browsing history and no private messages. Most metrics come from who, when and for which account.

SOC 2 Type II compliant

Independently audited controls, audited admin access and a verified deletion flow.

Read how we handle security →

What it powers

One graph underneath every KPI and every play.

The Effort Graph is the shared record the rest of Lumopath reads from. Because everything draws on the same definitions, the number on the dashboard, the trigger on a play and the answer from an agent always agree.

See your last 12 months, mapped.

A 30-minute review of where your team's effort is going, and what it would take to point it at retention and expansion.