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.
Revenue leak intelligence
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.
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.
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.
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.
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
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.
Leads, contacts, owners
Never sees the invoice
Ring time, who answered
Never sees the lead it belongs to
Value, sent date, status
Never sees whether it was chased
Scheduled, completed
Never sees what it was quoted at
Invoices raised
Never sees the job it came from
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
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.
| Stage | The record | The question it answers | Read by |
|---|---|---|---|
| Lead | Enquiry arrives | How long before someone replied? | Your CRM · Loupe |
| Quote | Proposal sent | Was it ever chased? | Your CRM · Loupe |
| Job | Work booked | Did it complete? | Your CRM · Loupe |
| Invoice | Money asked for | Was it raised at the quoted value? | Loupe only |
| Payment | Money received | Was 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
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.
+$18,400/mo
Recurring, from 3 completed actions
2h 47m to first reply
Instant lead routing
Now: 4m
Sat/Sun calls unanswered
Weekend answering coverage
Now: Covered
No second contact
Quote follow-up sequence
Now: Day 3 and day 10
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.
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.
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 leadsReads
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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.
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.
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.
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
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.
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.
About an hour to start, then one monthly review call. We handle the setup and monitoring — you just decide which fixes to ship.
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.
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 →