Private PDF/JSON tools that run directly in your browser

JSON Query Playground

Paste JSON, write a real SQL SELECT query, get rows back - WHERE, GROUP BY, JOIN, aggregates, all of it. Nested JSON works too, without reshaping it first.

Prefer it computed on a server instead (e.g. for very large datasets)? Use the server-backed version →

🔒 This version runs entirely in your browser. Your JSON and query are never sent anywhere. All the work is done on your device.

Load an example to see how it works

Quick test: look at the JSON you pasted above - is it already the list you want to query (it starts with [)? Then leave this blank. Is that list buried inside other keys instead - like {"order": {"items": [...]}}? Then type the path to it here, e.g. order.items.

Not sure where to start? Pick the closest example above, then edit the query and column names to match your own data.

Reference: root paths, and how this differs from the server version
When to leave root blank
Your pasted JSON is already the table: either a bare array of objects (becomes table data), or an object whose values are each arrays (one table per key).
When to set root
The list you want is nested inside other keys - e.g. you have the whole order, but only want order.items. A dotted path (root: "order.items") reaches it without cutting it out yourself.
root as an object
{"items":"order.items","customer":"order.customer"} pulls more than one nested location out as separate tables so you can JOIN them.
No server-side limits here
Because this runs on your own device, there's no shared row/time cap to protect - only a display cap (5,000 rows shown) so a huge result doesn't slow down the page itself. Very large JSON is bounded by your browser's own memory, not by us.
If json_extract/json_each say "no such function"
Rare, but possible - it means the specific build that loaded doesn't support those JSON functions. Everything else (plain columns, WHERE, GROUP BY, JOIN) is unaffected either way.
🤖 Use this tool from an AI agent (WebMCP)

This page offers 1 tool that an AI agent running in the browser can call directly, without clicking through the page. A call runs in your tab like the buttons do, and nothing is uploaded.

How to turn it on and try it

  1. Use Chrome 149 or later on a computer. TinyPDF.in is enrolled in Chrome's WebMCP trial, so there is nothing to switch on.
  2. Keep this page open and open the console (F12, then Console).
  3. Paste this:
const tools = await document.modelContext.getTools();
const tool = tools.find(t => t.name === 'query_json_with_sql');
await document.modelContext.executeTool(tool, JSON.stringify({
  "json": "[{\"city\":\"Pune\",\"amount\":120},{\"city\":\"Delhi\",\"amount\":80},{\"city\":\"Pune\",\"amount\":60}]",
  "sql": "SELECT city, sum(amount) AS total FROM data GROUP BY city ORDER BY total DESC"
}));

In other browsers the page works as usual and offers no agent tools. Examples for every tool and what they return

Using a desktop agent such as Claude Code or Cursor? See how to connect it to this page.