PAGES
← all tools
◆ Digital Forensics & Incident Response

Unfurl

v2026.11 open-source

Parses URLs into directed graphs, extracting and visualizing components like timestamps, UUIDsUUIDsA universally unique identifier, usually a 128-bit value used to identify an object across systems. It is designed to make independently generated identifiers unlikely to collide., and platform-specific metadata.

Summary

Unfurl is an open-source DFIRDFIRDigital forensics and incident response, investigating what happened during a security incident and containing it. The work includes preserving evidence, reconstructing activity and restoring systems. tool that takes a URL and breaks it down into a directed graph, extracting and visualizing components such as timestamps, UUIDs, domain structure, and platform-specific metadata from services like Twitter and other social or chat sites. It runs as a command-line tool or a local web app installed via pip, and a hosted version exists for quick one-off lookups, which suits forensic analysts and incident responders trying to understand a URL pulled from a memory image, browser history, or slack space. Its plugin system makes it extensible to new URL formats as they appear, and it sits in the DFIR parsing and artifact analysis space rather than general OSINTOSINTOpen-source intelligence, collecting and analyzing information from publicly available sources. Investigators use it to learn about people, infrastructure or threats. tooling. First committed in 2019, it has 14 contributors and remains active, with 43 commits and 12 releases in the past year.

Parses URLs into directed graphs, extracting and visualizing components like timestamps, UUIDs, and platform-specific metadata.

How Unfurl helps

What is actually encoded inside this timestamp-shaped string I found in a URL?

breaks it down against known epoch, UUID version, and platform-specific timestamp formats (WebKit milliseconds, Mac Absolute Time, Snowflake IDs, and more) and shows the decoded date directly on the graph

What is this obfuscated or wrapped link actually pointing to?

unwraps Safe Links, ad-click redirects, and similar wrapper formats to surface the real destination URL along with any embedded scan verdicts, recipient GUIDs, or click IDs riding along with it

What does this defanged indicator from a threat report actually resolve to?

refangs the string into a proper URL or IP, with a hover showing every substitution it made, so the underlying indicator is unambiguous

Which pieces of this social media or chat URL correspond to a user, a post, or a timestamp?

walks the path and query segments against site-specific parsers for platforms like Twitter, Instagram, Facebook, and Discord, labeling each fragment and decoding any embedded IDs into their creation timestamps

Where did each piece of structure in this URL actually come from?

lays out every component as a node in a graph with the parser and reasoning behind each extraction shown alongside it, so the derivation is visible rather than asserted

Is this file extension in a suspicious link one that's commonly abused to deliver malware?

flags file extensions in the path against a list of types known to be used for malware delivery, right where the extension appears in the graph

all 6 features, with the evidence for each →

Languages

Not documented

Features

6 capabilities · 1 backed by code, an API document or a real run

Built from Unfurl's releases, docs, README and our own runs. “Seen” marks the month we first spotted a release the vendor didn't date. Group names and tags are our labels.

Compare with peers →

  • Unfurl covers 1 of the 8 investigation and response capabilities we track.

What Unfurl offers you

  • Python scripting support2
  • Command-line interface
All capabilities 6 capabilities
Platform URL Parsing shipped Parses and decodes complex structures for URLs from social networks, search engines, file storage, and other web platforms. 34 releases · 4 other sources · first seen Aug 2020

release 34 total

  • Unfurl now parses ChatGPT and OpenAI IDs embedded in URLs. v2026.11 · Oct 2026 · source · release history
  • Adds Bing form code parsing (including indexed variants) and image search parameters (thid, mediaurl, sbifnm, iss, view, and more). v2026.09 · Sep 2026 · source · release history
  • Preserves literal + characters outside query strings (e.g., Gmail compose tokens). v2026.09 · Sep 2026 · source · release history
  • Expands Bing search parser to include form codes and image search parameters (thid, mediaurl, etc.). v2026.09 · Sep 2026 · source · release history
  • Supports URL Text Fragments (#:~:text=) and SPA-style fragment routes (#/route?key=value). v2026.09 · Sep 2026 · source · release history
  • New Facebook parser for posts, photos, videos, groups, events, stories, pages, Marketplace, profiles, comments, and modern fbclid decoding. v2026.09 · Sep 2026 · source · release history

example

  • Write a custom site definition in YAML to add parsing support for a new internal URL structure without modifying Python code. # Example entry in unfurl/parsers/site_defs/my_company.yaml sites: - name: 'MyCorp Internal' patterns: - 'https://internal.mycompany.com/docs/(?P<doc_id>[^/]+)' url_components: path: - type: string… v2026.09 · Sep 2026 · source
  • Extract a TikTok creator's ID from a short link where the ID is not in the URL path. unfurl -p tiktok_bare_id https://vm.tiktok.com/ZS8j9Kz1/ 20201102 · Nov 2020 · source
  • Unfurl a Twitter URL into components unfurl https://twitter.com/_RyanBenson/status/1205161015177961473
  • Unfurl URL with special shell characters unfurl "https://www.google.com/search?&ei=yTLGXeyKN_2y0PEP2smVuAg&q=dfir.blog&oq=dfir.blog&ved=0ahUKEwisk-WjmNzlAhV9GTQIHdpkBYcQ4dUDCAg"
Token and ID Decoding shipped Decodes various token formats, identifiers, and encoded payloads to extract embedded data such as timestamps, IDs, and secrets. 16 releases · 1 other source · first seen Nov 2020

Also counts toward: Python scripting support

release 16 total

  • Unfurl now parses Firebase Push IDs embedded in URLs. v2026.11 · Oct 2026 · source · release history
  • Adds Gmail parser for legacy hex IDs, new-style (2018+) URL tokens (th, compose, permmsgid, permthid, projector) with decoded timestamps. v2026.09 · Sep 2026 · source · release history
  • New parser for itsdangerous signed tokens (used by Flask and other Python web apps), extracting payload (decompressed if needed), signing timestamp, and signature. v2026.09 · Sep 2026 · source · release history
  • Decodes Discord snowflakes in general URLs, query values, and token payloads for snowflakes created after July 2022. v2026.09 · Sep 2026 · source · release history
  • Parses Fernet tokens (version, cleartext timestamp, IV, ciphertext, HMAC) including ChatGPT Ads click ID format (oppref, olref). v2026.09 · Sep 2026 · source · release history
  • Adds itsdangerous signed token support (Flask/Python web apps) extracting payload, signing timestamp, and signature. v2026.09 · Sep 2026 · source · release history

example

  • Decode an image URL containing an Apache-style ETag in a query parameter to recover the origin file size and modification time. unfurl "https://example.com/image.jpg?etag=%22f4381-6385a594%22" v2026.11 · Oct 2026 · source
Security and Forensic Analysis shipped Provides capabilities for analyzing security indicators, including refanging defanged IOCs, detecting malicious file extensions, parsing Safe Links wrappers, and extracting embedded IP addresses. 11 releases · 3 other sources · first seen Mar 2021

Shared capability: Threat indicator matching

release 11 total

  • Unfurl now parses ETags found in etag query parameters or quoted header values ("..." or W/"...") and decodes layouts from Apache httpd, nginx, and Node.js, extracting file size, mtime (seconds, milliseconds, or microseconds), inode, and compression suffix.⁠︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄⁠ v2026.11 · Oct 2026 · source · release history
  • New parser for Microsoft Defender Safe Links, extracting the wrapped destination URL and pipe-delimited data field (format versions 01 through 05): recipient, message and tenant GUIDs, timestamp, scan verdict, and scan payload. v2026.09 · Sep 2026 · source · release history
  • New parser for file extensions, identifying file type and flagging extensions commonly abused to deliver malware. v2026.09 · Sep 2026 · source · release history
  • Adds file extension analysis to path segments, flagging malware-common extensions. v2026.09 · Sep 2026 · source · release history
  • Parses Microsoft Defender Safe Links URLs, extracting recipient, message/tenant GUIDs, timestamp, scan verdict, and payload via the pipe-delimited data field (formats 01-05). v2026.09 · Sep 2026 · source · release history
  • New parser for defanged indicators (e.g. hxxps://evil[.]com/payload[.]exe, 1.2.3[.]4, user[at]evil.com), refanging them into a new node with a hover listing every replacement made. v2026.09 · Sep 2026 · source · release history

example

  • Unfurl a Safe Links-wrapped URL from a phishing email to recover the original destination, recipient GUID, and scan verdict without sending data to external services. unfurl 'https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fevil.example.com%2Fpayload&data=05%7Crecipient-guid%7C...' v2026.09 · Sep 2026 · source
  • Refang a defanged IOC from a threat report and extract all embedded structure in one step. unfurl 'hxxps://evil[.]example[.]com/payload[.]exe' v2026.09 · Sep 2026 · source
  • Parse URLs generated by the Metasploit framework to extract embedded parameters and targets. unfurl 'http://attacker/m/msf?p=1&cmd=id' v2021.06.15 · Jun 2021 · source
Output configuration verified Controls how results are formatted and enriched, including the type of output produced and optional remote lookups to enhance results. 9 releases · 5 other sources · first seen Jun 2021

release 9 total

  • Adds unfurl.local.ini as the user-overridable config file that takes precedence over unfurl.ini. v2026.09 · Sep 2026 · source · release history
  • Parses MISP warninglists once per process instead of on every request. v2026.09 · Sep 2026 · source · release history
  • Old API key environment variable names (bitly, virustotal, google_kg) are deprecated and will be removed in a future version; use UNFURL_BITLY_API_KEY, UNFURL_VIRUSTOTAL_API_KEY, and UNFURL_GOOGLE_KG_API_KEY instead. v2026.09 · Sep 2026 · source · release history
  • -l flag on CLI controls remote lookups and overrides UNFURL_REMOTE_LOOKUPS environment variable and config files. v2026.09 · Sep 2026 · source · release history
  • New environment variables UNFURL_BITLY_API_KEY, UNFURL_VIRUSTOTAL_API_KEY, and UNFURL_GOOGLE_KG_API_KEY for API keys (old names logged deprecation warnings). v2026.09 · Sep 2026 · source · release history
  • Adds YAML-based site definitions system (see unfurl/parsers/site_defs/README.md) to teach Unfurl a site's URL structure without writing Python. v2026.09 · Sep 2026 · source · release history

docs

  • Parses URLs into directed graphs, extracting and visualizing components like timestamps, UUIDs, and platform-specific metadata.

command line

example

  • Disable remote lookups via environment variable to prevent outbound network requests from the tool. UNFURL_REMOTE_LOOKUPS=False unfurl https://example.com/link v2026.09 · Sep 2026 · source
  • Run remote lookups to identify hashes from an online database instead of relying on local data. unfurl -l urls.txt v2021.06.15 · Jun 2021 · source
Timestamp and Date Handling shipped Detects, converts, and extracts timestamps from various formats and sources within URLs and tokens. 10 releases · 3 other sources · first seen Nov 2020

release 10 total

  • Unfurl now converts WebKit, WebKit milliseconds, Windows FileTime, and UUID v1/v6 timestamps with integer math instead of floating-point, preserving source precision (three digits for WebKit milliseconds, six for WebKit, seven for FileTime and UUID times). v2026.11 · Oct 2026 · source · release history
  • Extends Epoch seconds auto-detection to cover dates from 2010 onward. v2026.09 · Sep 2026 · source · release history
  • Extracts timestamps from UUID versions 6, 7, and 8. v2026.09 · Sep 2026 · source · release history
  • New Instagram parser for posts, reels, stories, highlights, profiles, shortcodes, and story IDs with creation timestamp/shard/sequence extraction. v2026.09 · Sep 2026 · source · release history
  • Supports new timestamp formats: WebKit milliseconds, Epoch nanoseconds, PostgreSQL, Mac Absolute Time nanoseconds. v2026.09 · Sep 2026 · source · release history
  • Adds datetime.UTC as tzinfo for timestamp nodes v2025.08 · Aug 2025 · source · release history

example

  • Resolve a Bluesky handle to its DID and print the creation timestamp unfurl --bsky-did https://bsky.app/profile/example.com v2025.02 · Feb 2025 · source
  • Parse a Unix epoch hex value directly into a human-readable timestamp. unfurl -p epoch_hex https://example.com?t=5F204E80 20201102 · Nov 2020 · source
  • Parse a Microsoft FileTime hex value to determine file creation/modification time. unfurl -p filetime_hex https://example.com?t=01D5A4B8C9E20000 20201102 · Nov 2020 · source
Output and Presentation Options shipped Controls how results are formatted, presented, and enriched through various output modes and configuration overrides. 4 releases · 1 other source · first seen Nov 2022

Also counts toward: Python scripting support

release

  • New Tree view in the web UI for hierarchical graph visualization. v2026.09 · Sep 2026 · source · release history
  • Adds dark mode to the web UI, with user preference remembered. v2026.09 · Sep 2026 · source · release history
  • New Text view in the web UI with copy-to-clipboard functionality. v2026.09 · Sep 2026 · source · release history
  • Adds Tree and Text views alongside the Graph in the web UI, with copy-to-clipboard for the text tree. v2026.09 · Sep 2026 · source · release history

example

  • Execute an unfurl analysis programmatically and print the results as a hierarchical tree in Python or Jupyter. import unfurl unfurl.run(url) unfurl.print_tree() v2022.11 · Nov 2022 · source

Lines in monospace are the tool's own words: help text parsed from its source, or an endpoint from its API document. Under release, a line is our summary of a dated release. Under docs, it is quoted from the tool's own documentation or website. Each links back to the source it came from.

Score card

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median time to a maintainer’s first reply

Nine scores for Unfurl, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.

Score cards are part of every paid plan.

See plans →

Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.

How this is scored
  • Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
  • Documentation quality — the release-notes rubric published on the analytics page, unchanged.
  • Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
  • Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
  • Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
  • Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
  • Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
  • Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.

Release-note detail over time

See how much detail Unfurl puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.

Checking release-note history…

Explore the full chart →

Releases

Show

14 entries

  1. October 20261
  2. September 20261
  3. April 20261
  4. August 20251
  5. March 20251
  6. February 20251
  7. November 20241
  8. September 20231
  9. November 20221
  10. February 20221
  11. June 20211
  12. March 20211
  13. November 20201
  14. August 20201
    Show

    14 entries

    Project health

    Issue, contributor and maintainer activity in obsidianforensics/unfurl, 2023-10 – 2026-09, as of 2026-09-25. Twelve-month figures first; the trend lines run the whole window.

    1. Contributors 1 −2 vs prior 12 months
    2. Maintainers 1 +0 joined · −1 left, last 12 months
    3. Bus factor 1 committers behind half the commits
    4. Community-filed not measured of issues opened, last 12 months
    5. Median time to close not measured issues closed, last 12 months
    6. Open backlog not measured open issues today
    1. Issues opened / month not measured
    2. Open backlog not measured
    3. Contributors / month 1
    4. Commits / month 11
    5. Stars 765
    Issue themes, last 12 months not measured

    Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this

    Add the badge to your README

    Maintain this project? The badge links readers straight to this page, so they can follow every release here.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →