Get Started

Find the secret data feed behind any live website, and turn it into a spreadsheet

Most live websites quietly download their data as JSON in the background. Spot that request in your browser, replay it in the terminal, and turn it into a script that saves a spreadsheet and a map. Practice target: the USGS live earthquake map, which is public, free and needs no account.

32 minBeginnerTools: FreeStep 1 free
Tested 9 Oct 2026 · Chromium 156 DevTools, curl 8.17 (built into Windows), Windows PowerShell 5.1, Python 3.13, uv 0.11, httpx 0.28, Windows 11
A repeatable way to find the JSON request behind a live web page, using only your browser
That request replayed in your terminal, with the extras stripped out and the settings changed to what you want
A short Python script that pages through the results politely and saves them as a CSV you can open in Excel
  • Every earthquake from the past week plotted on a world map, from the data you pulled yourself
Before you start
  • Google Chrome or Microsoft Edge (Firefox works too, its menus are worded slightly differently)
  • uv, a one-line install that also gets you Python. Step 6 shows the command
  • A terminal: Windows PowerShell (curl.exe is built into Windows 10 and 11), or Terminal on a Mac or Linux (curl is already there)
01/06Catch the page fetching its data0 done
STEP 01 of 06~5 min

Catch the page fetching its data

Everything the page shows came from somewhere. The Network tab shows you where.

  1. Open the USGS Latest Earthquakes map ↗. It's run by the US Geological Survey, a government science agency, and shows every magnitude 2.5 or bigger earthquake in the last day. It updates itself while you watch, which is a big clue: the page must be downloading fresh data.

    USGS Latest Earthquakes map showing 34 earthquakes of magnitude 2.5 or more in the past day, with orange dots around the Pacific and a list on the left
    The page we're taking apart: 34 earthquakes in the past day at the moment of this screenshot.
  2. Now open your browser's developer tools (DevTools): press F12, or Ctrl + Shift + I (on a Mac, Cmd + Option + I). Click the Network tab. It lists every request the page makes, meaning every time it asks a server for something: pictures, fonts, code and data.

    • 1. With the Network tab open, press Ctrl + R to reload. The list only records while DevTools is open, so it starts empty until you reload.
    • 2. Click the Fetch/XHR button in the filter bar. That hides pictures, fonts and styles, and keeps only requests made by the page's own code. That's where data lives.
    Chrome DevTools Network tab with the Fetch/XHR filter on, showing a long list of map tile requests such as 0.pbf and 1.pbf
    Still noisy: 59 of the page's 77 requests are Fetch/XHR. Most are map tiles (the .pbf files) and analytics.
  3. Too many to read one by one. Type geojson into the Filter box. JSON is the plain-text format websites use to pass data around (lists and labels in curly brackets), and GeoJSON is JSON for things with a location. Mapping sites love it.

    DevTools Network tab filtered to geojson, showing 2.5_day.geojson at the top and six query requests below
    7 of 77 left. The top one, 2.5_day.geojson, matches the page title: Magnitude 2.5+, Past Day.
  4. The six query?returnGeometry=... rows are the red lines on the map (the edges of the tectonic plates), from a different server. The one we want is 2.5_day.geojson.

    TipNo obvious name? Other tricks: sort by the Size column (data is often the biggest text request), or press Ctrl + F inside the Network tab and search for a word you can see on the page, like a place name. DevTools searches inside every response.
    TipTurn on Preserve log (the tickbox along the top of the Network tab) so the list survives reloads and redirects. You need it when the data loads during a login or a page change, which would otherwise clear the list before you can read it.
    TipThe Filter box takes more than plain words: type mime-type:application/json to show only JSON replies, and put a - in front to hide matches (-.png drops the images). It thins out a noisy page fast.
✓
CheckpointYou can see 2.5_day.geojson in your Network list.
If it breaksThe Network list is empty + 1 more
The Network list is empty
DevTools only records while it's open. Keep it open and press Ctrl + R to reload the page.
I see two 2.5_day.geojson rows, one with a little cog
The map uses a service worker (a helper that caches the page so it loads faster). The cog row is the helper fetching the same file. Either row is fine.
Still stuck? Ask the community
Next mission · Reverse engineer anythingCrack open a program with Ghidra, the NSA's free tool
→