Free tools

assetlinks.json Validator

Validate the Digital Asset Links file behind Android App Links, check your package name and signing certificate, and see what Google's verifier reports for your domain.

  • Free
  • No account needed
  • Results you can share

The host in your intent filter, for example links.example.com. A full URL works too.

Your applicationId. Confirms your app is listed.

With Play App Signing, use the app signing key from Play Console, not the upload key.

Try:

What happens when someone taps your link

Every stage has to pass for the app to open. Run a check to see where your link stops.

  1. Someone taps your link on Android

    In a chat, an email or another app.
  2. Your server hands over the file

    Android fetches https://your-domain/.well-known/assetlinks.json. It must answer HTTP 200, with no redirect.
  3. The file can be read

    A JSON array of statements.
  4. The file names your app

    A handle_all_urls statement for your package name.
  5. Your signing certificate matches

    The SHA-256 fingerprint of the key that signed the installed app.
  6. Google's verifier sees your app

    What Google's Digital Asset Links API reports for this domain.
  7. Your app opens

    Verified App Link, no chooser dialog.

What this validator checks

  • The file loads over HTTPS at /.well-known/assetlinks.json with HTTP 200 and no redirects.
  • It is served as application/json, which Android requires.
  • It is a JSON array with at least one statement granting delegate_permission/common.handle_all_urls to an android_app target.
  • Package names are valid and each target lists SHA-256 fingerprints in the AA:BB:... format.
  • Optionally, that your package and signing certificate are in the file.
  • What Google's Digital Asset Links API returns for the domain.

How Android App Links are verified

An App Link is an HTTPS URL that Android opens directly in your app. Your manifest declares an intent filter for the host with android:autoVerify="true". When the app is installed, Android fetches assetlinks.json from that host and checks that it names your package and the certificate that signed the installed app.

If the check fails, the link is not verified and opens in the browser. The fingerprint is the usual culprit: apps distributed through Google Play are re-signed with the app signing key, so a file that only lists your upload key fails for every user who installed from the store.

A minimal valid file

[
  {
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
      "namespace": "android_app",
      "package_name": "com.example.app",
      "sha256_cert_fingerprints": [
        "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
      ]
    }
  }
]

Frequently asked questions

Where does assetlinks.json go?
Serve it at https://your-domain/.well-known/assetlinks.json. It must return HTTP 200 over HTTPS, with Content-Type application/json and no redirects. Every host in your intent filters needs its own file, including each subdomain.
Which SHA-256 fingerprint should I use?
Use the fingerprint of the certificate that signs the APK installed on the device. With Play App Signing, that is the app signing key shown in Play Console under App integrity, not your upload key. Add your debug key as well if you test debug builds.
Why do my App Links open the browser or a chooser?
Verification fails if the file is missing, redirects, has the wrong content type, or lists a different package name or fingerprint. The intent filter also needs android:autoVerify="true" with the https scheme and your host. On Android 12 and later, an unverified link opens in the browser instead of showing a chooser.
How do I re-run verification on a device?
On Android 12 and later, run adb shell pm verify-app-links --re-verify followed by your package name, then check the result with adb shell pm get-app-links followed by your package name. Reinstalling the app also triggers verification.
What does the Google verifier check show?
It asks Google's Digital Asset Links API which apps your domain grants handle_all_urls to. Google caches results, so a file you just changed can take a while to show there.
Still stuck?

More free tools

Skip the hosting work

Ulinkly hosts and serves your apple-app-site-association and assetlinks.json files on your link domain, and gives you deep links that open the app on iOS and Android.

Start free