Updated Jul 15, 2026

Utilities

Slice URL lists into hosts, paths, or query keys

Extract chosen URL parts from stdin into clean line lists.

Agent

overview

What unfurl does

unfurl reads a list of URLs and emits one chosen component per line: domains, apexes, paths, query keys, values, or key=value pairs. That turns a crawl dump into the slice the next stage needs.

Built-in selectors cover the common cases. format mode templates any combination of URL parts into a custom shape. --unique deduplicates as it emits so hosts or parameters become tidy wordlists.

Trickest runs unfurl as a managed utility node that takes a URL file and writes a file plus a folder. Place it between a crawler and a fuzzer or prober when you need hosts, paths, or parameters without writing a parser.

source github.com/tomnomnom/unfurl

use cases

Where unfurl fits

Extract unique hosts from crawled URLs

Run domains mode with --unique over a crawl dump to get a clean, deduplicated list of hostnames to feed a prober.

Build a parameter list for fuzzing

Pull query-string keys out of a URL set so a parameter fuzzer like x8 or ffuf has a real list to work from instead of guesses.

Reduce to apex domains for scoping

Use apexes mode to collapse sub.example.com and api.example.com down to example.com, handy for building an in-scope domain list.

Reshape URLs with a custom format

Template scheme, host, and path with the format mode to emit exactly the URL shape a downstream tool expects, no scripting required.

reference

unfurl inputs and flags

11 inputs
NameTypeFlagDescription
urlsFILE·List of URLs
domainsBOOLEANdomainsThe hostname (e.g. sub.example.com)
apexesBOOLEANapexesThe apex domain (e.g. example.com from sub.example.com)
pathsBOOLEANpathsThe request path (e.g. /users)
keysBOOLEANkeysKeys from the query string (one per line)
valuesBOOLEANvaluesValues from the query string (one per line)
formatSTRINGformatSpecify a custom format
uniqueBOOLEAN--uniqueOnly output unique values

Showing key inputs. unfurl exposes 11 inputs in total.

Full flag reference (11 inputs)
NameTypeFlagDescription
jsonBOOLEANjsonJSON encoded url/format objects
keysBOOLEANkeysKeys from the query string (one per line)
urlsFILE·List of URLs
pathsBOOLEANpathsThe request path (e.g. /users)
apexesBOOLEANapexesThe apex domain (e.g. example.com from sub.example.com)
formatSTRINGformatSpecify a custom format
uniqueBOOLEAN--uniqueOnly output unique values
valuesBOOLEANvaluesValues from the query string (one per line)
domainsBOOLEANdomainsThe hostname (e.g. sub.example.com)
verboseBOOLEAN--verboseVerbose mode (output URL parse errors)
keypairsBOOLEANkeypairsKey=value pairs from the query string (one per line)

example

Run unfurl

unfurl · command
# extract unique hostnames from a crawl dumpcat urls.txt | unfurl --unique domains # extract query keys for a parameter wordlistcat urls.txt | unfurl --unique keys
sample output
example.comwww.example.comapi.example.comstaging.example.comcdn.example.commail.example.comdev.example.comapp.example.com

guidance

Choosing unfurl

Reach for unfurl when you need one URL part from a list: hosts, apexes, paths, or query keys. It makes no requests. Run it between a crawler and a fuzzer or prober. For deduplicating whole URLs instead of extracting parts, use urldedupe.

urldedupe

Deduplicates whole URLs by path and query shape. unfurl extracts a chosen part.

gron

Flattens JSON into greppable lines. unfurl does the same idea for URL components.

qsreplace

Rewrites query-string values. unfurl extracts keys and values rather than replacing them.

faq

unfurl questions

Domains, apexes, paths, query keys, values, and key=value pairs, plus custom combinations via format mode.

Run unfurl yourself

A list of URLs feeds unfurl, which extracts the unique hostnames and writes them as a queryable output for the next stage to scope against.

Facts on this page come from the live Trickest tool library.