Deep links & short links (Google) · migration guide

Migrate from Firebase Dynamic Links to Amba

Shut down: August 25, 2025. This service is already gone. Official path: Google recommends moving to another deep-linking provider. Official notice

Firebase Dynamic Links shut down on August 25, 2025 — every FDL link now returns a 404, and Google’s official guidance is to move to another deep-linking provider. This guide recreates short links, deep-link configuration, and click analytics on Amba tracked links, including the domain re-verification steps and an executable agent prompt.

Get an API key Get the agent promptupdated June 12, 2026
or let your agent do it:

Dynamic Links gave mobile teams hosted short links, deep-link routing into the app, and click analytics. Since the shutdown, links on page.link subdomains and FDL custom domains are dead, and there is nothing left to export from the API. The honest migration is a recreation: inventory the links you still reference, stand up deep-link routing on a domain you control, and recreate each link. On Amba, links and deep-link config are MCP tools — amba_tracked_links_create and amba_deeplinks_set_config — so a coding agent does the recreation, and clicks are tracked from the first resolution. The domain-association files move to your own domain, where they should have been all along.

concept map

How do Firebase Dynamic Links concepts map to Amba primitives?

Firebase Dynamic LinksAmbanotes
Short links (page.link / custom domain)Tracked links — amba_tracked_links_createEach link is a slug + destination_url + optional campaign metadata. page.link domains are Google’s and are gone; slugs move to a domain you control.
Link analytics (clicks, platforms)amba_tracked_links_get_statsTotal clicks, unique users, and clicks by platform, recorded automatically per link from the first resolution onward.
Deep-link behavior (bundle id, package, fallback)amba_deeplinks_set_configURL scheme, universal-link domain, iOS bundle id, Android package name, and a fallback URL for users without the app — one config per project.
UTM / campaign parametersTracked-link metadataCampaign, source, and medium ride along as metadata on each link and come back in analytics.
In-app link handlingSDK resolve-by-slugThe Amba client SDK resolves a slug to its destination and records the click; your app routes incoming universal links and scheme opens through it.
step by step

How do I migrate from Firebase Dynamic Links to Amba?

  1. Inventory the links you still reference

    FDL can no longer be queried — links 404 and the API is gone. Collect slugs and destinations from your app code (grep for page.link and your FDL custom domain), marketing assets, and any CSV metadata exported from the Firebase console before the shutdown.

  2. Connect a coding agent to Amba

    Point any MCP-aware agent at https://mcp.amba.dev/mcp and have it call amba_developer_signup — developer token, provisioned project, and API keys with no browser. Or paste the ready-made prompt below.

  3. Configure deep linking

    One amba_deeplinks_set_config call sets the URL scheme, universal-link domain, iOS bundle id, Android package name, and fallback URL. The universal-link domain must be one you control.

  4. Re-verify domain association on your domain

    Serve /.well-known/apple-app-site-association (appID + paths) and /.well-known/assetlinks.json (package name + SHA-256 cert fingerprints) from the universal-link domain. FDL hosted these for page.link; you host them now. Both must return 200 with JSON content.

  5. Recreate each link

    One amba_tracked_links_create call per link: slug, destination_url, and campaign metadata. Click analytics start recording immediately.

  6. Wire in-app resolution and verify

    Route incoming universal links and custom-scheme opens through the SDK’s resolve-by-slug, then test a link on a device and confirm the click shows in amba_tracked_links_get_stats.

the honest part

What does not map?

Historical click and attribution data
FDL analytics died with the service and cannot be imported. Amba analytics for each link start at zero from recreation — keep any pre-shutdown CSV exports as your historical record.
Deferred deep linking through install
Routing a brand-new user to content after an app-store install (FDL’s deferred deep linking) has no Amba equivalent as of mid-2026. Handle first-run routing in onboarding, or use a dedicated attribution provider for install attribution.
page.link domains
Google-owned subdomains cannot be pointed anywhere else; links printed on those domains are permanently dead. New links must live on a domain you own.
Link preview / interstitial pages
FDL’s optional preview pages are not recreated. Amba tracked links resolve straight to the destination URL; build an interstitial at the destination if you need one.
paste-ready

The agent prompt that does the whole thing

Paste this into any MCP-aware coding agent (Claude Code, Cursor, Windsurf). It connects to Amba’s hosted MCP server at mcp.amba.dev, signs up with amba_developer_signup, and recreates your Firebase Dynamic Links setup tool call by tool call. Plain-text version: /migrate/firebase-dynamic-links/prompt.txt

You are migrating a mobile app off Firebase Dynamic Links (shut down August 25, 2025 — FDL links now return 404) onto Amba tracked links.

Amba is an agent-native mobile backend. Its hosted MCP server is https://mcp.amba.dev/mcp (Streamable HTTP). Add it to your MCP client config under mcpServers.amba, or POST JSON-RPC tools/call requests to it directly with Content-Type: application/json and Accept: application/json, text/event-stream (the server rejects requests that do not accept both).

Step 0 — Account. Call amba_developer_signup with { "email": "<developer email>", "password": "<min 8 chars>" } — no auth needed. Save the returned pat and project.project_id, and pass "pat" as an argument on every subsequent tool call this session. Poll amba_projects_get_provisioning_status with { "project_id": "<project_id>", "pat": "<pat>" } until the project status is "active" (about 10 seconds).

Step 1 — Inventory links. Firebase Dynamic Links can no longer be queried. Collect link slugs and destinations from: the app codebase (grep for "page.link" and the app's FDL custom domain), marketing assets, and any CSV metadata the user exported from the Firebase console before the shutdown.

Step 2 — Configure deep linking. Call amba_deeplinks_set_config:

  { "project_id": "<project_id>", "url_scheme": "<myapp>", "universal_link_domain": "<links.yourdomain.com>", "ios_bundle_id": "<iOS bundle id>", "android_package_name": "<Android package>", "fallback_url": "<https://yourdomain.com/get-the-app>", "pat": "<pat>" }

The universal-link domain must be one the user controls — page.link domains are Google's and are permanently gone.

Step 3 — Re-verify domain association (the user's infrastructure, not a tool call). Serve https://<domain>/.well-known/apple-app-site-association (appID + paths) and https://<domain>/.well-known/assetlinks.json (package name + SHA-256 cert fingerprints) from the universal-link domain. FDL hosted these files for page.link domains; the user hosts them now. Verify both URLs return 200 with JSON content.

Step 4 — Recreate each link with amba_tracked_links_create:

  { "project_id": "<project_id>", "slug": "<short slug>", "destination_url": "<destination URL>", "metadata": { "campaign": "<campaign>", "source": "<source>", "medium": "<medium>" }, "pat": "<pat>" }

Carry UTM-style parameters into metadata — click analytics are recorded automatically.

Step 5 — Wire in-app resolution. The Amba client SDK resolves a slug to its destination and records the click; route incoming universal links and custom-scheme opens through it in the app's link handler.

Step 6 — Verify. Read the config back with amba_deeplinks_get_config ({ "project_id": "<project_id>", "pat": "<pat>" }) and, after a test click, check amba_tracked_links_get_stats ({ "project_id": "<project_id>", "link_id": "<link id>", "pat": "<pat>" }).

Honesty notes to surface to the user: historical FDL click and attribution data is gone and does not import; deferred deep linking through a fresh app-store install does not map on Amba as of mid-2026 — handle first-run routing in onboarding, or use a dedicated attribution provider for install attribution.

Full guide: https://amba.dev/migrate/firebase-dynamic-links
questions

Firebase Dynamic Links migration — FAQ

Is Firebase Dynamic Links shut down?

Yes. Firebase Dynamic Links shut down on August 25, 2025. Links on page.link subdomains and custom domains return HTTP 404, new links cannot be created, and Google’s official guidance is to migrate to another deep-linking provider.

Can I export my old Dynamic Links data?

Not anymore. The export window closed with the shutdown — the API and console tooling are gone. If you saved CSV metadata before August 25, 2025, use it as your inventory; otherwise reconstruct the link list from your app code and marketing assets.

What replaces Dynamic Links on Amba?

Tracked links plus a deep-link config. amba_tracked_links_create makes a slug + destination with campaign metadata and automatic click analytics; amba_deeplinks_set_config holds the URL scheme, universal-link domain, bundle/package ids, and fallback URL. The client SDK resolves slugs in-app.

Does Amba support deferred deep linking?

No — as of mid-2026, Amba does not route users to content through a fresh app-store install. Universal links and custom-scheme opens into an installed app are covered; for install-time attribution use a dedicated attribution provider, or handle first-run routing in onboarding.

Do I need to re-verify my universal link domain?

Yes. apple-app-site-association and assetlinks.json must be served from the universal-link domain you configure. FDL hosted these files for page.link domains; after migration you serve them from your own domain, and iOS/Android re-validate them automatically.

start in 30 seconds

Hand the docs to your agent.
Ship by lunch.

Read the docs