Parse and build query strings
Free query-string parser and builder for web developers and integrators. Paste a full URL or just a query string (with or without the leading "?") and you get a table of key/value pairs you can edit; the URL rebuilds itself with proper RFC 3986 percent-encoding. Useful for analysing an OAuth redirect, dissecting a long utm_* analytics URL, decoding a tracking pixel's params, building a deep link for a marketing email, or turning a query string into a JSON object you can drop into a fetch() call. Array notation (foo[]=1&foo[]=2) and repeated keys both round-trip cleanly.
How to use
Or just a query string with or without "?".
Click any key or value, type, and the URL updates.
Need a new parameter? Click "Add row".
Copy as full URL, query only, or JSON.
Decode any query string into a visual table and rebuild it after editing — keys and values auto-encoded
Options
Parameters
Features
Typical uses
- Read a tracking URL (utm_source, utm_campaign, etc.) and see what parameters it carries.
- Add a new tracking parameter to a marketing URL without hand-editing.
- Convert a query string to a JSON object for pasting into JavaScript or a fetch() call.
- Sort a long URL's parameters alphabetically so two URLs can be compared.
- Build a properly-encoded URL from scratch by adding rows in the table.
Why this one
Most query-string tools dump the parsed key/value as raw text and force you to paste it back. We keep both the URL bar and the table live-synced — edit either, the other follows. Array notation, repeated keys and percent-encoded values all round-trip cleanly per RFC 3986 form-style encoding (spaces as +, reserved chars as %xx). No signup, no install — useful when you are debugging from someone else's machine.
Common questions
What is the difference between "?" and "#" in URLs?
Everything between "?" and "#" is the query string (sent to the server, indexed by Google). Everything after "#" is the fragment (kept by the browser, never sent to the server). This tool parses the query string only.
How is foo[]=1&foo[]=2 different from foo=1&foo=2?
On the wire they are equivalent — both send two values for "foo". The "[]" suffix is a PHP/Rails convention so the server-side framework parses them into an array automatically; without it those frameworks keep only the last value. Express.js, Flask and Django accept either form. Pick the one your backend prefers.
Does this work with hash routers (#?key=value)?
If you paste the full URL with the hash, the tool keeps the path/hash intact and only operates on the query portion before "#". If your app uses hash-based routing with query inside the hash, the tool will not auto-detect that — paste just the inner query string instead.
My value has special characters — will they survive a round-trip?
Yes. Keys and values are percent-encoded on output and decoded on input. Note the historical quirk: in the query string, spaces are encoded as "+", but in the URL path they must be "%20". The tool handles both correctly — if you paste a path with "%20" you get the literal space back; values you type get "+" in the query portion, which every modern server decodes identically.
Mobile?
Yes — the table collapses to stacked rows on narrow screens.
We can — and it's free! Just send us a quick message with your idea. If you'd like to discuss it in detail, leave your email and we'll get back to you. You can stay anonymous.