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.

  1. Leads595
  2. Calls411
  3. Quotes415
  4. Jobs237
  5. Invoices318
1,976 records across five exports in the sample report. 3 of the five leaks Loupe looks for can only be seen by comparing two of them — which is why the system that holds either one cannot show you the gap. The two outlined above are one such pair: $23,000/mo of leads wait too long for a first callback, which neither file reports on its own.
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 — three of the five a paid diagnostic prices against your own records, to the dollar.

The problem

Your business has dashboards. Your revenue still leaks between them.

Each system reports its own half of the story accurately. None of them reconciles with the next, and the money goes missing in the space between two systems that are both working correctly.

  1. 01CRM

    Leads, contacts, owners

    Never sees the invoice

  2. 02Calls

    Ring time, who answered

    Never sees the lead it belongs to

  3. 03Quotes

    Value, sent date, status

    Never sees whether it was chased

  4. 04Jobs

    Scheduled, completed

    Never sees what it was quoted at

  5. 05Accounting

    Invoices raised

    Never sees the job it came from

  6. 06Payments

    Collected, outstanding

    Never sees why it was late

Loupe reads them together. Five exports go in — leads, calls, quotes, jobs, invoices — and the leaks worth the most are the ones that only show up when two of them are compared, which is exactly what no single tool you already own can do.

The difference

Everyone else stops at booked. Loupe follows the money.

Your CRM closes the record when the job is won. That is the moment the revenue question actually starts — and it is the last moment most reporting can see.

The five stages of a job, and where conventional reporting stops
StageThe recordThe question it answersRead by
LeadEnquiry arrivesHow long before someone replied?Your CRM · Loupe
QuoteProposal sentWas it ever chased?Your CRM · Loupe
JobWork bookedDid it complete?Your CRM · Loupe
InvoiceMoney asked forWas it raised at the quoted value?Loupe only
PaymentMoney receivedWas it collected, and when?Loupe only

Two stages out of five, and they are the two where the money either arrives or does not. A leak found before the invoice is a guess; a leak found after it is arithmetic.

Measured recovery

A finding is a claim until the money comes back.

Loupe scores its own estimates. Next month's export re-runs the same detectors on the same fields, so the figure moves on evidence rather than on a promise — and the two reports sit side by side. Automatic before-and-after crediting is not built yet: today we compare them with you.

Recovered, measured

+$18,400/mo

Recurring, from 3 completed actions

At stake $61,240/mo5 open findings$64,200 cumulative

2h 47m to first reply

Instant lead routing

Now: 4m

+$11,200

Sat/Sun calls unanswered

Weekend answering coverage

Now: Covered

+$4,300

No second contact

Quote follow-up sequence

Now: Day 3 and day 10

+$2,900

Example · demo records · your figures come from your own exports. The before and after are the same detector run twice on the fields it was computed from, so the two numbers are comparable — the demo carries both because the sample records do; a real workspace shows the later run and the earlier one, not a credited difference.

What we look for

Nine 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 five that ship today — the point at which it refuses to put a number on it.

Computed and ranked in your report today5

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$23,000/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
AI-booked job auditA job your AI receptionist booked, followed to the cash — booked, completed, invoiced, paid — against the same trail for the jobs your own team booked.In the engine

Reads

jobs · invoices

The arithmetic

(cash collected per human-booked job − cash collected per AI-booked job) × AI-booked jobs / month

It declines when

Fewer than 30 jobs in either bucket, no invoices to follow the bookings into, or no gap at all — it measures a difference, and where there is none it reports none. It is a gap, not blame: the agent usually gets the after-hours and first-time callers, which is a harder book.

What your AI receptionist actually booked

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. 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. Neither the ad export nor the detector exists yet — the importer takes leads, calls, quotes, jobs and invoices. 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. 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. 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.

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 import is the one your reports read; older ones of that type are kept as a recovery tail and deleted beyond what your plan holds — one import on the free plan, up to 24 on the largest. There is no time-based retention period: an import stays until newer ones replace it, or until you delete the workspace.

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 served over HTTPS, and the response carries Strict-Transport-Security for two years, so a browser that has visited once will not use plaintext again. Two things that header does NOT do, because the page that prints it should say so: the domain is not on the browser preload list, so the very first visit is not covered, and http:// is currently answered rather than redirected. 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.

Questions

The four we are asked before every engagement.

What do the plans actually change?

Not what Loupe finds. Every plan runs the same five detectors and shows the same arithmetic under every figure, including the free one. What changes is how much you upload at once, how many past imports are kept, and how many people share the workspace — 1,000 rows and one person on free, more of each as you go up. The full ladder is on the pricing page.

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?

Loupe only ever reads — it never writes to any system of yours. Records arrive only as exports you upload; nothing connects to your systems and nothing syncs on a schedule. Encrypted in transit and at rest, isolated per workspace, and deleted when you delete your account. Full detail on the security page.

The full security pagePricing in full

See what you’re
quietly losing.

Both free. The check takes about 30 seconds and asks for nothing; the workspace runs the same detectors on one export of your own. Or start a conversation →

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