Migrating from Firebase Dynamic Links to Ulinkly
Firebase Dynamic Links is winding down. Ulinkly delivers the same universal routing plus verified custom domains, automatic well-known hosting, deep analytics, and SDK endpoints that mirror — and expand — the Firebase surface area. Follow this guide to become production-ready without losing a single campaign slug.
If you have a Firebase Dynamic Links export, migrate everything in a single command.
# 1. Export your dynamic links from Firebase
# (JSON DynamicLinkInfo, a { "links": [...] } batch, a list of *.page.link URLs, or a CSV inventory)
# 2. Preview the migration — nothing is created yet:
npx @ulinkly/cli import firebase --input fdl-export.json --domain yourapp.ulink.app
# 3. Create the links for real:
npx @ulinkly/cli import firebase --input fdl-export.json --domain yourapp.ulink.app --live --api-key $ULINK_API_KEYThe importer runs routing + attribution parity checks on every link. Prefer clicking through a UI? Use Option B below.
Unified & dynamic routing
Domains that verify fast
Analytics & SDK telemetry
Why Ulinkly is the Firebase successor
Every line below maps to a real feature inside the Ulinkly dashboard or API surface.
Option B — dashboard (no CLI)
Prefer a point-and-click migration? Work through these steps in order; everything references actual screens or endpoints inside the platform.
1. Export your Firebase inventory
Download the list of Firebase Dynamic Links, fallback destinations, and campaign parameters you rely on today. You'll recreate only the slugs you still need.
2. Create a Ulinkly project
In Dashboard → Projects → New Project, give the workspace a name, define your default fallback URL, and invite teammates who maintain links with you.
3. Configure platforms & app schemes
Open Project → Configuration to set the iOS / Android bundle IDs and deep-link schemes the SDKs expect. Ulinkly ships the Apple App Site Association and Android Asset Links files for you.
4. Bring your domain online
Start with the shared *.shared.ly domain or connect a custom host in Project → Domains. Verify DNS with the TXT/A/CNAME instructions that reference custom-domains.ulink.ly directly inside the dashboard.
5. Recreate links with unified or dynamic types
Use Dashboard → Links → Create Link or the POST /sdk/links endpoint to recreate Firebase slugs. Set per-platform destinations, add Smart Parameters, and tag campaigns via metadata.
6. Update your apps & monitor traffic
Swap out Firebase code for the Ulinkly SDKs (Flutter and native) or call /sdk/bootstrap to attach installations. Use Dashboard → Links → Analytics to confirm traffic, geolocation, and UTM data are flowing.
Automate link creation via /sdk/links
After verifying a domain, generate an API key (Dashboard → API Keys) and recreate Firebase slugs using the SDK endpoint shown below. The payload mirrors the fields in the dashboard “Create Link” form.
curl -X POST "https://api.ulink.ly/sdk/links" \
-H "Content-Type: application/json" \
-H "X-App-Key: YOUR_ULINK_API_KEY" \
-d '{
"type": "dynamic",
"slug": "summer-offer",
"iosFallbackUrl": "https://apps.apple.com/app/id000000",
"androidFallbackUrl": "https://play.google.com/store/apps/details?id=com.app",
"fallbackUrl": "https://example.com/campaign",
"parameters": {
"utm_source": "email",
"utm_campaign": "sunshine"
},
"metadata": {
"owner": "growth-team"
},
"domain": "links.shared.ly"
}'Attach installations with /sdk/bootstrap
Replace Firebase install/session calls with `/sdk/bootstrap`. It provisions installations, ensures a 60-minute session, and returns an installation token you can reuse in `/sdk/resolve`.
curl -X POST "https://api.ulink.ly/sdk/bootstrap" \
-H "Content-Type: application/json" \
-H "X-App-Key: YOUR_ULINK_API_KEY" \
-d '{
"installationId": "device-123",
"deviceModel": "iPhone16,2",
"osName": "iOS",
"osVersion": "18.0",
"appVersion": "3.4.1",
"metadata": {
"source": "ios-app"
}
}'Technical checklist before you flip traffic
Every item below is backed by functionality already shipping in the dashboard or API.
Confirm every Firebase slug has a destination plan (web, iOS, Android).
Decide which slugs should become Unified vs Dynamic links in Ulinkly.
Verify at least one domain (shared or custom) before importing at scale.
Generate an API Key under Dashboard → API Keys for automation.
Install the Flutter SDK (or native wrappers) wherever Firebase code exists.
Replace Firebase test harnesses with the `/sdk/resolve` endpoint for QA.
Import support
Need bulk imports? Share the CSV of Firebase slugs and we’ll load them via the links service.
Request helpQA safety net
Use the same `/sdk/resolve?url=` endpoint the redirect service calls to confirm every slug before launch.
Hit the resolve endpointAlways-on roadmap
Upcoming releases (deferred deep links, referral flows) are visible inside Dashboard → Projects → What's live & coming.
View roadmapReady to become the Firebase alternative?
Create a project, move a few slugs, and monitor them in Analytics before you flip fully to Ulinkly. The SDKs, dashboard, and APIs you see above are live in production today.