# App preview (video) upload

Use App Store Manager to upload and transfer app preview videos to **App Store Connect** (Standard Store Listing & Custom Product Page) — across all your supported languages and device sizes.

{% hint style="info" %}
App previews are only supported for **App Store Connect**. Google Play does not support direct video file uploads — see Google Play promo video at the bottom of this page for details.
{% endhint %}

App previews follow the same locale detection and slot logic as [screenshots](https://docs.appstoremanager.net/documents/edit-translate-and-upload/screenshot-and-asset-upload). The key differences are file format, resolution rules, and the per-device preview limit imposed by App Store Connect.

### 1. Before you start

Assets are stored for **180 days** on Basic and Premium plans before automatic deletion. This does not affect your live store listings. Uploads can take up to **1.5 hours** to complete. Business customers receive prioritized processing.

{% hint style="warning" %}
Uploading **overwrites** existing store listing data. Always review your localized assets in the manager before starting a transfer.
{% endhint %}

Required permissions

**App Store Connect** — [a valid API key must be configured ](https://docs.appstoremanager.net/documents/access/app-store-connect-access)in your App Store Manager account settings.

### 2. App Previews (drag & drop)

App Store Manager handles both images and videos. Drop video files into App Peview page — the Smart Recognition Engine identifies locale, slot, and device resolution using the same rules as for screenshots.

**What you can do:**

* Drag in single video files, multiple files, or entire folder structures
* Reorder previews by dragging within a slot
* Manually assign any unrecognized files that land in "Uncategorized"
* Replace individual positions — uploading to Position 2 only affects that slot; all others stay as-is

{% hint style="info" %}
A **"Remove all first"** toggle is currently in development. For now, replacement is position-based only.
{% endhint %}

<figure><img src="https://3157999510-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC766X4IlgRAg3uNFiRyW%2Fuploads%2Fx161l9QuwBONd9feIyUN%2FASM-video-upload.png?alt=media&#x26;token=75339ca0-e3f6-4733-a557-e002e513642a" alt=""><figcaption><p>Upload videos with App Store Manager</p></figcaption></figure>

How the Smart Recognition Engine works

When you drop files, the engine runs three checks in order:

**Step 1 — Language detection**

The engine first tries to identify the locale from your folder structure, then falls back to the filename if no match is found.

**Folder path scan (primary):** Every folder segment in the path is checked left to right. The first segment that matches a known locale code or alias is used.

**Filename fallback:** If no folder matches, the filename is split at `-`, `_`, or spaces and checked against the same alias list.

The following aliases are recognized. Short two-character aliases (e.g. `de`, `en`) only match when the entire folder segment or filename part is an exact match — they are never matched as substrings.

| Locale    | Recognized aliases                                                            |
| --------- | ----------------------------------------------------------------------------- |
| `ar-SA`   | `arabic`, `ar`, `ar-sa`, `ara`, `عربي`, `saudi`                               |
| `ca`      | `catalan`, `català`, `catalonia`                                              |
| `cs`      | `czech`, `cz`, `cesky`, `čeština`, `czechia`                                  |
| `da`      | `danish`, `dk`, `dansk`, `denmark`                                            |
| `de-DE`   | `german`, `deutsch`, `de`, `de-de`, `deu`, `ger`                              |
| `el`      | `greek`, `gr`, `ελληνικά`, `greece`                                           |
| `en-AU`   | `en-au`, `australian`, `australia`                                            |
| `en-CA`   | `en-ca`, `canadian-english`                                                   |
| `en-GB`   | `en-gb`, `british`, `uk`, `england`, `united-kingdom`                         |
| `en-US`   | `english`, `en`, `en-us`, `eng`, `us`, `american`                             |
| `es-ES`   | `spanish`, `español`, `espanol`, `es`, `es-es`, `spa`, `castilian`            |
| `es-MX`   | `es-mx`, `mexican`, `mexico`                                                  |
| `fi`      | `finnish`, `suomi`, `finland`                                                 |
| `fr-CA`   | `fr-ca`, `quebec`, `canadian-french`                                          |
| `fr-FR`   | `french`, `français`, `francais`, `fr`, `fr-fr`, `fra`                        |
| `he`      | `hebrew`, `il`, `עברית`, `israel`                                             |
| `hi`      | `hindi`, `हिन्दी`, `india`                                                    |
| `hr`      | `croatian`, `hrvatski`, `croatia`                                             |
| `hu`      | `hungarian`, `magyar`, `hungary`                                              |
| `id`      | `indonesian`, `bahasa`, `indonesia`                                           |
| `it`      | `italian`, `italiano`, `ita`                                                  |
| `ja`      | `japanese`, `jp`, `jpn`, `nihongo`                                            |
| `ko`      | `korean`, `kr`, `kor`, `hangul`                                               |
| `ms`      | `malay`, `my`, `melayu`, `malaysia`                                           |
| `nl-NL`   | `dutch`, `nl`, `nl-nl`, `nederlands`, `holland`, `netherlands`                |
| `no`      | `norwegian`, `nb`, `norsk`, `norway`                                          |
| `pl`      | `polish`, `polski`, `poland`                                                  |
| `pt-BR`   | `portuguese`, `português`, `pt`, `pt-br`, `brazilian`, `brazil`               |
| `pt-PT`   | `pt-pt`, `portugal`                                                           |
| `ro`      | `romanian`, `română`, `romania`                                               |
| `ru`      | `russian`, `rus`, `русский`                                                   |
| `sk`      | `slovak`, `slovenčina`, `slovakia`                                            |
| `sv`      | `swedish`, `se`, `svenska`, `sweden`                                          |
| `th`      | `thai`, `ไทย`, `thailand`                                                     |
| `tr`      | `turkish`, `türkçe`, `turkey`                                                 |
| `uk`      | `ukrainian`, `ua`, `українська`, `ukraine`                                    |
| `vi`      | `vietnamese`, `vn`, `tiếng việt`, `vietnam`                                   |
| `zh-Hans` | `chinese`, `zh-hans`, `zh-cn`, `simplified`, `mandarin`, `chinese-simplified` |
| `zh-Hant` | `zh-hant`, `zh-tw`, `traditional`, `chinese-traditional`, `taiwan`            |

**Step 2 — Slot order**

Display position is read from numbers in the filename:

* **Numbers between underscores** — `en-US_2_886x1920.mp4` is placed in Slot 2
* **Direct numeric names** — `1.mp4` through `3.mp4` are placed in the corresponding slot

{% hint style="info" %}
App Store Connect allows a maximum of **3 app previews per device size per locale**.
{% endhint %}

Step 3 — Resolution detection

The target device is identified **exclusively** by the actual pixel dimensions of the video. Folder names like "iPhone 15" are ignored — only the real video frame size matters. See 3. Technical specifications below for the full list of supported dimensions.

### 3. Technical specifications

Resolution detection works by matching the exact pixel dimensions of your video files to Apple's accepted resolutions below. Note that accepted resolutions differ from device resolutions — Apple scales previews across similar device sizes.

#### General requirements

| Property             | Value                                                                       |
| -------------------- | --------------------------------------------------------------------------- |
| Max file size        | 500 MB                                                                      |
| Min duration         | 15 seconds                                                                  |
| Max duration         | 30 seconds                                                                  |
| Max frame rate       | 30 fps                                                                      |
| Default poster frame | 5 seconds                                                                   |
| Orientation          | Portrait or Landscape (Mac, Apple TV, and Apple Vision Pro: landscape only) |
| Previews per device  | Up to 3                                                                     |

#### Video formats

| Property             | H.264                                     | ProRes 422 (HQ only)                |
| -------------------- | ----------------------------------------- | ----------------------------------- |
| Target bit rate      | 10–12 Mbps                                | \~220 Mbps (VBR)                    |
| Video                | Progressive, up to High Profile Level 4.0 | Progressive, no external references |
| Audio codec          | 256 kbps AAC                              | PCM or 256 kbps AAC                 |
| Sample rate          | 44.1 kHz or 48 kHz                        | 44.1 kHz or 48 kHz                  |
| Channels             | Stereo                                    | Stereo                              |
| Supported extensions | `.mov`, `.m4v`, `.mp4`                    | `.mov`                              |

#### iPhone — accepted resolutions

Apple uses a single set of accepted resolutions scaled across multiple device sizes. If a specific size is not provided, Apple falls back to the next larger size.

| Display                                             | Accepted portrait | Accepted landscape | Fallback           |
| --------------------------------------------------- | ----------------- | ------------------ | ------------------ |
| 6.9" (iPhone Air, 16 Pro Max, 16 Plus, 15 Pro Max…) | 886 × 1920        | 1920 × 886         | —                  |
| 6.5" (iPhone 14 Plus, 13 Pro Max, 11, XR…)          | 886 × 1920        | 1920 × 886         | Falls back to 6.9" |
| 6.3" (iPhone 17 Pro, 17, 16 Pro, 16, 15 Pro…)       | 886 × 1920        | 1920 × 886         | Falls back to 6.5" |
| 6.1" (iPhone 16e, 14, 13, 12, 11 Pro, X…)           | 886 × 1920        | 1920 × 886         | Falls back to 6.5" |
| 5.5" (iPhone 8 Plus, 7 Plus, 6S Plus…)              | 1080 × 1920       | 1920 × 1080        | Falls back to 6.1" |
| 4.7" (iPhone SE 2nd/3rd gen, 8, 7, 6S…)             | 750 × 1334        | 1334 × 750         | Falls back to 5.5" |
| 4.0" (iPhone SE 1st gen, 5S, 5C, 5)                 | 1080 × 1920       | 1920 × 1080        | Falls back to 4.7" |

#### iPad — accepted resolutions

| Display                                                        | Accepted portrait         | Accepted landscape        | Fallback            |
| -------------------------------------------------------------- | ------------------------- | ------------------------- | ------------------- |
| 13" (iPad Pro M4/M5, iPad Air M2/M3)                           | 1200 × 1600               | 1600 × 1200               | —                   |
| 12.9" (iPad Pro 2nd gen)                                       | 1200 × 1600 or 900 × 1200 | 1600 × 1200 or 1200 × 900 | Falls back to 13"   |
| 11" (iPad Pro M4/M5, iPad Air 4th/5th gen, iPad mini 6th gen…) | 1200 × 1600               | 1600 × 1200               | Falls back to 13"   |
| 10.5" (iPad Pro, iPad Air 3rd gen, iPad 7th–9th gen)           | 1200 × 1600               | 1600 × 1200               | Falls back to 12.9" |
| 9.7" (iPad Pro, iPad Air, iPad mini 2–5…)                      | 900 × 1200                | 1200 × 900                | Falls back to 10.5" |

#### Google Play promo video

Google Play does not support direct video file uploads through the API. Promo videos on Google Play are managed as a **YouTube URL** per locale, set directly in the Google Play Console under the store listing. App Store Manager does not transfer video assets to Google Play.
