urltoolskit.org
URL utilities, in the browser
Say hi →

URL pattern expander

{a,b,c} alternation · [1-100] ranges with step and padding · [a-z] letters

The same globbing syntax curl uses, in a box that shows you the result before you run anything. Write one pattern with {staging,prod} and [1-50] in it and get the full list of URLs out — for a warm-up script, a load test, a batch of pages to check, or the ninety image URLs a designer needs.

Ready.

How to use

  1. Write your pattern. Expansion happens as you type, so the count in the status line tells you immediately whether the ranges are what you meant.
  2. {a,b,c} expands to each alternative. Nest and combine freely — {en,de}/{docs,blog} gives four results.
  3. [1-20] expands to a numeric range. Add a step with [0-100:10], and get zero padding by writing the first number padded: [001-010] produces 001010.
  4. [a-f] expands to a letter range, in either direction — [z-a] counts down.
  5. Copy the list, or download it. Generation is capped at 10 000 URLs per run.

Syntax reference

PatternExpands to
page-{a,b,c}page-a, page-b, page-c
page-[1-4]page-1page-4
page-[001-003]page-001, page-002, page-003
page-[0-20:5]page-0, page-5, page-10, page-15, page-20
page-[10-1]counts down: page-10page-1
rev-[a-d]rev-a, rev-b, rev-c, rev-d
{a,b}/x-[1-2]all four: a/x-1, a/x-2, b/x-1, b/x-2
{,beta-}pagean empty alternative is allowed: page, beta-page

What this is genuinely useful for

Checking a paginated archive after a migration. Expand /blog/page/[1-40], paste the list into your crawler or a curl loop, and find the page where the pagination broke.

Cache warming. Generate the URL set for the pages that must be hot after a deploy, and feed it to a script — far less error-prone than a hand-maintained list that drifts.

Building a test matrix. https://{dev,staging,prod}.example.com/{health,version,metrics} is nine endpoints from one line, and the pattern is self-documenting in a way nine pasted URLs are not.

Asset lists. Sequentially numbered images and video segments — segment-[00001-00300].ts — where writing them out by hand is not realistic.

One thing to be clear about: this generates a list, it does not request anything. Nothing is fetched, so nothing is hit until you take the list somewhere else. If you do, make sure it is a service you are responsible for — generating a range against someone else's site is a good way to look like an attack.

FAQ

Is this the same syntax as curl?

The common parts, yes — {} alternation and [n-m] ranges with :step all behave the same, and zero-padding works the way curl's does. curl also supports the #1 back-reference in output filenames, which has no meaning here.

Why is there a 10 000 cap?

Because [1-1000]{a,b,c}[1-100] is 300 000 URLs and a frozen tab. The cap keeps the tool responsive, and the status line tells you when it applied so you can narrow a range.

Can I use a literal brace or bracket?

Not currently — braces and brackets that look like patterns are expanded. If you need a literal one in a URL, percent-encode it (%7B, %5B), which is what it should be anyway.

How do I generate page URLs with a query parameter instead?

The pagination URL generator is purpose-built for that — it handles ?page=, offset/limit and path-segment styles, and knows about omitting the parameter on page one.