← All docsGet started

Reading a report

What the score, grades, findings, severities, and the request waterfall actually mean.

The score#

The 0–100 score is Harpoon's own transparent metric — deliberately not a Lighthouse score. Five dimensions are each scored 0–100 from concrete signals in your capture, then combined with fixed weights. The gauge on every report shows the exact breakdown, so the score is never a black box:

DimensionWeightWhat moves it
Render-blocking JS/CSS30%How late render-blocking resources finish, plus how many there are.
Critical path length20%Dependency-chain depth and the absolute page-load span.
Third-party overhead20%Third parties' share of bytes and their total request time.
Cache quality15%Bytes of static assets served without adequate caching.
Asset efficiency15%Bytes recoverable via compression, de-duplication, or right-sizing.

Grades band the overall score: A ≥ 90, B ≥ 75, C ≥ 60, D ≥ 40, F below that.

Findings & severities#

Findings are discovered by deterministic rules — one per performance concern. Each carries a severity (critical, high, medium, low, info), the concrete evidence (the requests, bytes, and milliseconds involved), and its measured impact. The default trigger thresholds:

RuleFlags (defaults)
Render-blockingScripts/styles that delay first paint, individually and in aggregate.
Cache qualityCacheable static assets with no policy, or max-age under 1 day.
CompressionCompressible text assets over ~1.4 KB served uncompressed.
Large assetsScripts > 300 KB, stylesheets > 100 KB, images > 500 KB, fonts > 200 KB, anything else > 1 MB.
Slow requestsAny request taking over 1 s.
Redirect chainsTwo or more redirects in a row.
Third-party overheadThird parties over 40% of transfer or 1.5 s of blocking time.
Duplicate assetsThe same asset fetched more than once.
Critical chainsRequest dependency chains 3+ levels deep (needs initiator data in the HAR).
Waterfall gapsIdle gaps of 300 ms+ on the critical timeline.
These are the engine defaults — deployments can tune them, so treat the numbers as representative rather than contractual. The evidence attached to each finding always shows the actual measured values.

The request waterfall#

The waterfall lists every request with a phase-colored timing bar: blocked (queueing), dns, connect (incl. TLS), send, wait (time to first byte), and receive. A long wait is your server thinking; a long receive is a heavy response; lots of blocked means connection contention.

Sort by size, time, status, or type; filter by URL text or resource type. The table is virtualized, so captures with thousands of requests stay smooth.

Same capture, same report#

The engine is deterministic: identical HAR input produces identical findings, values, and finding ids, every time. That's what makes comparisons and trends trustworthy — a change in the report always reflects a change in the capture, never noise from the tool. The AI report is a separate, clearly-marked layer on top.

Still stuck? Email us or browse all guides.