Feature

Did the customer actually open it?

Per-invoice view tracking that answers the question you actually have. City, device, timestamp. Your own previews count separately so the number means something.

The thing email opens never told you

Email open tracking is broken. Apple Mail Privacy Protection pre-fetches every image in your inbox, so every email looks "opened." Corporate spam filters do the same. You can't tell whether your customer actually looked at your invoice from email opens alone.

JupiterInvoice tracks views on the share-link page itself. Each open of /i/<token> by your customer logs an entry. Image pre-fetchers don't trigger it because the page renders interactive HTML, not a tracking pixel.

What you see on every invoice

"Last viewed 3h ago from Boston"

The headline answers the recency question first. If the customer just looked at it, you know. If they haven't opened it in two weeks, you know that too.

City, region, country

Powered by Cloudflare Enterprise geo headers. No third-party tracking dep, no pixel, no cookie. Geo accuracy is approximate (IP geolocation always is) but enough to confirm "yes, that's them."

Browser and OS

"Chrome on Mac" or "Safari on iOS" so you can tell desktop from mobile and recognize when AP forwarded it to a colleague on a different device.

Total views, unique visitors

Counts unique viewers by IP plus browser fingerprint, so a customer refreshing 50 times shows as one visitor and a forwarded-to-AP scenario shows as two.

Sender previews counted separately

When you preview your own invoice link while logged in, those views go in a separate bucket: "You've previewed this 12 times." They don't pollute the recipient-engagement count or trigger the customer-viewed Slack ping.

Full view history on demand

Click "Full view history" to see every view: when, what device, where, and the IP address. Useful when the customer claims they never received it.

On the invoice list, at a glance

Every row in your invoice list shows a small "Viewed Xh ago" pill next to the status badge whenever a real customer opened the link recently. Scanning the list tells you which invoices got engagement and which are sitting unread. Hover the pill for the precise local timestamp.

When this matters

  • Following up. Before you send "just bumping this" you can see whether the customer has actually seen the invoice. If they viewed it three times yesterday, it's a different conversation than if they haven't opened it.
  • Verifying delivery. When a customer says "I never got that," the view history settles it. If their IP shows up in the log, the email landed and someone clicked the link.
  • Knowing AP forwarded it. A second unique viewer from a different IP usually means your contact passed the invoice to their AP team. That's a payment-process signal worth seeing.
  • Catching link previewers. Email security scanners and link previewers (Slack, Gmail) often hit the share link automatically. The view history makes those visible so you can mentally discount them.

How view tracking works

Do you use a tracking pixel?
No. Tracking happens server-side when the recipient opens the share-link page (/i/<token>). There's no image beacon, no JavaScript phone-home, no cookie set on the recipient. The page works fully without tracking — the tracking is just our log of which IPs and browsers fetched the page.
Are you sending data to third parties?
Geo lookup (city, region, country) uses Cloudflare's IP geolocation, which is computed at our edge — no third-party API call per view. The customer's IP never leaves Cloudflare's infrastructure for this purpose. Browser/OS comes from the User-Agent header the recipient's browser sends; we just classify it. Nothing goes to Google Analytics, Mixpanel, or similar.
How do you tell my own previews apart from real customer views?
When you (the sender) open your own share link while logged into JupiterInvoice, the session cookie matches the invoice owner. Those views log with actor_type=sender_preview and count in a separate 'You've previewed this N times' line. They don't trigger the SENT -> VIEWED status flip, the Slack 'viewed by recipient' ping, or the invoice.viewed webhook.
How accurate is the city geo?
Country is ~99% accurate. Region/state is around 85%. City is the most variable — it's usually right but can show the customer's ISP regional hub instead of their actual town. Mobile and VPN traffic skews more. Treat city as a strong signal of 'is this likely my customer' rather than a precise location.
Does the recipient know they're being tracked?
We don't pop a banner. View tracking on a private share link is industry-standard for B2B invoicing tools (Bill.com, FreshBooks, Stripe Invoicing all do it). If your privacy policy needs to disclose this, the data we capture is: IP address, User-Agent, and timestamp on each view of the share link.
What about webhook events for views?
We fire invoice.viewed on every real recipient view (sender previews suppressed). Wire it to your CRM or messaging tool to react in real time when the customer opens the invoice for the first time.

Stop guessing whether your customer opened it

Free to try. Send a real invoice and you'll see the view analytics light up the moment the recipient clicks the link.

Create your first invoice

No signup required. Build now, save later.