SERP Parser
Paste a search results response (SERP API JSON or saved Google HTML) and get a clean table of ranked results you can export.
JSON from SerpApi, Serper, DataForSEO, Brave Search, Google Custom Search, SearchApi.io, ValueSERP and Bing-style APIs is detected automatically. HTML parsing is best-effort because Google changes its markup often; for reliable data, use SERP API JSON. Everything runs in your browser and nothing is uploaded.
Results
| # | Title | Domain | Snippet |
|---|
Exports and the copied table contain the rows shown. Cells that start with =, +, - or @ get a leading apostrophe so spreadsheets treat them as text.
Domains
| Domain | Results | Best position |
|---|
Select a domain to show only its results. Counts cover all results, not just the filtered rows.
Also on the page
How to use the SERP parser
Paste a search results response into the box, open a .json, .html, .htm
or .txt file, or press Load example to see how it works. The parser checks the
first character: input that starts with { or [ is read as JSON, and anything else as
HTML. It then tells you what it detected, for example "Serper JSON" or "Google HTML", and builds a table of the
organic results with their position, title, URL, domain and snippet.
Type in the filter box to narrow the rows. Every word must match somewhere in the title, URL, domain or snippet,
a word starting with a minus sign excludes rows, site:example.com keeps a domain and its
subdomains, and domain:example.com keeps that exact domain. When the rows look right, use Export CSV for a spreadsheet file,
Export JSON for the normalized records, or Copy as TSV to paste straight
into Google Sheets or Excel. Exports contain the rows currently shown, so you can filter first and export a
subset.
If you don't have a response yet, run a query with the Search API Tester and choose "Open in SERP Parser" to bring the response here. If the parser reports invalid JSON, the message shows the line and column where parsing stopped; the JSON Formatter helps when you need to read or fix a large response by hand.
Supported formats
Each SERP API names its fields differently. The parser recognises these shapes and maps them to one record format, so you can extract search results from several providers into the same CSV columns.
| Source | Organic results | Title, URL, snippet fields |
|---|---|---|
| SerpApi | organic_results | title, link, snippet |
| Serper | organic | title, link, snippet |
| DataForSEO | tasks[].result[].items[] | title, url, description (items with type "organic") |
| Brave Search API | web.results | title, url, description |
| Google Custom Search JSON API | items | title, link, snippet |
| SearchApi.io | organic_results | title, link, snippet |
| ValueSERP, Scale SERP | organic_results | title, link, snippet |
| Bing-style | webPages.value | name, url, snippet |
| Other JSON | Largest list of objects with a link and a title | link / url / href, title / name |
| Saved Google page | Links that contain an h3 | Heading text, link, nearby text |
Responses wrapped in another object, such as {"body": {…}}, are unwrapped
automatically. The Bing row covers the response shape of Microsoft's retired Bing Web Search API, which some
other services still return.
What a SERP result record contains
Every row in the table and in the exports has the same fields, whatever the source:
- position: the rank the provider reported. When a response has no positions, rows are numbered in order.
- title: the clickable headline, with highlight tags removed.
- url: the landing page. Google redirect links in HTML are unwrapped to the real address.
- domain: the hostname without a leading
www., sowww.example.comandexample.comcount as one site. - displayedUrl (JSON export only, when available): the breadcrumb or green URL the search engine showed.
- snippet: the description text under the title.
Next to the table you get a domain summary with the number of results and the best position for each domain. When the response includes them, the parser also lists People also ask questions and related searches, and counts the ads. Ads are not mixed into the organic rows.
Typical uses
Rank tracking snapshots
Export the results for a keyword to CSV with the date in the file name and you have a snapshot you can compare later. It's a quick way to check where a page ranks without setting up a full rank tracker.
Competitor domains
The domain summary shows which sites take several spots on the first page and how high they rank. Select a domain to filter the table to its pages.
Content research
Titles and snippets show how the ranking pages frame a topic, and People also ask questions and related searches point to subtopics worth covering. Copy either list with one click.
Why SERP APIs are more reliable than scraping Google HTML
You can parse Google search results from a saved page, but it is fragile. Google's markup uses generated class
names that change without notice, results pages mix organic listings with maps, videos, shopping and other
features, and the layout differs by country, language and device. That's why this parser looks at structure
(a link containing an h3 heading) rather than class names, and why HTML parsing here is
best-effort. Check the rows against the page before you rely on them.
Collecting results automatically is also a policy problem. Google's Terms of Service forbid using automated
means to access content from its services in violation of machine-readable instructions such as robots.txt, and google.com's
robots.txt disallows /search. Automated scrapers also run into CAPTCHAs and blocked IP addresses.
SERP APIs run the searches for you and return documented JSON fields, which is why they are the better source
for anything you repeat. Read your provider's terms to see what you may do with the data.
Privacy
The parser runs entirely in your browser. What you paste or open is never uploaded, and HTML is read with the browser's built-in parser into an inert document, so scripts in a saved page don't run and its images aren't loaded. Inputs under 200 KB are kept in your browser's local storage so they are still there when you come back; press Clear to remove them.
Limits
- It reads one response at a time. It doesn't run searches or fetch pages.
- Only organic results go into the table. Local packs, shopping, news, videos and other features aren't extracted, and ads are only counted.
- Positions are the ones the source reports. Whether they count ads or SERP features depends on the provider.
- HTML parsing is tuned for Google results pages. Saved pages from other search engines usually use different markup.
- Files over 20 MB are refused. Paste only the part of the response you need instead.
Frequently asked questions
What is a SERP parser?
A SERP parser turns a search engine results page into structured records. This one reads SERP API JSON or a saved Google results page and gives you each organic result's position, title, URL, domain and snippet as a table.
How do I export Google search results to Excel or Google Sheets?
Paste the response, then choose Export CSV for Excel or Copy as TSV to paste straight into Google Sheets. The CSV is UTF-8 with a byte order mark, so Excel shows accented and non-Latin characters correctly.
Does the SERP parser run searches for me?
No. It only reads a response you already have. To run a live query against a SERP API, use the Search API Tester and open its response here with one click.
Why don't the positions match what I see on Google?
Google results vary by location, language, device and signed-in history, so a response captured elsewhere or at another time can differ. Providers also count positions differently: some number only organic results, others count every element on the page.
Can I parse Bing or DuckDuckGo results pages?
The HTML parser is built for Google results pages, and saved pages from other search engines usually use different markup. Use JSON from a SERP API that covers that engine instead; if its field names aren't recognised, the parser still looks for any list of objects with a title and a link.