Irmu
Free tool

JSON-LD extractor

Every application/ld+json block on the page, parsed and pretty-printed — products, articles, breadcrumbs, organisations, FAQs.

HTML input
JSON output
0 B · 0 linesExtracted locally in your browser — nothing is uploaded.
How it works

What this tool does

  • Arrays and @graph blocks are flattened so each entity appears as its own item.
  • Invalid JSON-LD is reported rather than silently dropped, with the first part of the offending block so you can find it.
  • The fastest way to see what a competitor's product pages actually declare: price, availability, ratings.
  • Structured data is often richer and cleaner than the visible page — scrape it before you scrape the DOM.
With Irmu

When you also need to fetch the page

A browser cannot fetch arbitrary URLs. Irmu returns the HTML — rendering, proxies and retries included — and you run the same extraction over it.

crawl_and_extract.py
# 1. Fetch the page with Irmu — rendering, proxies and retries handled for you
# 2. Extract the fields you need locally

import os, json, requests
from bs4 import BeautifulSoup

resp = requests.get(
    "https://app.irmu.com/api/crawl",
    headers={"Authorization": f"Bearer {os.environ['IRMU_API_KEY']}"},
    params={"url": "https://store.example.com/products/acme-headphones", "render": "true"},
    timeout=60,
)
resp.raise_for_status()

soup = BeautifulSoup(resp.text, "html.parser")

data = {
    "name": soup.select_one("h1").get_text(strip=True),
    "price": soup.select_one(".price").get_text(strip=True),
    "reviews": [r.get_text(strip=True) for r in soup.select(".review")],
}

print(json.dumps(data, indent=2))
Code examples

Do the same thing in your own pipeline

The equivalent extraction with the standard HTML parser in each language.

# pip install beautifulsoup4

import json
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")

import json

data = {"jsonld": []}
for script in soup.select('script[type="application/ld+json"]'):
    try:
        parsed = json.loads(script.string or "")
    except json.JSONDecodeError:
        continue
    data["jsonld"].extend(parsed if isinstance(parsed, list) else [parsed])

print(json.dumps(data, indent=2))
FAQ

Questions about this tool

Turn any URL into clean JSON

Fetch, render and extract with one API. 1,000 free credits every month, no card required.