URL Query Parameter Parser

Break a URL into its components, then inspect, edit, sort and export every query parameter — without leaving your browser.

Paste any URL (or just a raw query string like page=3&sort=desc) and the parser splits it into protocol, host, port, path, query and fragment. Every query parameter lands in an editable table: fix a typo, change a value, drop a tracking parameter, sort keys alphabetically or remove duplicates — then copy the result back as a rebuilt URL, a bare query string, JSON, a JavaScript object, a Python dict or a cURL command.

🔒 100% private — nothing is uploaded or stored. The URL and every parameter are parsed and rebuilt entirely in your browser. Nothing is sent to a server, logged or saved — handy when the URL contains tokens, session IDs or other sensitive values.

1 · Paste a URL or query string

Try:

2 · URL components

Parse a URL to see its components here.

3 · Query parameters

Edit keys and values inline — every export below updates live. Values are shown decoded.

4 · Export

Rebuilt URL

—

Query string

—

JSON

—

JavaScript object

—

Python dict

—

cURL command

—
Fragments are never sent to servers, so the cURL export always omits them.

How query strings work

Everything after the ? in a URL is the query string: a list of key=value pairs separated by &. Browsers and frameworks decode it into the parameters your code sees. A few rules trip people up regularly:

  • Encoding. Query strings officially use application/x-www-form-urlencoded: spaces become +, and everything outside A–Z a–z 0–9 - _ . ~ becomes a %XX escape. Many APIs also accept percent-encoded spaces (%20) — both forms are valid, which is why the export above lets you pick.
  • Duplicate keys are legal. ?tag=a&tag=b is a perfectly valid query string. Frameworks usually expose it as a list (tag: ["a", "b"]) or let the last value win — which is why the duplicate flag and de-dupe buttons exist. Note that JSON, JavaScript and Python objects can only hold one value per key, so those exports keep the last occurrence.
  • Bare keys mean empty values. ?verbose is the same as ?verbose= — a flag with an empty string value. This tool re-serialises bare keys as key= so the intent stays explicit.
  • The fragment never reaches the server. Everything after # is used only by the browser (anchors, SPA routing). It is excluded from cURL exports automatically and optional in the rebuilt URL.
  • Length limits are real but generous. Modern browsers handle query strings of several thousand characters; the practical ceiling is usually the server (nginx defaults to 8 KB for request headers). If a URL keeps getting rejected, move large data into the request body instead.

Need the other half of this job — encoding or decoding individual values and whole URLs — see the URL Encoder / Decoder.


Luke Keam
Spot a bug or want a custom utility built? I'd love to hear from you. Get in touch
Luke Keam | techgeek.biz