Over-fetch and large payloads
Fields not read in observed sessions, and responses larger than the page needs — with the evidence to investigate a smaller payload.
How much of your response does your frontend actually use? Find unread fields, repeated calls and slow endpoints with one script. Go from evidence to a concrete next step.
No credit card. 50,000 responses a month free.Move your pointer to explore · Illustrative visualization
A successful response is only half the story. Explore which fields your frontend reads — and what is left behind.
Select the fields your frontend reads. Watch the analysis change.
3 of 8 fields read by the example frontend.
Consider a smaller response for this view. Review usage across real sessions before removing fields.
Every finding comes from real traffic in your app, with the requests behind it and the code that made them.
Fields not read in observed sessions, and responses larger than the page needs — with the evidence to investigate a smaller payload.
Investigate endpoints that cross your project’s latency threshold and elevated error rates, backed by enough samples.
Spot duplicate calls, frequent refetches and retry storms after failed requests.
A thousand-item list downloaded when the page only ever reads the first twenty.
Passwords, tokens and keys sent to the browser, flagged whether or not the page reads them.
The component and line that made each request, resolved through your source maps, and the release a finding first appeared in.
Three fixes from a production hotel management product. The developers sent the findings to their task board, checked each one in the code, fixed what they found along the way and measured the result in the browser.
2.3 MB → 0
A report page downloaded 2.3 MB of JSON (uncompressed) on every open to fill two filters that start disabled. The query now waits until the filter is switched on: no request on page open.
3 → 0 requests
Three requests for a tab the modal doesn't open on went out with it. While checking the finding the developers also caught a bug: the code read the wrong field names and three dropdowns showed “undefined - undefined”. The unread-field list had pointed at it.
2 → 1 requests
The change-customer modal fetched the invoice screen's 2 MB (uncompressed) customer list a second time under its own cache key, a 2,170 ms call. The two now share one cache entry.
Measured by the product's own developers in their development environment, September 2026. Of 30 findings they reviewed, 23 were confirmed in full or in part and 13 led to a code change; 7 were noise or dev-only artifacts, and we used those reviews to make the detectors stricter. Sizes are uncompressed JSON.
Illustrative product flow · Select a layer to explore
The SDK records the shape, size and timing of JSON responses your app receives. See which page called which endpoint.
Inspect the fields your code reads alongside the response shape. Investigate unread fields and repeated calls with evidence from observed sessions.
Move from a finding to its call site. Review steps for Frontend, Backend, SQL and DevOps, then check new traffic after shipping your change.
Create a free account and add your app’s address. Copy the snippet with your project key from setup, then use your app’s real flows.
Explore the free plan<script
src="https://app.apiheron.com/sdk.js"
data-key="YOUR_PROJECT_KEY"
></script>Replace YOUR_PROJECT_KEY with the key from your project.
The SDK records the shape of responses (field paths, item counts, size, timing) and which fields your code reads. It never records response values, and query values are hashed in the browser.
Don’t just spot the problem. Know your next move.
Use a purpose-built response for the product card. Coordinate the smaller endpoint with your backend; filtering after fetch won’t reduce transferred bytes.
const products = await fetch(
"/api/products?view=card"
).then((response) => response.json());Quotas count captured API responses per calendar month; when one runs out, capture pauses until the next month and nothing extra is billed.
$0/ month
For trying apiheron on a side project or a single app.
14-day Team trial, no card
$29/ month
$290 per year
For teams profiling their production and staging apps.
14-day Team trial, no card
$99/ month
$990 per year
For companies watching several busy apps with a longer history.
Custom
For organizations that need high volume, a custom contract or their own infrastructure.
New organizations start on a Team trial and move to Free when it ends. Upgrade from Workspace after signing up. Payments, invoices and taxes are handled by Polar.
A few things to know before your first capture.
No. The SDK records response shapes: field paths, item counts, size and timing, plus which fields your code reads. Response values are not recorded; query values are hashed in the browser.
apiheron observes JSON API traffic over fetch and XMLHttpRequest, so axios, jQuery and Angular work without extra wiring; there is a TanStack Query integration too. Add the SDK to your app; Next.js, Vite and plain HTML installation snippets are available during setup.
Capture pauses until the next calendar month. There are no automatic overage charges. You can upgrade from your workspace if you need more capacity.
Yes. A new organization starts with a 14-day Team trial without a card; when it ends you stay on the Free plan until you upgrade.