How to Find Slow Endpoints Using HAR Files

A practical guide for frontend developers · 2025

The Problem

Your app feels slow but you don't know where. Users complain about load times, Google Pagespeed scores are mediocre, and you've stared at the waterfall panel for hours. HAR files contain everything your browser downloaded — request/response timing, sizes, caching headers, errors.

Step 1: Export a HAR File

Open DevTools (F12) → Network tab → Check "Preserve log" → Refresh → Right-click → "Save all as HAR with requests".

⚠️ Make sure the network request count isn't filtered — sort by Time column first so you capture the slowest requests too.

Step 2: Look at the Waterfall

The waterfall view shows every resource stacked vertically. Look for horizontal gaps between when a request starts and ends. Long bars = slow responses.

TypeWhat to look forTypical fix
Server wait timeTTFB > 500msOptimize backend queries, add caching
Download speedSlow transfer for large resourcesCompress, lazy-load, use CDN
Queue/delayMany requests waiting sequentiallyPrioritize critical path, parallelize

Step 3: Focus on What Matters

Not all endpoints matter equally. A third-party analytics script taking 800ms may not hurt UX. But an API call that blocks rendering?

Categorize by:

Step 4: Extract the Numbers You Need

import json

with open('export.har') as f:
    har = json.load(f)

for entry in har['log']['entries']:
    print(f"{entry['request']['url']}:")
    print(f"  TTFB: {entry['time']*1000:.0f}ms")

Why Structure Your Analysis?

HAR files vary wildly in size. Clean exports have ~20 entries. Production exports can have hundreds. Manually reviewing is impractical.

This is why I built HAR Timing Report — a tool that parses HAR files entirely in your browser, extracts only allowlisted timing metrics, and outputs clean CSV reports grouped by category.

Try HAR Timing Report →


Built and maintained with care · MIT Licensed · © 2025