Free Tool
4.9/5

Free AASA Validator

Fetch and validate your apple-app-site-association file for iOS Universal Links. Catch redirects, JSON errors, and malformed app IDs before they break your deep links.

Fetches https://<domain>/.well-known/apple-app-site-association and validates it for iOS Universal Links.

Shorten the links that open your app

Create Flyn short links that route to your Universal Links and count every click free. Pro adds device, country, and referrer breakdowns. Every install link becomes a data point you control.

Shorten for free

How to Validate Your AASA File in 3 Steps

Step 1: Enter your domain - AASA Validator screenshot
1

Enter your domain

Paste the domain that hosts your app. The validator fetches the apple-app-site-association file directly from the .well-known path over HTTPS, exactly the way iOS does.

Step 2: Review every check - AASA Validator screenshot
2

Review every check

Get pass, warning, and fail results for reachability, no-redirect, valid JSON, the applinks object, the details array, app ID format, and file size, with a clear message for each.

Step 3: Fix and re-validate - AASA Validator screenshot
3

Fix and re-validate

Each failed check ships with a concrete fix: serve the file with a 200, drop the .json extension, add the Team ID prefix. Apply it and re-run to confirm the file is valid.

What Is the apple-app-site-association File?

The apple-app-site-association file, almost always called the AASA file, is a small JSON document you host on your own domain. It is the contract between your website and your iOS app: it tells iOS which URL paths on your domain should open your app instead of Safari. This mechanism is what Apple calls Universal Links, and it is the recommended way to deep link into an app from the web, email, messages, or another app.

When a user taps a link to your domain, iOS fetches your AASA file, matches the path against the components (or legacy paths) you declared, and if there is a match it opens the associated app at exactly the right screen. If the file is missing, served through a redirect, malformed, or the app IDs are wrong, iOS silently gives up and the link opens in the browser instead. Because the failure is silent, a broken AASA file can go unnoticed for a long time, which is why validating it directly is so valuable.

What This Validator Checks

Every check Apple cares about, with a clear pass, warning, or fail and a fix for each.

Reachable over HTTPS, no redirect

The file must respond with HTTP 200 over HTTPS at the .well-known path. Apple never follows redirects for AASA, so a 301 or 302 is a hard failure, even an http-to-https redirect.

Valid JSON, no .json extension

The body must parse as valid JSON, and the file name must be apple-app-site-association with no extension. A JSON content type is recommended but not strictly required since iOS 9.3.1.

applinks object present

Universal Links require a top-level applinks object. The validator confirms it exists and that the legacy applinks.apps field, if present, is an empty array as Apple recommends.

Non-empty details array

applinks.details must be a non-empty array. Each entry describes one or more apps and the URL paths that should open them.

Modern or legacy detail format

Each detail entry must use either the modern appIDs + components format or the legacy appID + paths format. Partial or mixed entries are flagged so you can fix them.

App ID shape (TEAMID.bundle.id)

Every app ID must be a 10-character Team ID, a dot, then a reverse-DNS bundle identifier. Missing the Team ID prefix is the single most common AASA mistake.

webcredentials and appclips

If present, the validator reports webcredentials (Password AutoFill, Sign in with Apple) and appclips sections so you can confirm the rest of your associated-domains setup.

File size under 128 KB

Apple processes AASA files up to 128 KB. The validator reports your file size and fails anything larger, since an oversized file silently breaks association.

Where the AASA File Must Live

iOS looks for the file first at https://yourdomain.com/.well-known/apple-app-site-association, and falls back to https://yourdomain.com/apple-app-site-association at the domain root. The .well-known location is the modern, recommended path and is what this validator checks. The file must be served over HTTPS, return HTTP 200 with no redirect, have no file extension, and contain valid JSON.

The most common deployment trap is a redirect: many hosts and CDNs automatically rewrite the request, force a trailing slash, or push it through an http-to-https hop. Any of these breaks association, because Apple does not follow redirects when fetching the AASA file. If your stack adds a redirect, configure an explicit pass-through rule for the .well-known path so the file is served directly.

Common AASA Errors and How to Fix Them

The mistakes that silently break Universal Links most often.

Serving the file through a redirect

Sending the AASA request to https, to a trailing-slash variant, or to a CDN via a 301 or 302 breaks association because Apple does not follow redirects. Serve the file directly with a 200.

Adding a .json extension

The file must be named apple-app-site-association with no extension. Naming it apple-app-site-association.json means iOS never finds it at the expected path.

Using the bundle ID without the Team ID

An app ID of com.example.app is wrong. It must be prefixed with your 10-character Team ID, like ABCDE12345.com.example.app. Without the prefix, iOS cannot match the app.

Putting app IDs in applinks.apps

The apps array is legacy and must be empty. Your real configuration goes in applinks.details. App IDs placed in apps are ignored.

Wrong Content-Type or invalid JSON

A trailing comma, a comment, or an HTML error page returned instead of JSON all break parsing. Serve clean JSON, ideally with Content-Type: application/json.

Forgetting the Associated Domains entitlement

Even a perfect AASA file does nothing without applinks:yourdomain.com in the app Associated Domains entitlement. Validate the file here, then confirm the entitlement in Xcode.

Valid Deep Links + Trackable Short Links

Validate your AASA file here, then use Flyn to wrap your Universal Links in short links that count every tap, with device, country, and referrer breakdowns on Pro.

Deep link routing

Send users straight into your app with short links that respect your Universal Links setup.

Click analytics

Every tap counted from day one; Pro breaks taps down by device, OS, country, and referrer. Know which channels drive installs.

Branded domains

Pro adds custom domains with automatic HTTPS. Branded short links build trust before the tap.

Instant redirects

Global edge delivery means redirects feel instant, so your install funnel never loses momentum.

Frequently Asked Questions

What is an apple-app-site-association file?
The apple-app-site-association file (AASA) is a JSON file you host on your domain that tells iOS which of your URLs should open your app instead of Safari. It is the foundation of Universal Links. When a user taps a link to your domain, iOS reads this file, matches the path against your declared components, and opens the associated app if a match is found. Without a correct AASA file, your Universal Links silently fall back to the website.
Where exactly does the AASA file need to live?
iOS looks for the file at https://yourdomain.com/.well-known/apple-app-site-association first, and falls back to https://yourdomain.com/apple-app-site-association at the domain root. The .well-known location is the modern, recommended path. The file must be served over HTTPS, must return HTTP 200, and must have no file extension (not apple-app-site-association.json).
Why does Apple not follow redirects for the AASA file?
Apple fetches the apple-app-site-association file directly and does not follow HTTP redirects. If your server answers the request with a 301 or 302 (for example redirecting http to https, or stripping or adding a trailing slash, or sending it to a CDN), iOS treats the fetch as failed and your Universal Links will not work. Serve the file directly with a 200 response at the .well-known path. This validator flags any redirect as a failure for exactly this reason.
Does the AASA file need a .json extension or a specific Content-Type?
The file must NOT have a .json extension. The correct name is literally apple-app-site-association with no extension. Since iOS 9.3.1 the file no longer has to be signed, and the Content-Type header is not strictly required, but serving it as application/json is the recommended best practice. This validator warns if the Content-Type is missing or wrong but does not treat it as fatal.
What is the difference between the modern and legacy AASA format?
The modern format uses an applinks.details array where each entry has an "appIDs" array and a "components" array (which supports path matching, query parameters, fragments, and exclusions). The legacy format uses "appID" (singular string) and a "paths" array of glob patterns. Both still work, but Apple recommends the modern appIDs + components format because it is far more expressive. This validator accepts either and tells you which one each entry uses.
What does the app ID format TEAMID.bundle.id mean?
Each app ID in your AASA file is your 10-character Apple Developer Team ID, a dot, then your app bundle identifier in reverse-DNS form. For example, ABCDE12345.com.example.app. The Team ID is found in your Apple Developer account membership page. A common mistake is using only the bundle ID without the Team ID prefix, which breaks association. This validator checks that every app ID matches the expected shape.
Why should applinks.apps be an empty array?
The "apps" key inside the applinks object is a legacy field that Apple requires to be present and set to an empty array ([]). It is a holdover from an earlier version of the spec. Putting app IDs in "apps" does nothing useful and can confuse validation. Your real app configuration always goes in applinks.details.
How big can the AASA file be?
Apple processes apple-app-site-association files up to 128 KB. If your file is larger, Apple may refuse to process it, which silently breaks Universal Links. If you are approaching the limit, consolidate path patterns, remove unused app IDs, or split functionality. This validator reports your file size and flags anything over 128 KB.
My AASA file looks correct but Universal Links still do not open my app. Why?
Common causes beyond the file itself: the Associated Domains entitlement is missing or misspelled in your app (it must read applinks:yourdomain.com), the app was installed before the file was fixed (iOS caches the association, so reinstall to refresh), the link was typed into Safari rather than tapped from another app (Universal Links do not trigger from the Safari address bar), or the Team ID prefix is wrong. Validate the file here first, then check the entitlement and reinstall.
Does iOS cache the AASA file?
Yes. iOS fetches and caches the apple-app-site-association file when your app is installed (and Apple also uses a CDN to fetch it at scale). Changes to the file may not take effect on a device until the app is reinstalled, or until Apple re-fetches via its CDN, which can take time. During development you can use the alternate mode that fetches the file directly from your server on each launch. Always re-validate after any change.
Can one AASA file serve multiple apps?
Yes. The applinks.details array can contain multiple entries, and each entry can list multiple app IDs in its appIDs array. This is how you associate several apps (or several builds with different Team IDs) with the same domain. This validator lists every app ID it finds across all detail entries so you can confirm they are all present and correctly formatted.
Is this AASA validator free and does it store my data?
Yes, it is completely free with no sign-up. We keep a small history of domains you have checked in your browser localStorage so you can re-run them, and that history never leaves your device. On the server we rate-limit by IP and do not persist the domains you check. Your server will see a request from Flyn-Bot/1.0 in its logs, the same as any other HTTP client fetching the public file.

Ready to ship reliable deep links?

Validate your AASA file for free, then use Flyn to share short links that route into your app with free click tracking and QR codes; Pro adds analytics breakdowns and custom domains, all in one platform.