REVENUE LEAK INTELLIGENCE

Find the revenue your business is quietly losing.

Loupe analyzes the records you already have — from leads and quotes to invoices and payments — to find revenue leaks, prove the dollars at stake, and show exactly what to fix.

Example · demo records · your figures come from your own exports

Data · the exports you already have

  1. CRMleads
  2. Quotessent
  3. Jobsbooked
  4. Invoicesraised
  5. Paymentscollected

Reporting that stops at booked never sees what was raised or collected. Loupe reads to the end of the trail.

Where the money leaves

$21,700/mo

Inbound leads waiting over an hour for a first reply — found by joining the call log to the leads it never got answered from.

Every business has a few of these, and none of them are anyone’s fault: an enquiry that waited a day too long, a quote that never got a second call, a good customer who simply drifted. Your own records already know. We read them, put a number on each one, and show you the arithmetic so you can check our work.

For B2B and service companies of any size. Nothing to install, nothing to migrate, and nothing about the way you already work has to change.

The free check gives you an estimate from three numbers you already know. A full diagnostic replaces every estimate with a figure from your own records.

Trust and security

You are about to hand us your customer records. This is what happens to them.

No seals, no badges, no assurance that we follow industry standard practice. 8 plain answers about where your rows go, who can reach them, and how to get them back out — each describing what the product does today.

  • 1way in — a file you export and upload
  • 2factors on every password sign-in
  • 0of your rows in anyone else's benchmark
What comes in

There is nothing to connect.

You export CSV or Excel from the tools you already run, and upload the files. Today that is the only path your records take into Loupe: no login to your CRM, no key to your accounting system, no background job reaching into anything, and nothing pointing the other way — Loupe reads, and has no ability to write back. Live connectors were descoped on purpose. You do not need another integration.

CheckOne import endpoint, and no scheduled sync of any kind.

What is actually stored

The columns you mapped. Not your file.

Import shows you a preview and asks you to map your columns onto the fields a detector needs. Only those fields are written — every other column in that spreadsheet is dropped at the door, and the file itself is never kept, only its name. When you re-upload a record type the newest file is the one your reports use, and earlier uploads are kept until replaced or pruned so your numbers stay explainable. We do not state a retention period here, because there is no prune enforced in code yet and a period we do not enforce would be a worse claim than none.

CheckThere is no file store attached to this product — no bucket, no object storage.

In transit, and at rest

TLS you cannot opt out of.

Every request is HTTPS, and the domain is HSTS-preloaded for two years, so a browser refuses to talk to it in plaintext at all. At rest your rows sit in Cloudflare D1 and are encrypted by the platform. We do not add a second, application-level encryption layer over your records — we would rather write that down than let a padlock icon imply it.

CheckStrict-Transport-Security: max-age=63072000; includeSubDomains; preload

One workspace, one wall

Your workspace id is inside the query, never a filter after it.

D1 is SQLite and has no row-level policies, so isolation lives in application code — which means one forgotten clause would be enough. Because that is true, it is pinned by a test that reads every prepared statement in the codebase and fails any that touches a workspace-scoped table without constraining by workspace, then seeds two workspaces into a real database and proves nothing crosses. Nothing is pooled either: you are measured against your own history, never against other companies.

Checksrc/lib/tenant-isolation.test.ts

Who can open it

Two factors on the door, four roles behind it.

A password never opens an account on its own — every password sign-in also needs a six-digit code emailed to the address on file, and an unverified address gets the verification screen instead of the product. Inside a workspace, four roles decide what each person may do; the table fails closed on a role it does not recognise, and nobody can grant a role above their own. There is no support-impersonation route and no staff view of your findings. Direct database access exists, as it does at every hosted company, and it is limited to named people — we would rather say that than imply a barrier the code does not have.

Checksrc/lib/auth/rbac.ts — a capability table, not a role check at each call site.

What gets written down

That something happened. Never what was in it.

Sign-ins, role changes, invitations, imports and deletions are recorded as an event name and an account id. No record contents, no email addresses, and never a whole IP — addresses are truncated to a /24 before they are stored. Rows are pruned after 365 days. One honest limit: that trail is not yet readable from inside the portal, so today you would have to ask us for it.

Checksrc/lib/audit/log.ts — the fields it refuses to accept are listed at the top.

What the AI sees

No model sees your records.

Every figure is computed by deterministic software from your own rows — run it twice on the same records and you get the same answer, which is what makes the arithmetic something we can show you. Nothing about your business is sent to a model provider, because there is no such call anywhere in the product.

CheckNo model provider SDK, endpoint or binding exists in the codebase.

Leaving

One button, one transaction.

Deleting your account runs as a single database transaction: all of it goes, or none of it does. If you were the last person in the workspace it takes the workspace with it — imports, finding state, invitations, audit rows and rate-limit counters. You type the words to confirm, and the screen tells you how many imports are about to disappear before you do.

Checksrc/app/api/account/route.ts — the delete is one db.batch(), which D1 commits atomically.

What we do not claim. We hold no SOC 2 report and no ISO certificate, and there is no badge on this page pretending otherwise. A SOC 2 Type II audit is on the roadmap; when it is done you will be able to read the report rather than look at the logo. Backups, incident response and the platform-by-platform detail are on the security page.

What Loupe does

Five exports go in. A ranked list of what to chase comes out.

  • What you send

    Leads, quotes, jobs, invoices, calls — five exports from the tools you already use. Nothing to install, nothing plugged into your systems.

  • What we do with it

    Every row gets read. The ones that stopped moving — the enquiry nobody called back, the quote gone quiet, the invoice still unpaid — get set aside and costed.

  • What you get back

    One list, biggest number first, with the arithmetic printed beside each line. If we can't show you the working, it doesn't go on the list.

38 of 119 open quotes past 30 days

38 × $3,420 × 0.34 × 0.38 = $16,500/mo

One finding from the sample report, computed from 1,832 demo records. Yours are computed the same way from your own rows — and every figure traces back to a record you sent us.
What we read

We open the stack
and read every row.

Your records already hold the answer. We open the stack, read every row, and set aside the ones that stopped moving — with the arithmetic beside each so you can check it.

  • Five exports are read: leads, quotes, jobs, invoices and calls.
  • Rows that stopped moving are set aside — for example three quotes sent with no follow-up for 34, 41 and 52 days.
  • Each one is costed from your own records, with the arithmetic shown.
Oldest lead waiting on a call back2h 47m 00s
#1 · Leads wait 2h 47m for a first call back
~$22K
at stake / mo
#2 · 31 quotes older than two weeks, never chased
~$16K
at stake / mo
#3 · Customers who stopped calling and nobody noticed
~$13K
at stake / mo
164 slow leads × 29 pt booking gap × 93% completion × $1,399 avg ticket × 35% recoverable = ~$21,700/mo

Every finding opens to its own arithmetic, and every term opens to the records behind it. Software does the calculation; AI only explains it.

Fix: 5-minute callback SLAOwner: Sales leadDue: Fri
Recovered, measured
+$18.4K/mo
Found since January
$64.2K
Instant lead routing + 5-min reply+$11,200/mo
Weekend answering cover+$4,300/mo
Quote follow-up sequence+$2,900/mo
CRM export240 leads · 120 quotes
Imported
Accounting export148 invoices
Imported
Job records136 jobs
Imported
Call logOptional
Not yet

Example report · demo data. Every figure in your own report is computed from the records you upload, with the arithmetic shown line by line.

Example report

This is what one finding looks like, opened up.

Every finding carries the same chain: the leak, the evidence, the arithmetic, the rows it was computed from, the fix, its owner and deadline, and what actually came back. Open one and read it end to end — nothing here is a screenshot.

Example · demo records · your figures come from your own exports

Critical

Leads wait 2h 47m for a first call back

$21,700/mo

Evidence

Median first response rose from 12 minutes to 2h 47m after the front-desk change in May. Leads left waiting over an hour book materially worse than leads answered inside five minutes — 41 a week land on the slow path.

Read from Jobber · CallRail

Calculation

  1. Leads on the slow path (over 60 min), monthly164running total 164
  2. Booking-rate gap, measured in your own leads× 29 ptsrunning total 47.6
  3. Close-to-complete rate× 93%running total 44.3
  4. Average ticket, paid-channel jobs× $1,399running total $61,900
  5. Realization — the share we believe you can recover× 35%running total $21,700

Estimated monthly revenue at stake~$21,700/mo

The records behind it

TimeCallerSourceWaited
Jul 17, 2:14 PM(720) 555-0142Google LSA3h 12m
Jul 17, 11:03 AM(303) 555-0188Website form4h 40m
Jul 16, 4:51 PM(720) 555-0117Google Search18h 09m
Jul 16, 9:22 AM(303) 555-0075Google LSA2h 02m
Jul 15, 3:38 PM(720) 555-0093Meta5h 51m

164 slow-path leads this month · showing the latest 5

Recommended fix

Instant lead routing to the on-call tech, plus a five-minute response SLA.

Owner
Dana R. · Front office
Due
Jul 24
Status
In progress

Measured recovery

Nothing yet — this fix is still in progress, so there is no measured recovery to print. The line fills in only when a later export moves the median. One fix has landed in this same example: a weekend answering service, measured at +$4,300/mo since Jun 8.

Example · demo records · your figures come from your own exports

The math

One finding, taken apart to the last multiplication.

Every figure in a Loupe report is a chain of multiplications you can run yourself. Here is the biggest leak in the demo report, one rung at a time, with the running subtotal beside each step. Open a rung to see which records it came from — and where a number is a judgement rather than a measurement, it says so there.

In the product this finding lists all 164 leads — time, caller, source, and how long each one waited. That table sits behind sign-in. There is no public records view, so this page shows you the arithmetic rather than staging a drill-down that is not here.

Leads wait too long for a first call back

Example · demo records · your figures come from your own exports

Source exports: Jobber · CallRail

Estimated monthly revenue at stake

$21,700 per month

Rounded for display. The arithmetic itself runs unrounded:

164 × 0.29 × 0.93 × 1,399 × 0.35 = $21,657.61

Finding totals are stated to the nearest hundred, which is where $21,700 comes from.

What we look for

Eight ways revenue leaks. Each one leaves a fingerprint in your records.

A leak is only worth naming if something in your exports gives it away. Here is what gives each one away, what the detector reads, and — for the four that ship today — the point at which it refuses to put a number on it.

Computed and ranked in your report today4

Slow lead responseA lead row whose first contact stamp lands more than 60 minutes after the enquiry arrived — against the ones answered inside 5 minutes.In the engine

Reads

leads · jobs

The arithmetic

slow leads / month × (fast booking rate − slow booking rate) × average completed-job value × completion rate

It declines when

Fewer than 30 leads in either the fast or the slow bucket, or the export carries dates without clock times — 90% of stamps at midnight means the file cannot answer this question, so it is not asked.

Example finding$21,700/moLeads waiting too long for follow-upExample · demo records · your figures come from your own exports

The five-minute rule, measured on your own leads
Unfollowed quotesA quote still marked sent 30 days on — never accepted, never declined, never expired.In the engine

Reads

quotes

The arithmetic

value sitting in stale quotes / month × the close rate you already achieve on quotes that did resolve

It declines when

Fewer than 20 aged quotes that reached a decision, so there is no close rate to price the pile against — or fewer than 5 stale ones, which is a forgotten job rather than a pattern.

Quotes that age, and the close rate underneath
Silent churnA repeat customer quiet longer than three-quarters of their own history says they should be.In the engine

Reads

jobs · leads

The arithmetic

(customers past their return window × late-return rate × average repeat-job value) ÷ typical return cycle in months

It declines when

Fewer than 20 repeat gaps observed in your history, because a percentile of a handful of gaps is arithmetic dressed as a measurement — or fewer than 10 customers currently overdue.

The repeat cadence you already have
Uncollected invoicesAn invoice issued 45 days ago with no payment recorded against it.In the engine

Reads

invoices

The arithmetic

overdue value / month × the share of long-settled invoices that were never collected at all

It declines when

Fewer than 20 invoices old enough to have settled — the never-collected rate is measured only past 120 days, because a recent unpaid invoice is late, not lost.

Late is not lost: reading your receivables

Named here, not built yet4

Missed callsCall logs with no matching lead created within 24 hours — and the after-hours block where that happens most.Not built yet

Reads

calls · leads

The arithmetic

No figure today. The pattern is real and the exports are already imported — the detector that prices it is not written, so Loupe says nothing rather than estimating.

Marketing wasteSpend against a campaign whose leads never reach a completed, invoiced job.Not built yet

Reads

ad exports · leads · jobs · invoices

The arithmetic

No figure today. The pattern is real and the exports are already imported — the detector that prices it is not written, so Loupe says nothing rather than estimating.

Low conversionQuote-to-job rates that split apart by source, by who sent them, or by the hour they went out.Not built yet

Reads

quotes · jobs

The arithmetic

No figure today. The pattern is real and the exports are already imported — the detector that prices it is not written, so Loupe says nothing rather than estimating.

Operational bottlenecksBooked and completed drifting apart week over week, with the backlog aging behind it.Not built yet

Reads

jobs

The arithmetic

No figure today. The pattern is real and the exports are already imported — the detector that prices it is not written, so Loupe says nothing rather than estimating.

The four below the line are on the list, not in the product. They are printed anyway because a page that quietly implies eight working detectors is the same page that would quietly imply a number.

Measured recovery

Anyone can name a leak. This is what the fix actually returned.

A projection is where every other tool stops. Once a fix ships, the same exports that found the leak measure what came back — against a starting number agreed in writing on day one, which never moves afterwards. Here is one leak, all the way through.

Leads waiting too long for follow-up

Monthly rate
  • At stake projected$21,700 per month
  • Recovered measured+$18,400 per month
  • Still open projected$3,300 per month

$21,700/mo at stake − $18,400/mo recovered = $3,300/mo still open · 85% of the projected opportunity, measured

Since the fix shipped

Different unit · running total

$64,200 total, one-off

Money measured back, added up as it landed.

A running total counts what actually arrived each month, so it is not the monthly figure multiplied by anything — and it is never added to the $18,400/mo beside it. Those are two different units. Their sum would not mean anything, so this page does not have one.

Example · demo records · your figures come from your own exports

Questions

The three we are asked before every engagement.

When does the 10% share actually kick in?

Only when it beats the retainer. Ten percent passes $3,000 once a month's measured money back passes $30,000 — below that, you simply pay the flat $3,000. The share is computed from the exports you send, against starting numbers we agree in writing on day one, and your month is never more than $9,000.

How much of my time does this take?

About an hour to start, then one monthly review call. We handle the setup and monitoring — you just decide which fixes to ship.

Is our data safe with you?

We only read the exports you upload and never touch your systems, encrypted throughout, isolated per client, deleted when you leave. Full detail on the Security page — including which platforms publish a read-only scope and which don't.

The full security pagePricing in full

Who this is for

If any of this sounds like your week, you’re in good company — and there’s money in it.

Loupe reads the records you already keep. It does not care what industry you are in — only that you take enquiries, send proposals, and have customers who come back.

Enquiries arrive faster than anyone can answer them

Some get called back in minutes, some wait until tomorrow, and that is normal in a busy week. What is usually missing is a measure of which is which — and what the difference is worth.

Proposals go out and then go quiet

You know roughly what went out. Harder to know at a glance is how many are still live, how many have quietly gone cold, and what that pile adds up to this month.

Good customers stop calling and nobody notices

Nobody ever tells you they have stopped. They simply go quiet, and the gap tends to show up a year later — which is exactly the kind of thing a record can catch early.

These are the three leaks the free check estimates — and the three a paid diagnostic measures against your own records, to the dollar.

See what you’re
quietly losing.

Free · about 30 seconds · no signup

We'll email you when we can take on your audit — no waitlist games.