Your leads did not go cold.
Somebody stopped replying.
FollowThrough reads your WhatsApp exports, call log and lead list on your own machine and finds the conversations where your prospect spoke last and nobody came back — then checks the same timestamps against the UAE marketing rules. No account, no upload, and no API key.
A CRM cannot see the conversation that mattered
Ask a CRM what happened to a lead and it will tell you about the calls it logged. It cannot tell you that on 14 March a buyer asked “is the 2BR still available?” and nobody ever replied — because that conversation happened on an agent's personal WhatsApp, which the CRM has never seen.
Every audit on the market needs you to onboard first
Speed-to-lead audits read a CRM and want an account connected. WhatsApp analytics platforms read their own Business API and want you migrated onto a new number. Both are forward-looking by construction, so neither can tell you what already happened.
So this one reads the export
A WhatsApp export takes thirty seconds to produce from a phone and contains the whole history. FollowThrough eats it directly — iPhone or Android, English or Arabic, one chat or a zip of four hundred — with whatever your dialer and portal already export.
What the benchmark shows
Every number below comes from benchmarks/run.py against a generated brokerage — 108
WhatsApp exports across both platforms, 120 leads, 145 calls, English and Arabic — with problems
planted in it and the right answer written down before the tool ever saw the file.
What that benchmark is, exactly
A generated brokerage with agent-abandoned threads, threads that died on a buying signal, leads nobody contacted, out-of-hours calls, frequency-cap breaches, re-contact after a refusal in Arabic and English, iPhone and Android exports, 12- and 24-hour clocks, Arabic AM/PM markers, direction marks, media and deleted markers, a group chat that must be skipped and a file whose dates are genuinely undecidable. Synthetic data cannot prove behaviour on your export — it can only show the tool does what it claims where the right answer is known.
Four screens, and every number clickable

1It reads the files you actually have
iPhone and Android export formats, 12- and 24-hour clocks, Arabic
ص/م markers, the direction marks that wrap every timestamp in an
Arabic-locale export, multi-line messages, media and deleted markers, call log lines, and group
chats it knows to skip. One chat, a folder, or a zip of four hundred.

2Nothing is measured until you have seen the assumptions
Which column is which, detected from the headers and the cell contents —
and who the agent was, which is whoever appears in more than one conversation. Both are shown
with the reasoning and both are yours to correct. 03/04 is genuinely ambiguous, so
the date order is settled across the whole upload; where nothing settles it, the assumption is
printed rather than made quietly.

3Then it shows you where they died
Every dead thread classified by who spoke last. The ones where your prospect spoke last and nobody came back are the money metric, and the ones whose last message was a request to view or a price question are at the top of the list.

4And opens any of them onto the actual conversation
Click a finding and read what was said, quoted from the export with the file and the line, and the unanswered message ringed. Nothing in the report is a number you have to take on trust.

5Plus what a regulator would see in the same data
Calls outside the permitted window, frequency-cap breaches, contact after a refusal, gaps in the record the rules require — with the instrument named, the published fine schedule stated as fact about the instrument rather than a prediction about you, and a clear line saying this is not legal advice.
Four things nothing else does this way
It measures the silence, not the activity
Every dashboard counts what was sent. This counts what was not: the conversations where your prospect asked a question and the thread simply stops.
An automatic acknowledgement is not a response
Auto-replies are detected — by phrasing, and by the same text going out to several leads within seconds of arrival — and they do not stop the clock. Three separate clocks are kept: the acknowledgement, the first human attempt, and the first two-way conversation.
A call is not a message, and the report knows it
Cabinet Resolution 56 of 2024 regulates marketing by telephone call, 09:00–18:00. Marketing SMS sits under a separate policy with a different window. WhatsApp sits under neither — so an out-of-window call is a breach of a named instrument and an out-of-window message is a flag that says exactly what it is.
The money number is yours, and it shows its working
No default commission, no assumed conversion rate, no industry benchmark anywhere in the tool. Supply nothing and the report says how many leads leaked and declines to price them — better than a figure you cannot defend in the meeting.
Two commands, on your own machine
Python 3.11 or newer. The tool works with no API key at all — the optional AI step is off by default and never touches a measurement.
Getting the files: in WhatsApp, open a chat → Export chat → Without media. Do that for the conversations that matter, or export the lot and drop the whole folder — or the zip — in at once. The call log and lead list are whatever your dialer and portal already export.
Nothing is uploaded, and nothing is kept
What the tool does
- No database, no session, no cache, no temp file. Files are held in memory for one request and dropped when the response is sent — uploads never touch disk.
- No webfont, no analytics, no CDN. Not one third-party request, from the app or from this page.
- The measurement never calls a model. The optional AI step is off by default, and when on it sees a few messages with the names removed — never your file.
What this page does
- It is static. This site and the demo are plain files on GitHub Pages with no backend behind them and no credentials in them.
- The demo data is invented. Every conversation, name and number in it was written for the purpose. No real export has ever been near it.
- Your files never reach this site. The demo cannot accept an upload; to analyse your own export you run the tool locally.
What it does not claim
A report that overstates its confidence is worse than no report, so these are stated in the tool itself as well as here:
- It cannot see what it was not given. A call from a personal phone with no log, or a conversation on a platform nobody exported, is invisible.
- “Left waiting” is about who spoke last, not who was right. Some were answered by phone or in person; the evidence is printed so you can tell which.
- Reading intent from a message is a judgement. The matched phrase is always shown, so you can disagree with it.
- A WhatsApp export carries no timezone. Every time-of-day check rests on an assumption the report prints.
- The compliance section is not legal advice, and it cannot check the Do Not Call Registry — that requires a telecom operator.
- The money figure is arithmetic on your assumptions, not a forecast.
- The benchmark is synthetic. It shows the tool does what it claims where the right answer is known. Your export is the real test.