Bulk URL Unshortener — Redirect Chain Resolver avatar

Bulk URL Unshortener — Redirect Chain Resolver

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Bulk URL Unshortener — Redirect Chain Resolver

Bulk URL Unshortener — Redirect Chain Resolver

Resolve thousands of shortened URLs at once — bit.ly, t.co, ow.ly, TinyURL and every shortener. Traces the full redirect chain (every hop, status code, redirect type) and returns the final URL, latency and intermediate destinations. No API key, export to CSV or JSON.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Bulk URL Unshortener 🔗 — Redirect Chain Resolver

Resolve thousands of shortened URLs in a single run. This bulk URL unshortener takes your list of short links — bit.ly, t.co, ow.ly, TinyURL, short.link and every other URL shortener — and follows every redirect hop until the final destination. Each hop is logged with its HTTP status code, redirect type (permanent/temporary), next URL and per-hop latency.

Every short link expands to one row with the full redirect chain as structured JSON, the hop count, the final URL and total resolution time. No API key, no captcha solver, no headless browser — pure HTTP HEAD requests. Paste a few hundred short links and get thousands of rows of redirection intelligence.

Looking for a URL expander, a short link resolver, a redirect chain tracer, or a free URL unshortener API? This actor resolves them all at scale.


✨ Key features

  • 🔗 Resolve any shortener — bit.ly, t.co, ow.ly, TinyURL, short.link, Rebrandly, and every custom short domain.
  • 🧭 Full redirect chain — every hop captured: URL, status code, redirect type (301/302/303/307/308) and next URL.
  • 🧵 Chain URLs as text — comma-separated list of all URLs in the chain for quick scanning.
  • ⏱️ Per-hop latency — every hop records its round-trip time; total latency for the full chain also captured.
  • 📊 One row per URL — each input URL gets one row with all chain details in structured JSON.
  • 🧹 Protocol auto-fixbit.ly/xyz is automatically upgraded to https://bit.ly/xyz.
  • High concurrency — configurable parallel resolution (default 20, up to 100).
  • 🛡️ Loop prevention — configurable max redirects (default 15); stops cleanly rather than following infinite chains.
  • 🔑 No API key — uses standard HTTP HEAD requests; no external service needed.

💡 Use cases

  • Security / phishing analysis — trace where a suspicious short link actually leads without opening it in a browser.
  • Digital forensics & OSINT — map redirection chains across campaigns, ad networks and tracking links.
  • Marketing link audit — verify that shortened links in emails, social posts and ads still point to the correct destination.
  • SEO audit — confirm that short links used in backlinks and social profiles resolve to the right canonical URLs.
  • Brand protection — scan for short links that impersonate your brand and trace where they redirect.
  • Data enrichment — append resolved destinations to large URL datasets for content categorization.

📦 What you get

Each row in the dataset is one shortened URL fully traced:

FieldDescription
originalUrlThe short URL that was submitted
finalUrlThe final resolved URL after following all redirects
isShortenedtrue if at least one redirect was followed, false if the URL was already the final destination
hopCountNumber of redirect hops traversed
redirectChainFull chain as a JSON array — each hop has url, statusCode, redirectType, nextUrl, latencyMs
chainUrlsComma-separated list of all URLs in the redirect chain (in traversal order)
totalLatencyMsTotal round-trip time in milliseconds for the full resolution
statusCodeHTTP status code of the final destination
errorError message if resolution failed (timeout, DNS, TLS, etc.)
resolvedAtISO 8601 timestamp of when the resolution was performed

Example output

[
{
"originalUrl": "https://bit.ly/3abcXYZ",
"finalUrl": "https://example.com/landing-page?utm_source=twitter",
"isShortened": "true",
"hopCount": "2",
"redirectChain": "[{\"url\":\"https://bit.ly/3abcXYZ\",\"statusCode\":301,\"redirectType\":\"permanent\",\"nextUrl\":\"https://example.com/lp\",\"latencyMs\":95},{\"url\":\"https://example.com/lp\",\"statusCode\":302,\"redirectType\":\"temporary\",\"nextUrl\":\"https://example.com/landing-page?utm_source=twitter\",\"latencyMs\":42}]",
"chainUrls": "https://bit.ly/3abcXYZ, https://example.com/lp",
"totalLatencyMs": "162",
"statusCode": "200",
"resolvedAt": "2026-06-24T12:00:00.000Z"
},
{
"originalUrl": "https://t.co/xyz789",
"finalUrl": "https://github.com/logiover",
"isShortened": "true",
"hopCount": "2",
"redirectChain": "[{\"url\":\"https://t.co/xyz789\",\"statusCode\":301,\"redirectType\":\"permanent\",\"nextUrl\":\"https://github.com/logiover\",\"latencyMs\":210}]",
"chainUrls": "https://t.co/xyz789",
"totalLatencyMs": "245",
"statusCode": "200",
"resolvedAt": "2026-06-24T12:00:01.000Z"
}
]

🚀 How to use it

  1. Click Try for free / Start.
  2. Paste your list of short URLs into URLs to Unshorten — one per line.
  3. (Optional) Adjust Max Redirects and Max Concurrency for large lists.
  4. Click Save & Start, then export the dataset as JSON, CSV, Excel or via API. Filter by hopCount or isShortened.

⚙️ Input

FieldTypeDescriptionDefault
urlsarray (required)Shortened URLs to resolve. Any URL works — shortened or not.
maxRedirectsintegerMaximum redirect hops to follow per URL before stopping.15 (max 30)
maxConcurrencyintegerParallel resolution. Higher is faster.20 (max 100)
proxyConfigurationobjectProxy used for the HTTP requests.Apify Proxy (datacenter)

Example input

{
"urls": ["https://bit.ly/3abc", "https://t.co/xyz", "https://tinyurl.com/example"],
"maxRedirects": 15,
"maxConcurrency": 20,
"proxyConfiguration": { "useApifyProxy": true }
}

🔍 How it works

For each URL, the actor sends an HTTP HEAD request with followRedirect: false. When a 3xx status code with a Location header is returned, the hop is logged and the actor follows to the next URL. Each hop measures its own latency individually, and the process repeats until:

  • A non-redirect status (2xx, 4xx, 5xx) is returned → this is the final destination.
  • The max redirect limit is reached → the chain is cut and the last URL is recorded as final.
  • A network/timeout/DNS error occurs → the resolution fails gracefully with an error field.

Using HEAD instead of GET makes resolution fast — we don't download any page content, just the HTTP response headers. This means thousands of short links can be resolved per run with minimal bandwidth.

🧰 Tips & best practices

  • Paste full short URLs including https:// — if you omit it the actor adds it automatically.
  • Use the Max Redirects field to cap resolution depth and avoid infinite redirect loops.
  • Increase Max Concurrency for very large lists; keep Apify Proxy enabled to avoid per-IP rate limiting from shorteners.
  • Parse the redirectChain JSON to extract per-hop details for forensic or audit workflows.
  • Filter by isShortened: "false" to find URLs that are already direct (no redirection).
  • Export to CSV/Excel and sort by totalLatencyMs descending to find slow redirect chains.

❓ FAQ

How do I resolve many short URLs at once?

Paste your full list of short links into the URLs field and run the actor once. It follows every redirect chain in parallel and returns one row per URL with the full chain captured.

Can I trace the full redirect path?

Yes — the redirectChain field contains structured JSON with every hop: the URL at each step, its HTTP status code, whether the redirect was permanent or temporary, the next URL it pointed to, and the latency of that individual hop.

Is this a free URL unshortener API without a key?

There's no API key to manage. The actor uses standard HTTP HEAD requests — no external unshortening service, no captcha solving, no headless browser. Just provide URLs and run.

Yes — t.co links are standard HTTP redirects and resolve cleanly. The actor handles 301/302/303/307/308 redirects from any shortener, including t.co, bit.ly, ow.ly, TinyURL, Rebrandly, and custom short domains.

The maxRedirects setting (default 15) caps the number of hops. If the limit is reached, the chain is cut and the last URL is reported as the final destination. No infinite loops.

Can I export resolved URLs to CSV or JSON?

Yes — download the dataset as CSV, JSON or Excel, or pull it through the REST API.

📝 Changelog

2026-06-24

  • Initial release — bulk URL unshortening with full redirect chain tracing, hop-by-hop latency, no API key, CSV/JSON export.