Bulk URL Unshortener — Redirect Chain Resolver
Pricing
from $3.50 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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-fix —
bit.ly/xyzis automatically upgraded tohttps://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:
| Field | Description |
|---|---|
originalUrl | The short URL that was submitted |
finalUrl | The final resolved URL after following all redirects |
isShortened | true if at least one redirect was followed, false if the URL was already the final destination |
hopCount | Number of redirect hops traversed |
redirectChain | Full chain as a JSON array — each hop has url, statusCode, redirectType, nextUrl, latencyMs |
chainUrls | Comma-separated list of all URLs in the redirect chain (in traversal order) |
totalLatencyMs | Total round-trip time in milliseconds for the full resolution |
statusCode | HTTP status code of the final destination |
error | Error message if resolution failed (timeout, DNS, TLS, etc.) |
resolvedAt | ISO 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
- Click Try for free / Start.
- Paste your list of short URLs into URLs to Unshorten — one per line.
- (Optional) Adjust Max Redirects and Max Concurrency for large lists.
- Click Save & Start, then export the dataset as JSON, CSV, Excel or via API. Filter by
hopCountorisShortened.
⚙️ Input
| Field | Type | Description | Default |
|---|---|---|---|
urls | array (required) | Shortened URLs to resolve. Any URL works — shortened or not. | – |
maxRedirects | integer | Maximum redirect hops to follow per URL before stopping. | 15 (max 30) |
maxConcurrency | integer | Parallel resolution. Higher is faster. | 20 (max 100) |
proxyConfiguration | object | Proxy 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
errorfield.
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
redirectChainJSON 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
totalLatencyMsdescending 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.
Does it handle t.co / X (Twitter) short links?
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.
What if a short link redirects many times?
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.
🔗 Related actors by the same author
- Bulk URL Status Checker — HTTP status codes, broken link detection and response times for large URL lists.
- Bulk HTTP Security Headers Analyzer — scan CSP, HSTS, X-Frame-Options and score security posture.
- Bulk DNS Records Lookup — A, AAAA, MX, TXT, NS, CNAME, SOA, CAA for thousands of domains.
- Website Contact Scraper — extract emails, phones and social profiles from websites.
📝 Changelog
2026-06-24
- Initial release — bulk URL unshortening with full redirect chain tracing, hop-by-hop latency, no API key, CSV/JSON export.