goo.gl Resolver — Unshorten Dead Google Short URLs via Wayback avatar

goo.gl Resolver — Unshorten Dead Google Short URLs via Wayback

Pricing

$4.00 / 1,000 goo.gl url resolve attempts

Go to Apify Store
goo.gl Resolver — Unshorten Dead Google Short URLs via Wayback

goo.gl Resolver — Unshorten Dead Google Short URLs via Wayback

Google killed goo.gl in Aug 2025. Resolves dead goo.gl short URLs to their original destinations via the Wayback Machine Availability and CDX APIs. Unified JSON output, optional page-title enrichment.

Pricing

$4.00 / 1,000 goo.gl url resolve attempts

Rating

0.0

(0)

Developer

Stephan Corbeil

Stephan Corbeil

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Google killed goo.gl on August 25, 2025. Here's how to unshorten the 5 billion URLs that went dark.

For over a decade, goo.gl was everywhere — stamped across marketing emails, press releases, printed brochures, QR codes, academic papers, PDFs, support docs, even business cards. Google quietly deprecated the shortener in 2018 and then, on August 25 2025, pulled the plug entirely. Every goo.gl/* link on the public internet now returns 404 Not Found. Permanently.

That's hundreds of millions of dead outbound links in your CRM, your old ad creative, your customer support macros, your affiliate history, your Zapier runs, your competitor's backlink profile, and every PDF you've ever filed. The destination URLs aren't gone — Google still has them, they just won't tell you what they were.

This actor tells you what they were. It queries the Internet Archive's Wayback Machine (which captured ~5 billion goo.gl/* redirects before the shutdown via ArchiveTeam's goo.gl Warrior project) and recovers the original destination URL, the snapshot date, and optionally the live page title.


What this actor does

For each goo.gl short URL you pass in, it:

  1. Queries the Wayback Availability APIhttps://archive.org/wayback/available?url=... — and retrieves the closest archived snapshot of the short URL.
  2. Replays the snapshot with id_ flavor so the Wayback Machine returns the raw archived HTTP response (including the original 301 Location header that goo.gl sent the browser back in the day).
  3. Falls back to the CDX APIhttps://web.archive.org/cdx/search/cdx?url=goo.gl/<code>&filter=statuscode:301 — when availability doesn't have a snapshot. CDX lets us reach deeper into the archive by scanning every recorded capture, not just the "closest" one.
  4. (Optional) Fetches the resolved destination and extracts its <title> tag, so you know whether the destination is still live and what it points to.

The output is a flat, consistent record per URL: short_url, short_code, resolved_url, resolved_via, snapshot_timestamp, page_title, resolved_domain, is_resolved.


Because goo.gl no longer serves redirects. From the Google URL Shortener shutdown notice:

All goo.gl URLs stopped serving HTTP 302 responses and now return HTTP 404 errors starting August 25, 2025. This applies to every goo.gl URL, including those previously generated from Firebase Dynamic Links.

A plain HTTP GET on any goo.gl/abc123 returns 404. No Location header. No redirect chain. Nothing. The only way to recover the original destination is through a URL that was captured before August 25 2025 — and essentially the only public source of those captures at scale is the Internet Archive.


Input

{
"urls": [
"https://goo.gl/maps/abc",
"goo.gl/xyz123",
"https://goo.gl/2hLmN"
],
"include_metadata": false,
"timeout_seconds": 15
}
FieldTypeDefaultNotes
urlsstring[]1 to 500 goo.gl URLs. Accepts goo.gl/xyz, https://goo.gl/xyz, http://goo.gl/maps/xyz, etc. Non-goo.gl entries are rejected with a resolved_via: "error" row.
include_metadatabooleanfalseWhen true, fetches the resolved destination and extracts the HTML <title>. Adds one extra HTTP round-trip per resolved URL.
timeout_secondsinteger15Per-request HTTP timeout (5-60). Wayback endpoints can be slow during peak hours — bump this if you see cdx timeouts.

Output (one record per URL)

{
"short_url": "https://goo.gl/2hLmN",
"short_code": "2hLmN",
"resolved_url": "https://www.example.com/some/original/path",
"resolved_via": "wayback_available",
"snapshot_timestamp": "20230815120001",
"page_title": "Example — a real page",
"resolved_domain": "www.example.com",
"is_resolved": true,
"error": null
}

Field reference:

  • short_url — normalized canonical form https://goo.gl/<code>.
  • short_code — the code itself (abc123, or maps/place/xyz for Maps short links).
  • resolved_url — the destination URL recovered from the archive. null when the link is permanently dead.
  • resolved_viawayback_available (the Availability API gave us a clean snapshot), wayback_cdx (we fell back to scanning the CDX index for the most recent 301 snapshot), dead (nothing in the archive), or error (HTTP error, bad input, etc.).
  • snapshot_timestamp — Wayback timestamp in YYYYMMDDhhmmss form. Useful if you want to pin a specific snapshot or audit freshness.
  • page_title — destination <title> tag (when include_metadata: true and the destination is still live). Capped at 500 chars.
  • resolved_domain — the host of resolved_url, e.g. maps.google.com, youtu.be, www.nytimes.com. Great for bucketing at scale.
  • is_resolved — the boolean you'll actually filter on. True iff we got a destination back.

Pricing — $0.004 per URL

Pay-per-event: exactly $0.004 per url-resolve, charged whether or not the URL resolved. (Dead links cost the same as live ones because the archive lookup still runs.) No monthly minimum, no platform tax beyond Apify's, no data caps.

At this price, resolving 10,000 goo.gl links costs $40. The same job against a commercial URL resolution API (when they exist, which most don't for goo.gl specifically) runs anywhere from $200 to $2,000, assuming they even have historical coverage.


Who needs this

  • SEO & link audit teams — reclaiming goo.gl backlinks in Ahrefs/Majestic/GSC dumps before the 404s hurt pagerank or lose attribution. Feed in your backlink export, get destinations out, redirect at the edge.
  • Marketing ops / CRM cleanup — HubSpot, Salesforce, Marketo campaigns from 2015-2024 are riddled with dead goo.gl tracking links. Re-point them at the original destinations (or mark them dead) before the next NPS blast goes out with rotten URLs.
  • Affiliate publishers — old review posts, Amazon comparison tables, Pinterest boards, YouTube descriptions. Every dead goo.gl is lost revenue; resolve them and swap in direct links.
  • Researchers & journalists — academic papers and news archives are full of goo.gl/* citations. This actor is a one-shot to footnote the original URLs in bulk.
  • Archivists & librarians — WARC repair, Zotero cleanup, institutional-repository link rot projects.
  • Reverse-engineering / OSINT — reconstructing historical campaign funnels and redirect chains where the shortener was the only breadcrumb.

How it works under the hood

  1. Normalize — strip scheme/case variance; accept goo.gl/abc, https://goo.gl/abc, http://www.goo.gl/maps/xyz. The short code (everything after goo.gl/) is preserved verbatim so Maps-style sub-paths (goo.gl/maps/place/...) survive.
  2. Availability lookup — hits the cheap Availability API first. Fast, cached, JSON. Returns the closest snapshot URL and timestamp.
  3. Raw replay — we rewrite the snapshot URL with the id_ flavor (web/<ts>id_/<original>), which tells Wayback to serve the raw archived HTTP response instead of its wrapper HTML. That response preserves the original Location: https://... header from goo.gl. We also sniff meta-refresh as a last resort.
  4. CDX fallback — if Availability has nothing, we hit CDX with filter=statuscode:301&limit=-5 to get the 5 most recent 301 captures, walk them newest-first, and return the first one whose replay produces a resolvable destination.
  5. Optional metadata — if include_metadata: true, we GET the resolved URL and parse the <title> with BeautifulSoup (first 500 KB only, HTML/XML content types only).

Every input URL produces exactly one output row, in input order. Non-goo.gl inputs get a resolved_via: "error" row with error: "not a goo.gl URL" so you can audit bad data.


Limitations & honest caveats

  • Not everything was archived. The Wayback Machine preserved billions of goo.gl redirects, but coverage isn't 100%. Low-traffic short URLs created in the last few months before shutdown may not have been crawled. Expect 40-80% resolve rates on broad internet corpuses, higher on prominent links.
  • The destination may also be dead. We recover the URL goo.gl pointed at. Whether that destination still exists is a separate question — use include_metadata: true to probe.
  • Maps short links are lossy. goo.gl/maps/* sometimes redirected through multiple Google-internal hops. The earliest snapshot may show an intermediate URL, not the final one.
  • Rate limits. The Wayback Machine is a free public service; be kind. This actor runs sequentially (no concurrent request storm) and identifies itself via User-Agent. Keep batch sizes reasonable.

Example uses

Re-resolve a backlink export

{ "urls": ["https://goo.gl/abc", "https://goo.gl/def", "..."], "include_metadata": true }

Pipe the resulting dataset into your backlink DB, filter by is_resolved: true, and update the destination column.

Quick one-off

{ "urls": ["goo.gl/2hLmN"] }

Gets you the original destination and the exact snapshot date in under a couple of seconds.


Built by a team that lost a chunk of its own ad-history CRM to the shutdown. Pricing is aggressive because the market for this is time-limited: every year more goo.gl references age out of Wayback's most-recent snapshots, and the job gets harder. Fix it while the archive is still warm.