Per-link tracking rolled up per estimate and per contact: sent, opened, approved or declined, with view counts and total time on page aggregated from every identified viewer.
Also called: did they open it · estimate opened · time on page · who looked at the quote
You can see whether they opened it, how many times, and how long they read it
Every estimate link records opens, view counts and total time on page, rolled up per estimate and per contact. A PDF sitting in somebody's inbox tells you nothing; this tells you whether today is a follow-up day or next week is, and stops you chasing a customer who has already read it three times.
See the whole buying group, not just the person you emailed
The page asks a viewer who they are instead of putting a password in front of them, so you get a list: each person, their view count, their total time, first and last visit. “He says he showed his wife” becomes something you can check before you call.
Re-send as many times as you like without losing the tracking
A job sent three times has three links, and the screen reads the one carrying the approval and the views rather than merely the newest. On one real job the estimates tab said “not viewed, not approved” while the pipeline correctly showed it approved, because the newest link had never been opened.
On a refresh the header says it's checking, not that you never sent it
For the few seconds the status takes to load, the header says so, instead of painting the unsent state with a send button. A status that is wrong for three seconds is long enough to start a call on the wrong footing.
- 1Every estimate link carries opened_at, approved_at, rejected_at and its own snapshot.
- 2Viewer rows accumulate view counts, total time and first/last viewed timestamps.
- 3The estimate header, the contact and the pipeline card all read the same aggregation.
- 4The pipeline loads every link in one query rather than one per card.
- 5Matching is by contact id and job id, never by email.
Matching on email address caused false positives: a returning customer's new lead would inherit 'approved' from an unrelated estimate that happened to share their address, so a brand-new quote looked signed off. Separately, every page refresh briefly claimed the estimate had never been sent, complete with an unsent call to action, for the few seconds the lookup took. Tracking now shows whether the customer opened the estimate, how many times, and how long they spent on it — and says it is checking while it finds out, rather than guessing wrong.
- Sending a quote into silence
- Approval status inherited across unrelated estimates that shared an email
- The screen briefly claiming an estimate was never sent
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →