Whence Add to Chrome

Every value on screen came from somewhere. Whence shows you where.

Hover any number, name or date on a web app and see the API request, the list item and the JSON field it came from. Click a button and see which requests that click made, with analytics and background noise set aside.

For Chrome and Chromium browsers. No account, nothing sent anywhere.

Try it: hover a value in the table
Orders1,284 total
CustomerTotalStatusPlaced
GET /api/orders?page=1 · 200

          
What it answers

Three questions you ask every time you debug a front end

Whence watches the requests a page makes and the page itself, then connects the two. It runs on any framework and needs no changes to the app.

Where did this value come from?

Turn on inspect mode and point at anything. The tooltip draws the path from the request to the item and the field, with the evidence for the match.

  • Exact field paths like data.orders[2].totalCents
  • The right row, even when the same value appears in many rows
  • Says when it isn't sure, instead of guessing
Whence's tooltip over an order total of $42.00, tracing it to the GET /api/shop/orders request, item data.orders[2] and field totalCents, stored as 4200 cents.
$42.00 appears in three orders. Whence picks the right one from the values next to it, and knows the API stores it in cents.

What did that click call?

Every click, submit, search and back/forward lists the requests it caused, in the side panel and in the tooltip of the button you clicked.

  • Follows the click through timers, promises, animations and lazy-loaded code
  • Finds data that was prefetched on hover, or fetched earlier and only shown now
  • Marks which responses ended up on screen
The Clicks view of the side panel: each click with the requests it caused, and a folded list of background calls that happened at the same time.
Analytics, flags and another extension's call are folded under the click, not counted as what it did.

What exactly did the server send?

The side panel keeps every request on the tab with its headers and bodies. Copy one with its response, as cURL, or export the session as a HAR file.

  • Tokens, cookies and passwords are redacted in copies and exports
  • Includes requests from iframes and micro-frontends
  • Background traffic is tagged and hidden until you want it
The Requests view of the side panel: a list of API requests with method, path, status, timing and tags such as from click and on screen.
One list per tab, with the click and the screen each request belongs to.
  1. Add it to Chrome

    Free, from the Chrome Web Store.

  2. Turn it on for your app

    Open the Whence popup and enable the site, or use it on the current tab only with no permission at all.

  3. Hover and click

    Press Alt+Shift+A to inspect, and Alt+Shift+K for the side panel.

Background traffic

It knows an analytics call from the request that loaded your data

Every request is judged on four kinds of evidence, so this works on apps Whence has never seen, not from a list of known hosts.

Who made it

The script where the call started: your code, an analytics SDK (even self-hosted), or another browser extension.

Where it goes

Telemetry and feature-flag services, collection paths like /v1/traces, sign-in and translation endpoints.

What it sends

Event payloads with anonymousId or distinct_id, batches of events, compressed blobs, beacons.

What started it

A timer set before the click, the window regaining focus, a server push over a WebSocket, steady polling.

Shown one way, stored another

Apps rarely show a value the way the API sent it

Whence matches the page's version to the response's, so formatting doesn't hide where a value came from.

On the pageIn the responseWhy they match
48 210,25 $48210.25Number formats in any locale, currency before or after
$19.991999An amount stored in cents
1.3 GB1288490188File sizes in bytes, decimal or binary
il y a 2 heures"2026-10-29T10:58:00Z"Relative times and dates in several languages, timestamps in seconds or milliseconds
✓trueA label or icon the app maps a value to, learned from the rest of the column
In progress"IN_PROGRESS"Enum names written as words
7c1e52a0…8e91b3"7c1e52a0-3f4d-…-2d0f5c8e91b3"IDs shortened in the middle
7 usersusers.lengthThe number of items in a list
Where it works

Built for the apps you actually debug

Any framework

  • React, Vue and Angular, with component props when available
  • Svelte, plain JavaScript and server-rendered pages
  • D3 and charting libraries such as Chart.js, ECharts, Highcharts and Plotly

Any data source

  • fetch, XHR, WebSockets and server-sent events
  • JSON, GraphQL, XML, CSV, protobuf and MessagePack
  • Data in the page (Next.js, Nuxt, SvelteKit), localStorage and IndexedDB

Any layout

  • Iframes and micro-frontends, on the same site or others you enable
  • Shadow DOM and web components
  • Web workers, with DevTools open
Privacy

Nothing leaves your browser

  • No servers, no accounts, no analytics.Whence has no backend. It never sends what it sees anywhere.
  • Gone when you close the tab.Captured requests live only in that tab's memory.
  • You choose where it runs.Enable it per site, or on one tab at a time with no permission. Read the privacy policy.