Linkzly

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

15 min read

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.

  1. In the left sidebar, click App Distribution.
  2. Click Create App in the top-right corner.
  3. 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.

  1. Inside your app, click Upload Build.
  2. 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:

  1. Open the more options menu (⋮) on the build card.
  2. 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:

  1. Their device fetches the manifest from Linkzly.
  2. iOS prompts the user to confirm the installation.
  3. 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