App Distribution
Linkzly's App Distribution feature lets you share iOS and Android builds directly with testers, stakeholders, and internal teams — without going through the App
App Distribution
Linkzly's App Distribution feature lets you share iOS and Android builds directly with testers, stakeholders, and internal teams — without going through the App Store or Google Play. You upload your build file, generate an install link, and share it. Recipients tap the link on their device and install the app instantly.
This is commonly used for:
- Distributing beta builds to QA testers
- Sharing preview builds with clients or product managers before a release
- Internal distribution of enterprise apps
- Getting feedback on a specific build before submitting to the store
Step 1 — Create an App
Before uploading builds, you need to create your app in Linkzly. This creates a container that organizes all of your builds and install links in one place.
- In the left sidebar, click App Distribution.
- Click Create App in the top-right corner.
- Fill in the form fields and click Create App.
| Field | Description | Required |
|---|---|---|
| App Name | The display name for this app in your dashboard. 2–255 characters. | Required |
| Platform | Choose iOS, Android, or Both iOS and Android. | Required |
| Bundle ID / Package Name | The unique identifier for your app. For iOS this is the Bundle ID (e.g., com.yourcompany.app); for Android this is the Package Name (same format). |
Required |
| Description | A short description shown on the install page that users see when they open your install link. | Optional |
| Icon URL | A publicly accessible URL to your app's icon image (PNG or JPG recommended). If you don't provide one here, Linkzly will automatically extract the icon from your first uploaded build binary. | Optional |
Step 2 — Upload a Build
Once your app is created, you can start uploading builds.
- Inside your app, click Upload Build.
- Drag and drop your file onto the upload zone, or click anywhere in the zone to browse for a file.
Supported file types:
| File Type | Platform | Description |
|---|---|---|
.ipa |
iOS | iOS App Package — for Ad-hoc, Enterprise, or Development distribution |
.apk |
Android | Android Application Package — direct install file |
.aab |
Android | Android App Bundle — typically used for Google Play, but can be distributed directly |
Maximum file size: 500 MB per build.
Auto-Detected Build Metadata
After you upload a file, Linkzly analyzes the binary and pre-fills the following fields for you:
| Field | What Is Auto-Detected |
|---|---|
| Platform | Detected from the file extension (.ipa → iOS, .apk or .aab → Android) |
| Version Name | The human-readable version string (e.g., 2.1.0) |
| Version Code | The integer build number |
| Bundle ID / Package Name | Auto-matched to your registered apps |
| Minimum OS Version | The minimum iOS or Android version required to install the app |
| App Icon | Extracted from the binary automatically |
Build Metadata Form
Review the auto-detected values and fill in any additional fields:
| Field | Description | Required |
|---|---|---|
| App | Auto-matched based on Bundle ID. Select manually if needed. | Required |
| Version Name | Pre-filled from the binary. Edit if needed (e.g., 2.1.0). |
Required |
| Version Code | Pre-filled from the binary. Must be a positive integer and must be unique per app — you cannot upload two builds with the same version code for the same app. | Required |
| Build Number | An additional internal build number, if your team uses one. | Optional |
| Signing Type | How the build is signed. Select the option that matches your build. | Required |
| Minimum OS Version | The minimum OS version required. Pre-filled if available. | Optional |
| Notes | Internal notes about this build — for your team's reference only. | Optional |
| Changelog | What changed in this version. Shown on the install page so testers know what to look for. | Optional |
Signing Type options:
| Option | Description |
|---|---|
adhoc |
Ad-hoc distribution for a specific set of registered devices (iOS only) |
enterprise |
Apple Enterprise distribution — install on any device in your organization |
development |
Development/debug build signed with a development certificate |
distribution |
App Store or Google Play distribution build |
release |
General release build |
debug |
Debug build |
iOS note: Ad-hoc builds can only be installed on devices whose UDID is registered in the provisioning profile. Enterprise builds can be installed on any device. If a tester cannot install your build, confirm that their device UDID is in the profile (for Ad-hoc), or switch to an Enterprise distribution.
Click Create Build when you are ready.
Step 3 — Share Your Install Link
After uploading a build, Linkzly automatically generates an Install Link — a unique shareable URL that lets recipients install the build directly on their device. You can also create additional install links for the same build (useful for sending separate links to different groups).
To copy the install link for a build:
- Click the Copy Link button directly on the build card (available for Ready and Active builds).
To create an additional install link or configure link settings:
- Open the more options menu (⋮) on the build card.
- Select View Install Page to open the install page, or use the install link card actions to configure password, expiry, and install limits.
Install Link Settings
| Field | Description |
|---|---|
| Name (optional) | A label for this install link (e.g., QA Team, Client Review, Sprint 14 Testers). Visible only in your dashboard. |
| Password (optional) | Require recipients to enter a password before they can install the build. Useful for limiting installs to authorized testers. Password verification is rate-limited to 10 attempts per minute. |
| Maximum Installs (optional) | Automatically deactivate the link after it has been used to install the app a set number of times. |
| Expiry Date / Time (optional) | The link stops working after this date and time. Useful for giving testers a deadline. |
What Gets Generated
When an install link is created, Linkzly generates:
| Item | Description |
|---|---|
| Install URL | The shareable link in the format /install/{token}. Send this to your testers. |
| Download URL | A direct URL to download the binary file: /download/{token}. |
| QR Code | An automatically generated QR code for the install link. Desktop users can scan it with their phone to quickly open the install page on their device. |
Install Link Status
| Status | Meaning |
|---|---|
| Active | The link is live. Tapping it opens the install page normally. |
| Inactive | Manually disabled. The install page shows an access error. |
| Expired | The link's expiry date has passed. Recipients see an expiration notice. |
| Limit Reached | The maximum install count has been hit. No further installs are allowed. |
What Your Testers See
When a tester taps your install link on their device, they land on a mobile-optimized install page showing:
- App name and icon
- Build version and platform
- Changelog (if you added one)
- Password entry form (if the link is password-protected)
- An Install button to trigger the installation
- App details (Bundle ID, signing type, minimum OS version)
- Install stats (current installs, expiry status)
- Step-by-step installation instructions specific to their platform
For desktop users: The install page shows a QR code prominently. Scanning it on their phone takes them directly to the mobile install page.
iOS Over-the-Air (OTA) Installation
For iOS builds, Linkzly automatically generates and hosts the required OTA manifest file (.plist). When an iOS user taps the Install button:
- Their device fetches the manifest from Linkzly.
- iOS prompts the user to confirm the installation.
- The app installs directly from the binary hosted on Linkzly's servers.
Requirements for iOS OTA installation:
- The build must be signed as Ad-hoc or Enterprise.
- For Ad-hoc builds, the tester's device UDID must be registered in the provisioning profile.
- The device must trust your certificate if using a development or enterprise distribution (Settings > General > Device Management).
Managing Builds
The build list for each app shows:
| Column | Description |
|---|---|
| Version Name | The app version (e.g., 2.1.0) and version code in parentheses. |
| Platform | iOS or Android badge. |
| Signing Type | How the build is signed (Ad-hoc, Enterprise, etc.). |
| Status | The current processing status of the build (see table below). |
| Build Access | Toggle to enable or disable all install links for this build at once. |
| Install Count | Total number of installs across all install links for this build. |
| Created | When the build was uploaded. |
Build Statuses
| Status | Meaning |
|---|---|
| Processing | The build file is being analyzed and prepared. Install links are not yet available. |
| Ready | The build is ready to be installed. Install links are active. |
| Blocked | The build has been blocked from installation due to a policy or access restriction. Install links will not work. |
| Failed | The upload or processing failed. The build cannot be installed. |
Per-Build Actions
Open the more options menu (⋮) on any build card to access:
| Action | Description |
|---|---|
| View Analytics | Open the analytics page for this specific build. |
| View Install Page | Open the public install page for this build in a new tab. Only available for active builds. |
| Regenerate Install Link | Creates a new install link URL. The old URL immediately stops working. Use this if you need to revoke access to an existing link. Only shown when the current link is expired or missing. |
| Delete Build | Permanently remove the build and all associated install links. This cannot be undone. |
Filtering Builds
Use the filter controls at the top of the build list to narrow down by:
- Platform — All Platforms, iOS, or Android.
- Status — All Status, Ready, Processing, Blocked, or Failed.
- Active Status — All Builds, Active Only, or Inactive Only.
Managing Install Links
Each build has at least one install link generated automatically. You can create additional install links for the same build — useful when you want separate links for different groups (e.g., internal QA vs. external client).
Install Link Card
Each install link card shows:
- Link name (or "Unnamed Link" if no name was set)
- Status badge: Active or Inactive
- Password Protected indicator (if a password is set)
- Expiry badge: Expired or Expiring Soon (conditionally shown)
- Token preview: First 8 characters of the token
- Install count: Total installs, shown as "X installs" or "X / Y installs" if a maximum is set
- Expiry info: Time until expiry or time since expiry
Per-Link Actions
| Action | Description |
|---|---|
| Copy URL | Copies the install URL to your clipboard. |
| Open Install Page | Opens the public install page in a new tab. |
| Copy Device Registration Link | Copies a device registration link (for iOS — registers the tester's device UDID). |
| View Analytics | See install events, geographic data, and device breakdown for this specific link. |
| Activate / Deactivate | Toggle the link's active status without deleting it. |
| Edit Link | Change the name, password, expiry date, or maximum install count. |
| Delete Link | Permanently delete the install link. |
Analytics
App Distribution analytics are available at four levels: organization-wide, per app, per build, and per install link.
Organization Overview
Click View Analytics from the main App Distribution page to see stats across all your apps and builds:
- Summary metrics: Total events, successful installs, failed installs, unique visitors, conversion rate, average install duration
- Event summary: started, installed, failed, cancelled
- Installs over time — A time-series chart with hourly (7 days), daily (30 days), or weekly (90 days) grouping
- Top performing apps — Which apps have the most installs
- Geographic breakdown — Countries and cities where installs are happening
- Device analytics — OS version, browser, and device type distribution
- Live event stream — Real-time feed of install events as they happen
App-Level Analytics
Click View Analytics inside a specific app to see:
- Total builds, active builds, and total installs for that app
- Event timeline
- Top performing builds
- Geographic and device breakdown
Build-Level Analytics
Open the more options menu on a build and click View Analytics to see:
- A summary of all events for that build version (views, installs, failures, cancellations)
- A comparison of how each install link for that build performed
- Time-series chart
- Geographic and device data
Install Link Analytics
Click View Analytics on any install link to see:
- Event summary for that specific link
- Time-series chart
- Geographic breakdown
- Device breakdown
Plan Limits & Quotas
Your subscription plan determines how many builds and install links you can have at one time, and how long install links remain active by default.
| Plan | Max Builds | Max Install Links | Default Link Expiry |
|---|---|---|---|
| Free | 5 | 25 | 24 hours |
| Starter | 25 | 100 | 7 days |
| Professional | 100 | 500 | 30 days |
| Enterprise | Unlimited | Unlimited | Never |
When you approach a limit, a warning banner appears at the top of the App Distribution page. If you reach the limit, you will need to delete older builds or install links before adding new ones, or upgrade your plan.
Tips and Best Practices
-
Add a changelog to every build. Testers want to know what changed. Even a one-line note like "Fixed crash on login screen" helps them know what to focus on when testing.
-
Use passwords for client-facing builds. If you're sharing a build with a client or external stakeholder, a password adds a layer of access control and ensures only the intended recipients can install it.
-
Set an expiry date to keep things clean. Time-limited install links expire automatically so old links don't continue to work indefinitely. This is especially useful when builds have a short feedback window.
-
Use separate install links for different groups. Create one link for your internal QA team and a separate link for external testers. This lets you track installs by group and revoke access independently.
-
Version codes must be unique per app. If you try to upload a build with a version code that already exists for that app, the upload will be rejected. Increment your version code for every build you upload.
-
Test the install on a real device before sharing. Always tap through the install flow yourself on both iOS and Android (as applicable) before sending the link to testers. Confirm the install page loads, the password (if set) is required, and the app installs without errors.
Was this helpful?
Help us improve our documentation