True Total
Watches ticket and short-term rental checkouts and keeps a running total as fees get added after the price you were first shown.
TrueTotal
Watches ticket and short-term rental checkouts and keeps a running total as fees get added after the price you were first shown.
Date: 2026-09-07
Form factor: Browser extension (Manifest V3)
Browser surface: content script (ticketmaster.com, airbnb.com), toolbar popup, chrome.storage
Status: Prototype
What it is
TrueTotal sits on ticket and short-term rental checkout pages and tracks two numbers as you click through: the price you were shown when you landed, and the price you're actually about to pay. A badge in the corner of the page updates with every fee that shows up along the way, and the popup breaks down exactly which line items were added after the fact.
Why it has to be an extension
The gap between an advertised price and a checkout total only exists inside a live checkout flow — service fees, facility fees, and cleaning fees get revealed step by step as you select seats, pick a delivery method, or confirm dates, and they're gone the moment you land on a receipt page. A companion site can't see any of that; it would need you to paste in numbers by hand, by which point the whole point of catching the bait-and-switch in real time is lost. A content script watching the live DOM as it changes is the only way to catch a fee before checkout is over.
Who it serves
Anyone buying event tickets or booking a short-term rental who's tired of a $79 seat turning into $118 by the payment screen. It's aimed at the same person who already screenshots a checkout page before hitting "buy" to prove what they saw — TrueTotal just does that automatically and keeps the receipt.
Why it could be profitable
The free tier is the badge and the per-page breakdown — useful on its own, and it's what gets someone to install the thing. The paid tier, TrueTotal Plus ($4.99/mo), is where the money is: price history across visits to the same listing, alerts when a saved listing's fees change, and a one-click complaint export formatted for the FTC or a state attorney general.
The regulatory timing helps make the case. The FTC's Junk Fees Rule took effect May 12, 2025 and requires the total price to be displayed more prominently than any other pricing information for live-event tickets and short-term lodging — the exact two categories this extension targets. State attorneys general are still actively enforcing the underlying deceptive-pricing standard in 2026, and civil penalties can run over $51,000 per violation, which is real leverage for a user who wants a complaint taken seriously. I'd call the demand real but unproven at scale, though: nobody's shown that "here's your evidence report" actually converts browsing into paid subscriptions, and that's the open question before building past this prototype.
How to load it in Chrome
- Open
chrome://extensionsand turn on Developer mode. - Click Load unpacked and select this folder's
extension/directory. - Visit a Ticketmaster or Airbnb page with a price shown, then start a checkout — TrueTotal only has line items to report once fee text actually appears on the page. Click the toolbar icon to see the breakdown.
How to try the demo
- Open
index.htmlin any modern browser — no server required, everything loads from a local JSON file. - Click Next step → in the mock checkout to reveal the ticket price and each fee in turn, watching the corner badge update live.
- Click the toolbar icon to open the popup and see the same breakdown, plus the export button.
The demo simulates the content script's page-reading and badge injection directly in JavaScript, since there's no real Ticketmaster or Airbnb page to attach to — script.js says exactly where it's standing in.
Permissions, and why each one
| Permission | Why it's needed |
|---|---|
storage |
Saves the latest price snapshot per site locally, the foundation for the Plus price-history feature. Nothing leaves the device. |
content_scripts matches are scoped to ticketmaster.com and airbnb.com — the two sites this prototype targets, standing in for the two categories the Junk Fees Rule actually covers (live-event tickets, short-term lodging). A production version would add StubHub, Vrbo, and Booking.com the same way.
What's in this prototype
- A content script that reads live checkout DOM for a base price and known fee labels, tracks which fees were revealed after the base price, and injects a shadow-DOM badge showing the running total
- A popup that pulls the current tab's checkout state, shows the full breakdown, flags every late-added fee, and exports a plain-text evidence report citing the Junk Fees Rule
- Local storage of the latest snapshot per site (read by nothing yet — it's there for the history feature below)
- A locked "TrueTotal Plus" section in the popup previewing price history, complaint export, and fee-change alerts, none of which are wired up in this build
Roadmap
- Price-history charting per listing, built on the snapshots already being saved
- Per-site fee-line adapters, since the current keyword-and-price-proximity heuristic will miss sites with unusual markup
- A hosted backend for TrueTotal Plus subscriptions and cross-device sync
- StubHub, Vrbo, and Booking.com support
- A structured, downloadable PDF version of the evidence report
Sources
- FTC Finalizes "Junk Fees" Rule: New Pricing Disclosure Requirements Take Effect May 12, 2025 — confirms the total-price requirement and its scope (live-event tickets, short-term lodging)
- State Attorneys General and Continued Enforcement Against "Junk Fees" in 2026 — confirms state-level enforcement is still active in 2026 even after federal rule challenges
Requirements
TrueTotal — Requirements
Goals
- Detect the price a checkout flow first advertises and every fee added after that point, on ticket and short-term rental sites.
- Show the running total on the page itself, without requiring the user to open the popup.
- Give the user a breakdown they can act on: which line items were disclosed up front versus added later, and a way to export that as evidence.
- Keep the free tier genuinely useful on its own, so the paid tier is an upsell, not a paywall.
Primary user
Someone actively buying event tickets or booking a short-term rental — mid-checkout, comparing what they were quoted against what they're now being asked to pay. They're not researching in the abstract; they're on the page, fees are appearing in real time, and they want the total to stop moving on them.
Functional requirements
- FR1: The content script SHALL detect a base advertised price on ticketmaster.com and airbnb.com checkout pages using DOM heuristics (elements with "total"-like class/testid attributes).
- FR2: The content script SHALL detect fee line items by matching known fee keywords (service fee, facility fee, processing fee, etc.) against text near a currency amount.
- FR3: The content script SHALL mark each detected fee as
revealedAfterBase: trueif it was found after the base price was already known. - FR4: The content script SHALL re-scan the page on DOM mutations, debounced to avoid excessive rescans.
- FR5: The content script SHALL inject a floating badge (via shadow DOM) showing the current running total and the percentage added in fees.
- FR6: The content script SHALL guard against double injection on the same page.
- FR7: The content script SHALL respond to a
TRUETOTAL_GET_STATEruntime message with its current state. - FR8: The content script SHALL persist the latest snapshot per site to
chrome.storage.local. - FR9: The popup SHALL query the active tab's content script for state when opened, and show a "not supported" message if no content script responds.
- FR10: The popup SHALL render the advertised price, each fee line item (flagging late-added ones), and the computed total.
- FR11: The popup SHALL let the user export the current breakdown as a downloadable evidence report referencing the FTC Junk Fees Rule.
- FR12: The popup SHALL preview locked "TrueTotal Plus" features without implementing them, and clicking the upgrade button SHALL make clear the tier isn't wired up in this build.
- FR13: Every
chrome.*call in the popup SHALL be feature-detected so the same file runs unmodified in the demo harness. - FR14: The demo harness SHALL simulate a multi-step checkout using
sample-data.json, updating the same popup and a simulated badge as steps advance.
User stories
- As a ticket buyer, I want to see the total price update as fees appear, so that I know before I pay whether the price has moved from what I was first shown.
- As a short-term rental guest, I want to know which charges were hidden until the last checkout step, so that I can decide whether to keep going or back out.
- As a user who wants to file a complaint, I want a plain-text report with dates and amounts, so that I don't have to reconstruct the checkout from memory or screenshots.
- As a privacy-conscious user, I want my checkout data to stay on my device, so that I don't have to trust a third-party server with my browsing.
- As a first-time user, I want the popup to tell me clearly when I'm not on a supported page, so that I don't think the extension is broken.
- As a returning user, I want my last snapshot for a site saved locally, so that a future version can show me whether prices crept up since my last visit.
Extension surfaces
- Content script (ticketmaster.com, airbnb.com) — reads live checkout DOM, tracks state, injects the floating total badge.
- Toolbar popup — shows the current tab's breakdown, exports the evidence report, previews the paid tier.
chrome.storage.local— persists the latest per-site snapshot for a future price-history feature.
Non-functional requirements
- Privacy: all computation and storage stays on-device; nothing is transmitted anywhere.
- Permission minimalism: the manifest declares only permissions the code calls (
storage); content script matches are scoped to named hosts, not<all_urls>. - Performance: DOM rescans are debounced (400ms) so the mutation observer doesn't thrash on rapidly-changing checkout pages.
- Resilience: fee detection is heuristic and best-effort; a missed or misclassified fee should degrade to "not shown" rather than throwing an error.
- Accessibility: popup text meets standard contrast ratios against its backgrounds; interactive elements are native
<button>elements.
Out of scope (for the prototype)
- Real integration with StubHub, Vrbo, Booking.com, or any site beyond the two demonstrated.
- Any backend service, account system, or payment processing for TrueTotal Plus.
- Actual submission of a complaint to the FTC or a state attorney general — the export is a local file only.
- Cross-device sync of saved snapshots.
Open questions
- Do Ticketmaster's and Airbnb's actual DOM structures match the class/testid heuristics used here closely enough to work without per-site adapters?
- Would users pay for price history and complaint export, or does the free badge alone satisfy most of the underlying frustration?
- Should the evidence report format follow a specific FTC or state AG complaint template rather than a generic plain-text summary?