<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Peter Šutarík</title>
    <description>The latest articles on DEV Community by Peter Šutarík (@ptr_strk).</description>
    <link>https://dev.to/ptr_strk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4154993%2Fa6020be2-080d-4502-bd8d-0e4c016b3ebd.jpg</url>
      <title>DEV Community: Peter Šutarík</title>
      <link>https://dev.to/ptr_strk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ptr_strk"/>
    <language>en</language>
    <item>
      <title>Android App Bundle vs APK: key AAB differences</title>
      <dc:creator>Peter Šutarík</dc:creator>
      <pubDate>Fri, 02 Oct 2026 08:49:40 +0000</pubDate>
      <link>https://dev.to/ptr_strk/android-app-bundle-vs-apk-key-aab-differences-g8b</link>
      <guid>https://dev.to/ptr_strk/android-app-bundle-vs-apk-key-aab-differences-g8b</guid>
      <description>&lt;h2&gt;
  
  
  What Is an Android App Bundle?
&lt;/h2&gt;

&lt;p&gt;An Android App Bundle (.aab) is Google's publishing format for Android apps. It contains all of an app's compiled code and resources but defers APK generation to Google Play, which uses Dynamic Delivery to build optimized, device-specific APKs for each user (&lt;a href="https://developer.android.com/guide/app-bundle" rel="noopener noreferrer"&gt;source: Android Developers&lt;/a&gt;). The result: each download includes only the code, language strings, and screen-density assets the target device actually needs — averaging about 15% smaller than a universal APK (&lt;a href="https://developer.android.com/guide/app-bundle" rel="noopener noreferrer"&gt;source: Android Developers&lt;/a&gt;). The format is open-source and supported by Android Studio, Gradle, Bazel, Unity, and Unreal Engine (&lt;a href="https://developer.android.com/guide/app-bundle/app-bundle-format" rel="noopener noreferrer"&gt;source: Android Developers, App Bundle format&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Did the Android App Bundle Replace APK?
&lt;/h3&gt;

&lt;p&gt;Google Play has required the Android App Bundle format for all new app submissions since August 2021 (&lt;a href="https://android-developers.googleblog.com/2021/06/the-future-of-android-app-bundles-is.html" rel="noopener noreferrer"&gt;source: Android Developers Blog&lt;/a&gt;). As of June 2023, even TV app updates must use AAB (&lt;a href="https://support.google.com/googleplay/android-developer/answer/9844279?hl=en" rel="noopener noreferrer"&gt;source: Google Play Console Help&lt;/a&gt;). The legacy APK — a single, monolithic package containing code and resources for every possible device — is no longer accepted for new Play Store listings.&lt;/p&gt;

&lt;p&gt;The difference is structural. An APK bundles everything — every language string, every screen-density drawable, every CPU architecture library — into one file. With AAB, a Pixel 9 running Android 16 gets a different set of splits than a Samsung Galaxy A15 running Android 13, because Dynamic Delivery tailors each download to the target device.&lt;/p&gt;

&lt;p&gt;This matters for conversion rates. Google Play's own research found that for every 6 MB increase in APK size, install conversion rate drops by 1% (&lt;a href="https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2" rel="noopener noreferrer"&gt;source: Google Play Apps &amp;amp; Games, "Shrinking APKs, Growing Installs"&lt;/a&gt;). In emerging markets — where devices often have limited storage — removing 10 MB from an app's download size correlates with a ~2.5% increase in install conversion rate (&lt;a href="https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2" rel="noopener noreferrer"&gt;same source&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Android App Bundle vs APK: Feature-by-Feature Comparison
&lt;/h2&gt;

&lt;p&gt;The core differences between AAB and APK go beyond file format. Here is a direct comparison.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;APK&lt;/th&gt;
&lt;th&gt;Android App Bundle (AAB)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;File extension&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.apk&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.aab&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Installable directly&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No — Google Play generates split APKs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Play accepted (new apps)&lt;/td&gt;
&lt;td&gt;No (since August 2021)&lt;/td&gt;
&lt;td&gt;Yes (required)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max compressed download size&lt;/td&gt;
&lt;td&gt;100 MB (&lt;a href="https://support.google.com/googleplay/android-developer/answer/9859372?hl=en" rel="noopener noreferrer"&gt;source: Play Console Help&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;200 MB per module (&lt;a href="https://support.google.com/googleplay/android-developer/answer/9859372?hl=en" rel="noopener noreferrer"&gt;source: Play Console Help&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average download size reduction&lt;/td&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;~15% smaller than universal APK (&lt;a href="https://developer.android.com/guide/app-bundle" rel="noopener noreferrer"&gt;source: Android Developers&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic feature modules&lt;/td&gt;
&lt;td&gt;Not supported&lt;/td&gt;
&lt;td&gt;Supported — install features on demand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Play App Signing&lt;/td&gt;
&lt;td&gt;Optional&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sideloading support&lt;/td&gt;
&lt;td&gt;Direct install&lt;/td&gt;
&lt;td&gt;Requires extraction to split APKs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alternative store distribution&lt;/td&gt;
&lt;td&gt;Standard format&lt;/td&gt;
&lt;td&gt;Not accepted by most third-party stores&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flxb263r7977514wpj4xt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flxb263r7977514wpj4xt.png" alt="Comparison of Android App Bundle advantages (smaller downloads, 200 MB limit, dynamic features, required by Play Store) versus APK advantages (sideloading, alternative stores, full signing control, CI/CD compatibility)" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AAB is required for Google Play since 2021 — APK remains essential for sideloading and alternative store distribution.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How AAB's Size Reduction Affects Real Apps
&lt;/h2&gt;

&lt;p&gt;The ~15% average size reduction that AAB delivers over a universal APK (&lt;a href="https://developer.android.com/guide/app-bundle" rel="noopener noreferrer"&gt;source: Android Developers&lt;/a&gt;) sounds abstract until you see it in the context of actual Play Store competition. In real-world deployments the savings can be larger: Microsoft reported a 23% file size reduction for LinkedIn after switching to the Android App Bundle format (2018) (&lt;a href="https://techcrunch.com/2018/05/08/googles-new-android-app-bundles-promise-to-make-apps-radically-smaller/" rel="noopener noreferrer"&gt;source: TechCrunch, Google I/O 2018&lt;/a&gt;). Consider the finance category, where apps fight for high-difficulty keywords.&lt;/p&gt;

&lt;p&gt;When I built Sonar's Android data pipeline, the finance category stood out for the density of its keyword competition. Sonar's keyword index puts "budget planner" at Android difficulty 68 and popularity 44 — with 30 apps in Play Store results. At that difficulty level, 30 apps are competing for the same search term. Every marginal advantage matters — and download size is one of the factors users see before tapping "Install."&lt;/p&gt;

&lt;p&gt;Look at what's ranking. In Sonar's app index, the top-ranking finance apps for this keyword include Wallet: Budget Expense Tracker by BudgetBakers (12.8M+ installs, 4.6 rating) and Money Manager Expense &amp;amp; Budget by Realbyte Inc. (22.2M+ installs, 4.6 rating). Both are free apps — Wallet uses a freemium model, while Money Manager is ad-supported with a paid upgrade — so the install friction of a large download would directly hurt conversion.&lt;/p&gt;

&lt;p&gt;Sonar's keyword index puts "expense tracker" at Android difficulty 69 and popularity 41 — with 30 apps in Play Store results. The difficulty is even higher, and the top results include Money Tracker by Horoscope365 (8.4M+ installs) and MyMoney by Ananta Raha (2.4M+ installs, 4.8 rating). These apps serve emerging markets where download size sensitivity is highest — MyMoney specifically advertises being "fully offline, no internet required," suggesting its user base includes regions with limited connectivity.&lt;/p&gt;

&lt;p&gt;In Q2 2026, testing Sonar's keyword index across 500+ Android keywords, I noticed that competitive finance keywords — difficulty 60 and above — consistently feature apps where size optimization is visible in the listing. When I look at competitive keyword landscapes like these through Sonar's data, the AAB format is not just a technical requirement — it is an ASO lever. A 15% smaller download size on a 50 MB app saves 7.5 MB. Google's research shows that every 6 MB reduction in download size increases install conversion by about 1% (&lt;a href="https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2" rel="noopener noreferrer"&gt;source: Google Play Apps &amp;amp; Games, "Shrinking APKs, Growing Installs"&lt;/a&gt;) — so that 7.5 MB saving translates to roughly a 1% higher install conversion rate in developed markets and potentially more in emerging markets. For apps competing against 29 other results on a difficulty-68 keyword, that edge compounds.&lt;/p&gt;

&lt;p&gt;For a deeper look at how keyword difficulty interacts with conversion, see our guide on &lt;a href="https://trysonar.app/blog/low-competition-keywords?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=android-app-bundle-vs-apk" rel="noopener noreferrer"&gt;how to find low-competition app store keywords&lt;/a&gt; and our &lt;a href="https://trysonar.app/blog/app-store-conversion-rate?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=android-app-bundle-vs-apk" rel="noopener noreferrer"&gt;app store conversion rate benchmarks&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Play App Signing: The Security Trade-Off
&lt;/h2&gt;

&lt;p&gt;AAB requires Play App Signing — meaning Google manages your app's signing key on their infrastructure (&lt;a href="https://support.google.com/googleplay/android-developer/answer/9842756?hl=en" rel="noopener noreferrer"&gt;source: Play Console Help&lt;/a&gt;). This is a deliberate design decision with real trade-offs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you gain:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google stores your key using the same Key Management Service (KMS) that protects Google's own keys (&lt;a href="https://support.google.com/googleplay/android-developer/answer/9842756?hl=en" rel="noopener noreferrer"&gt;source: Play Console Help&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Protection against key compromise — if your local key leaks, an attacker can't push a signed malicious update to your users&lt;/li&gt;
&lt;li&gt;Automatic key rotation without requiring users to reinstall&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What developers worry about:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google holds the signing key, which means only Google would know if modifications were made to the delivered APK&lt;/li&gt;
&lt;li&gt;The developer loses end-to-end control over exactly what binary the user receives&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google addressed these concerns with Code Transparency, a verification layer that lets developers add a second signing key so anyone can verify the delivered APK matches what the developer built (&lt;a href="https://developer.android.com/guide/app-bundle/code-transparency" rel="noopener noreferrer"&gt;source: Android Developers, Code Transparency&lt;/a&gt;). In May 2026, Google expanded this further with Android Binary Transparency — a public ledger ensuring that any Google-signed app released after May 1, 2026 is logged, and any unlisted app was not authorized for release (&lt;a href="https://blog.google/security/bringing-binary-transparency-to-the-android-ecosystem/" rel="noopener noreferrer"&gt;source: Google Security Blog&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;For most developers publishing through Google Play, Play App Signing is a net positive. But if you distribute through alternative stores or need full cryptographic control, you should understand the implications.&lt;/p&gt;

&lt;h2&gt;
  
  
  When You Still Need APK
&lt;/h2&gt;

&lt;p&gt;AAB is mandatory for Google Play, but APK remains the format for several distribution channels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sideloading&lt;/strong&gt;: Users installing apps directly on Android devices use APK files. AAB files cannot be installed directly — they must be extracted into split APKs first (&lt;a href="https://www.xda-developers.com/how-to-sideload-install-android-app-apk/" rel="noopener noreferrer"&gt;source: XDA Developers&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;F-Droid&lt;/strong&gt;: The open-source app repository distributes APKs exclusively. F-Droid builds apps from source and signs them with its own key, making AAB incompatible with its model (&lt;a href="https://f-droid.org" rel="noopener noreferrer"&gt;source: f-droid.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Samsung Galaxy Store&lt;/strong&gt;: Pre-installed on Samsung devices across 180 countries, the Galaxy Store accepts APKs as its primary submission format (&lt;a href="https://developer.samsung.com/galaxy-store/getting-started.html" rel="noopener noreferrer"&gt;source: Samsung Galaxy Store Developer Documentation&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise / managed deployment&lt;/strong&gt;: Private apps on managed Google Play can still use either APKs or AABs (&lt;a href="https://developer.android.com/guide/app-bundle/faq" rel="noopener noreferrer"&gt;source: Android Developers FAQ&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing and CI/CD&lt;/strong&gt;: Many testing frameworks and emulator-based CI pipelines still use APK for direct installation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Starting in 2026, Google began rolling out developer verification requirements for all Android developers, including those distributing outside the Play Store (&lt;a href="https://www.androidsage.com/2026/03/31/how-to-sideload-apps-on-android-after-april-2026/" rel="noopener noreferrer"&gt;source: AndroidSage&lt;/a&gt;). This does not eliminate APK sideloading, but it adds verification steps in some regions.&lt;/p&gt;

&lt;p&gt;The practical takeaway: build both. Your Gradle build can generate AAB for Google Play and APK for everything else simultaneously. There is no runtime penalty.&lt;/p&gt;

&lt;h2&gt;
  
  
  How AAB Interacts with Google Play ASO
&lt;/h2&gt;

&lt;p&gt;The AAB format itself does not change how Google Play indexes your metadata. Google Play still indexes your title (up to 30 characters), short description (up to 80 characters), and long description (up to 4,000 characters) identically regardless of upload format (&lt;a href="https://support.google.com/googleplay/android-developer/answer/9859152?hl=en" rel="noopener noreferrer"&gt;source: Google Play Console Help&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;But AAB affects ASO indirectly through three mechanisms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Download size displayed in the listing.&lt;/strong&gt; Google Play shows the estimated download size to users. AAB shrinks this number by delivering only device-relevant assets. A smaller displayed size can improve tap-through from search results to the listing page — and listing-page conversion is a factor Google has acknowledged as relevant to ranking (&lt;a href="https://support.google.com/googleplay/android-developer/answer/6227309?hl=en" rel="noopener noreferrer"&gt;source: Google Play Console Help, "Store listing performance"&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Install success rate.&lt;/strong&gt; If a user taps "Install" but the download fails (due to insufficient storage or a slow connection), Google counts that as a failed install. AAB's smaller download sizes reduce these failures. While Google has not published the exact weight of install success rate in its ranking algorithm, higher conversion rates are broadly understood to correlate with better Play Store visibility (&lt;a href="https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2" rel="noopener noreferrer"&gt;source: Google Play Apps &amp;amp; Games&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Uninstall rate.&lt;/strong&gt; Larger apps are uninstalled more frequently to free storage. Google's research showed that users in emerging markets download apps a quarter the size of those in developed markets (&lt;a href="https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2" rel="noopener noreferrer"&gt;source: Google Play Apps &amp;amp; Games&lt;/a&gt;). While Google has not confirmed uninstall rate as a direct ranking input, retaining users on-device is a prerequisite for engagement metrics that do feed ranking.&lt;/p&gt;

&lt;p&gt;For a complete breakdown of how these ranking signals interact, check out our &lt;a href="https://trysonar.app/blog/android-aso-guide?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=android-app-bundle-vs-apk" rel="noopener noreferrer"&gt;Android ASO guide for Google Play&lt;/a&gt;. To measure the actual search impact after switching to AAB, our walkthrough of &lt;a href="https://trysonar.app/blog/play-console-search-analytics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=android-app-bundle-vs-apk" rel="noopener noreferrer"&gt;Play Console search analytics&lt;/a&gt; shows how to read impression and conversion data for your keywords. And if you are optimizing your Play Store listing text specifically, our guide on &lt;a href="https://trysonar.app/blog/google-play-long-description-keyword-structure?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=android-app-bundle-vs-apk" rel="noopener noreferrer"&gt;Google Play long description keyword structure&lt;/a&gt; covers what gets indexed and how. If you distribute in multiple countries, &lt;a href="https://trysonar.app/blog/play-store-ranking-factors-ios-doesnt-have?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=android-app-bundle-vs-apk" rel="noopener noreferrer"&gt;custom store listings with country-level keywords&lt;/a&gt; let you tailor metadata per market — pairing that with AAB's per-device asset delivery means each user gets both the right language assets and the right listing copy.&lt;/p&gt;

&lt;p&gt;For a full list of Android-only signals that interact with AAB — including vitals, uninstall rate, and install count — see our breakdown of &lt;a href="https://trysonar.app/blog/play-store-ranking-factors-ios-doesnt-have?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=android-app-bundle-vs-apk" rel="noopener noreferrer"&gt;Play Store ranking factors iOS doesn't have&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic Feature Modules: The AAB-Only Advantage
&lt;/h2&gt;

&lt;p&gt;Dynamic feature modules let you split your app into pieces that users download only when needed (&lt;a href="https://developer.android.com/guide/app-bundle" rel="noopener noreferrer"&gt;source: Android Developers&lt;/a&gt;). This is exclusive to AAB — APKs cannot do conditional or on-demand delivery. Halodoc, a healthcare platform, cut its Play Store install size by 40% after adopting dynamic feature modules, which drove an 11% higher install conversion rate and reduced uninstalls by 52% (&lt;a href="https://blogs.halodoc.io/modularizing-at-scale-how-halodoc-adopted-android-dynamic-feature-modules-2/" rel="noopener noreferrer"&gt;source: Halodoc Engineering Blog&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Three delivery modes are available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install-time delivery&lt;/strong&gt;: The module downloads with the base app but is a separate module internally. Useful for features every user needs but that you want to update independently&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conditional delivery&lt;/strong&gt;: The module downloads automatically only when the device meets specified conditions (e.g., specific hardware features, API level, or country)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-demand delivery&lt;/strong&gt;: The module is not downloaded at all until the user explicitly accesses the feature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On-demand delivery is particularly powerful for apps with expensive features that only a subset of users need — think AR try-on in a shopping app, or an advanced chart renderer in a finance app. Rather than forcing all 30 apps competing for "budget planner" to bloat their base install with rarely-used analysis tools, on-demand delivery lets developers keep the initial download lean.&lt;/p&gt;

&lt;p&gt;The compressed download size limit for base modules is 200 MB, but with Play Asset Delivery you can go beyond that for game assets and large media. For most non-game apps, staying well under 200 MB is both technically achievable and strategically smart.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Build an Android App Bundle
&lt;/h2&gt;

&lt;p&gt;Building an Android App Bundle requires Android Studio 3.2 or later and a &lt;code&gt;build.gradle&lt;/code&gt; configuration that targets the &lt;code&gt;bundle&lt;/code&gt; task instead of &lt;code&gt;assemble&lt;/code&gt; (&lt;a href="https://developer.android.com/build/building-cmdline#build_bundle" rel="noopener noreferrer"&gt;source: Android Developers&lt;/a&gt;). In Android Studio, select &lt;strong&gt;Build &amp;gt; Build Bundle(s) / APK(s) &amp;gt; Build Bundle(s)&lt;/strong&gt; to generate a signed &lt;code&gt;.aab&lt;/code&gt; file. From the command line, run &lt;code&gt;./gradlew bundleRelease&lt;/code&gt; to produce a release-quality AAB.&lt;/p&gt;

&lt;p&gt;Before uploading, you can test the Android App Bundle locally using Google's open-source &lt;code&gt;bundletool&lt;/code&gt; utility. The command &lt;code&gt;bundletool build-apks --bundle=app.aab --output=app.apks&lt;/code&gt; generates a set of split APKs from your bundle, and &lt;code&gt;bundletool install-apks --apks=app.apks&lt;/code&gt; installs the device-appropriate splits on a connected device (&lt;a href="https://developer.android.com/tools/bundletool" rel="noopener noreferrer"&gt;source: Android Developers, bundletool&lt;/a&gt;). This lets you verify exact download sizes and resource splits before publishing to Google Play.&lt;/p&gt;

&lt;p&gt;One consideration for CI/CD pipelines: if your build system previously produced APKs for deployment, switching to AAB output requires updating your signing configuration to use Play App Signing. Google's documentation recommends uploading your existing signing key to Play App Signing during enrollment, then using an upload key for subsequent submissions (&lt;a href="https://support.google.com/googleplay/android-developer/answer/9842756?hl=en" rel="noopener noreferrer"&gt;source: Play Console Help&lt;/a&gt;). For a deeper look at how Play Store ranking weighs technical signals like these, see our guide on &lt;a href="https://trysonar.app/blog/play-store-ranking-factors-ios-doesnt-have?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=android-app-bundle-vs-apk" rel="noopener noreferrer"&gt;how Play Store ranking works in 2026&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2026 Requirements: What's Current
&lt;/h2&gt;

&lt;p&gt;Google Play requires AAB format, Play App Signing, and API level 36 targeting (by August 31, 2026) for all new app submissions (&lt;a href="https://support.google.com/googleplay/android-developer/answer/11926878?hl=en" rel="noopener noreferrer"&gt;source: Play Console Help&lt;/a&gt;). Here is the full set of current requirements:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Deadline&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AAB format for new apps&lt;/td&gt;
&lt;td&gt;August 2021 (already enforced)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://android-developers.googleblog.com/2021/06/the-future-of-android-app-bundles-is.html" rel="noopener noreferrer"&gt;Android Developers Blog&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AAB for TV app updates&lt;/td&gt;
&lt;td&gt;June 2023 (already enforced)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://support.google.com/googleplay/android-developer/answer/9844279?hl=en" rel="noopener noreferrer"&gt;Play Console Help&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Target API level 36 (Android 16)&lt;/td&gt;
&lt;td&gt;August 31, 2026&lt;/td&gt;
&lt;td&gt;&lt;a href="https://support.google.com/googleplay/android-developer/answer/11926878?hl=en" rel="noopener noreferrer"&gt;Play Console Help&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer identity verification&lt;/td&gt;
&lt;td&gt;Rolling out 2026–2027&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.androidsage.com/2026/03/31/how-to-sideload-apps-on-android-after-april-2026/" rel="noopener noreferrer"&gt;AndroidSage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Play App Signing&lt;/td&gt;
&lt;td&gt;Required with AAB&lt;/td&gt;
&lt;td&gt;&lt;a href="https://support.google.com/googleplay/android-developer/answer/9842756?hl=en" rel="noopener noreferrer"&gt;Play Console Help&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The API level 36 target requirement is the newest deadline that developers need to plan for. Combined with the existing AAB mandate and Play App Signing, this means your build pipeline should already be producing AAB outputs signed through Play App Signing.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Android App Bundle the same as APK?
&lt;/h3&gt;

&lt;p&gt;No. An Android App Bundle (.aab) is a publishing format you upload to Google Play — it contains all your app's code and resources but is not installable on a device. Google Play uses the AAB to generate optimized APKs for each device configuration through Dynamic Delivery. An APK (.apk) is the actual installable file that runs on Android devices (&lt;a href="https://developer.android.com/guide/app-bundle" rel="noopener noreferrer"&gt;source: Android Developers&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Why should I use an Android App Bundle instead of an APK?
&lt;/h3&gt;

&lt;p&gt;Google Play requires the Android App Bundle for all new app submissions since August 2021, so developers have no choice for Play Store distribution (&lt;a href="https://android-developers.googleblog.com/2021/06/the-future-of-android-app-bundles-is.html" rel="noopener noreferrer"&gt;source: Android Developers Blog&lt;/a&gt;). Beyond the mandate, AAB delivers measurable benefits: downloads average ~15% smaller than universal APKs (&lt;a href="https://developer.android.com/guide/app-bundle" rel="noopener noreferrer"&gt;source: Android Developers&lt;/a&gt;), the compressed download size limit doubles from 100 MB to 200 MB per module (&lt;a href="https://support.google.com/googleplay/android-developer/answer/9859372?hl=en" rel="noopener noreferrer"&gt;source: Play Console Help&lt;/a&gt;), and dynamic feature modules let you deliver code on demand — Halodoc cut install size by 40% and saw an 11% higher install conversion rate using this approach (&lt;a href="https://blogs.halodoc.io/modularizing-at-scale-how-halodoc-adopted-android-dynamic-feature-modules-2/" rel="noopener noreferrer"&gt;source: Halodoc Engineering Blog&lt;/a&gt;). For sideloading or alternative stores like F-Droid and Samsung Galaxy Store, you still need APK.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does an Android App Bundle contain?
&lt;/h3&gt;

&lt;p&gt;An Android App Bundle packages all of an app's compiled code (DEX files), resources, assets, and native libraries into a single .aab archive — structured into a base module and optional feature modules, plus a BundleConfig.pb file that controls how Google Play generates split APKs (&lt;a href="https://developer.android.com/guide/app-bundle/app-bundle-format" rel="noopener noreferrer"&gt;source: Android Developers, App Bundle format&lt;/a&gt;). Unlike an APK, the .aab file is not installable on a device. Google Play reads the bundle's manifest and resource tables, then uses Dynamic Delivery to generate the smallest possible set of split APKs for each user's device configuration — filtering by screen density, CPU architecture, and language.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I still upload APKs to Google Play?
&lt;/h3&gt;

&lt;p&gt;For new apps, no — Google Play has required AAB since August 2021. Existing apps that were already published as APKs may still push updates as APKs in some cases, but Google strongly encourages migration to AAB. Private apps on managed Google Play can still use either format (&lt;a href="https://developer.android.com/guide/app-bundle/faq" rel="noopener noreferrer"&gt;source: Android Developers FAQ&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  How much smaller are Android App Bundle downloads compared to APK?
&lt;/h3&gt;

&lt;p&gt;On average, apps published as AABs are about 15% smaller than equivalent universal APKs (&lt;a href="https://developer.android.com/guide/app-bundle" rel="noopener noreferrer"&gt;source: Android Developers&lt;/a&gt;). Apps with extensive localization, multiple ABI targets, or varied screen-density assets can see reductions up to 50% when combined with dynamic feature modules. Google Play's research showed that every 6 MB reduction in download size increases install conversion by about 1% (&lt;a href="https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2" rel="noopener noreferrer"&gt;source: Google Play Apps &amp;amp; Games&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Does switching to AAB affect my app's ASO ranking?
&lt;/h3&gt;

&lt;p&gt;The AAB format does not directly change how Google Play indexes your app metadata. Your title, short description, and long description are processed identically regardless of whether you upload an AAB or an APK (&lt;a href="https://support.google.com/googleplay/android-developer/answer/9859152?hl=en" rel="noopener noreferrer"&gt;source: Google Play Console Help&lt;/a&gt;). However, AAB indirectly improves ASO-relevant metrics by reducing download size (which improves install conversion rate), reducing install failures (which improves conversion signals), and lowering uninstall rates on storage-constrained devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I create an Android App Bundle?
&lt;/h3&gt;

&lt;p&gt;In Android Studio, select &lt;strong&gt;Build &amp;gt; Build Bundle(s) / APK(s) &amp;gt; Build Bundle(s)&lt;/strong&gt; to generate a signed &lt;code&gt;.aab&lt;/code&gt; file. From the command line, run &lt;code&gt;./gradlew bundleRelease&lt;/code&gt;. You can test the output locally with Google's &lt;code&gt;bundletool&lt;/code&gt; before uploading to Google Play. The Android App Bundle format requires Play App Signing — Google manages your release signing key, while you retain an upload key (&lt;a href="https://developer.android.com/build/building-cmdline#build_bundle" rel="noopener noreferrer"&gt;source: Android Developers&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Do alternative app stores accept Android App Bundles?
&lt;/h3&gt;

&lt;p&gt;Most alternative Android app stores — including F-Droid, the Samsung Galaxy Store, and APKMirror — primarily use the APK format. If you distribute outside Google Play, you should generate both AAB (for Play Store) and APK (for other channels) from the same build. Your Gradle configuration can produce both outputs simultaneously with no runtime differences (&lt;a href="https://developer.android.com/guide/app-bundle/faq" rel="noopener noreferrer"&gt;source: Android Developers FAQ&lt;/a&gt;).&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://trysonar.app/blog/android-app-bundle-vs-apk?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=android-app-bundle-vs-apk" rel="noopener noreferrer"&gt;trysonar.app&lt;/a&gt;. I build &lt;a href="https://trysonar.app/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=android-app-bundle-vs-apk" rel="noopener noreferrer"&gt;Sonar&lt;/a&gt;, the ASO tool for indie app developers.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>androidappbundle</category>
      <category>apk</category>
      <category>googleplay</category>
      <category>android</category>
    </item>
    <item>
      <title>Apple Search Ads API: Platform API Guide</title>
      <dc:creator>Peter Šutarík</dc:creator>
      <pubDate>Thu, 01 Oct 2026 15:32:28 +0000</pubDate>
      <link>https://dev.to/ptr_strk/apple-search-ads-api-platform-api-guide-4kco</link>
      <guid>https://dev.to/ptr_strk/apple-search-ads-api-platform-api-guide-4kco</guid>
      <description>&lt;h2&gt;
  
  
  What Is the Apple Ads Platform API?
&lt;/h2&gt;

&lt;p&gt;The Apple Ads Platform API (&lt;code&gt;api.ads.apple.com/v1&lt;/code&gt;) is Apple's unified API for managing Search Ads campaigns, pulling reports, and — for the first time — querying official search-term popularity data programmatically. It replaces the older Campaign Management API (v4 and v5, hosted at &lt;code&gt;api.searchads.apple.com&lt;/code&gt;), which &lt;a href="https://9to5mac.com/2026/04/02/apple-details-plan-to-sunset-ads-campaign-management-api-in-2027/" rel="noopener noreferrer"&gt;sunsets on January 26, 2027&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The migration deadline is real. If you have scripts, dashboards, or third-party integrations built against the old apple search ads api, they will stop working in five months. But the new API isn't just a forced migration — it adds a queryable, weekly/monthly search-term popularity dataset that the old endpoints never exposed.&lt;/p&gt;

&lt;p&gt;This guide covers everything developers searching for apple search ads api documentation need: authentication, the popularity endpoint (the part ASO practitioners care about most), what the data actually contains, and what it doesn't. If you're already running Apple Search Ads and want the campaign-setup basics, see the &lt;a href="https://trysonar.app/blog/apple-search-ads-guide?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=apple-ads-platform-api-guide" rel="noopener noreferrer"&gt;complete Apple Search Ads guide for indie developers&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed vs the Campaign Management API v4/v5
&lt;/h2&gt;

&lt;p&gt;The apple search ads campaign management api at &lt;code&gt;api.searchads.apple.com&lt;/code&gt; handled campaigns, ad groups, keywords, and reporting. The Platform API keeps all of that and adds three things worth knowing about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Unified Apple Maps ("Brands") campaigns.&lt;/strong&gt; The old API was App Store only. The Platform API manages both App Store and Apple Maps ad placements from a single base URL (source: &lt;a href="https://developer.apple.com/documentation/apple-ads-platform-api" rel="noopener noreferrer"&gt;Apple Ads Platform API documentation&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Official client libraries.&lt;/strong&gt; Apple published first-party SDKs on GitHub on August 14, 2026: &lt;code&gt;apple-ads-platform-api-python&lt;/code&gt;, &lt;code&gt;apple-ads-platform-api-node&lt;/code&gt;, &lt;code&gt;apple-ads-platform-api-java&lt;/code&gt;, and &lt;code&gt;apple-ads-platform-api-swift&lt;/code&gt; (source: &lt;a href="https://github.com/apple" rel="noopener noreferrer"&gt;github.com/apple&lt;/a&gt;). As of this writing, all four repos have near-zero stars — adoption hasn't caught up yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The Insights endpoints.&lt;/strong&gt; This is the centerpiece. The old API could return impression-share data (Apple announced that capability in January 2023), but the Platform API adds a fully queryable search-term popularity dataset with genre rankings, cross-genre popularity scores, and history back to October 2025 — precisely when Apple changed how Search Popularity data is reported. For background on that metric change, see the &lt;a href="https://trysonar.app/blog/apple-search-popularity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=apple-ads-platform-api-guide" rel="noopener noreferrer"&gt;Apple Search Popularity score explainer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One thing that did NOT change: OAuth 2.0 client-credentials authentication with the &lt;code&gt;searchadsorg&lt;/code&gt; scope. Your existing credentials carry over. The token host is the same. If you've built anything against the apple ads api surface before, the auth flow will feel familiar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Access: Roles, OAuth, and the X-AP-Context Gotcha
&lt;/h2&gt;

&lt;p&gt;Access requires an Apple Search Ads account with one of three API roles: &lt;strong&gt;API Account Manager&lt;/strong&gt;, &lt;strong&gt;API Read Only&lt;/strong&gt;, or &lt;strong&gt;Limited Access&lt;/strong&gt;. Apple's &lt;a href="https://ads.apple.com/app-store/help/campaigns/0022-use-the-apple-ads-platform-api" rel="noopener noreferrer"&gt;setup help page&lt;/a&gt; walks through role assignment.&lt;/p&gt;

&lt;p&gt;Authentication is standard OAuth 2.0 client-credentials. You generate a client ID and secret in the Apple Ads UI, request a bearer token with scope &lt;code&gt;searchadsorg&lt;/code&gt;, and include the token in every subsequent call.&lt;/p&gt;

&lt;p&gt;Here's where I burned an hour when integrating this into Sonar's pipeline: &lt;strong&gt;every API call requires an &lt;code&gt;X-AP-Context&lt;/code&gt; header&lt;/strong&gt; containing your ad account ID. The format is &lt;code&gt;X-AP-Context: adAccountId={id}&lt;/code&gt;. You get the account ID from &lt;code&gt;GET /v1/acls&lt;/code&gt;. Apple's documentation mentions this, but it's easy to miss — especially if you're used to APIs where the token itself identifies the account. If your first call returns a 403, check this header before anything else.&lt;/p&gt;

&lt;p&gt;A minimal curl to verify your setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; GET &lt;span class="s2"&gt;"https://api.ads.apple.com/v1/acls"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-AP-Context: adAccountId=&lt;/span&gt;&lt;span class="nv"&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For anyone building in Python, Apple's official &lt;code&gt;apple-ads-platform-api-python&lt;/code&gt; library handles token refresh and the context header automatically (source: &lt;a href="https://github.com/apple/apple-ads-platform-api-python" rel="noopener noreferrer"&gt;github.com/apple/apple-ads-platform-api-python&lt;/a&gt;). The Node, Java, and Swift libraries do the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Search-Term Popularity Endpoint
&lt;/h2&gt;

&lt;p&gt;The endpoint ASO practitioners have been waiting for is &lt;code&gt;POST /v1/insights/apps/search-term-popularity/query&lt;/code&gt;. It returns Apple's official search-term rankings by country and genre, including the same Search Popularity score that Apple Search Ads surfaces in its UI (source: &lt;a href="https://developer.apple.com/documentation/apple-ads-platform-api" rel="noopener noreferrer"&gt;Apple Ads Platform API documentation&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Request Shape
&lt;/h3&gt;

&lt;p&gt;You POST a JSON body specifying:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Granularity&lt;/strong&gt;: &lt;code&gt;WEEKLY_SUN_SAT&lt;/code&gt; (weeks run Sunday through Saturday, UTC) or &lt;code&gt;MONTHLY&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Country/region filter&lt;/strong&gt;: &lt;code&gt;countryOrRegion&lt;/code&gt; with &lt;code&gt;EQUALS&lt;/code&gt; or &lt;code&gt;IN&lt;/code&gt; operators&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Genre filter&lt;/strong&gt;: &lt;code&gt;genre&lt;/code&gt; with &lt;code&gt;EQUALS&lt;/code&gt; — one of 15 consumer genres (see below)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Page size&lt;/strong&gt;: up to 5,000 results per page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;History reaches back to &lt;strong&gt;October 2025&lt;/strong&gt;, which is when Apple's Search Popularity metric change took effect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Response Fields
&lt;/h3&gt;

&lt;p&gt;Each record in the response includes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;searchTerm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The keyword or phrase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rankInGenre&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Position within the specified genre (1 = most searched)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;searchPopularityInGenre&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1–100 popularity score within the genre&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;searchPopularity1to100&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cross-genre popularity on Apple's 1–100 scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;searchPopularity1to5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The old coarse 1–5 scale (legacy, still returned)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;searchPopularity1to100&lt;/code&gt; value is the one that maps directly to what ASO tools display as "Search Popularity." Sonar's analysis of Apple's search-term dataset (August 2026) confirmed that the searchPopularity1to100 values match Apple's keyword-level Search Popularity scale with a mean absolute error under 1 point — it's the real metric, not a new proxy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Undocumented searchTerm Filter
&lt;/h3&gt;

&lt;p&gt;As of August 2026, you can filter by &lt;code&gt;searchTerm&lt;/code&gt; using &lt;code&gt;EQUALS&lt;/code&gt;, &lt;code&gt;IN&lt;/code&gt;, or &lt;code&gt;CONTAINS&lt;/code&gt; operators — even though this filter is not in Apple's official documentation. I've tested it and it works. But because it's undocumented, treat it as subject to change. Don't build critical pipelines around &lt;code&gt;CONTAINS&lt;/code&gt; searches without a fallback to full-list ingestion.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fine Print: What the Popularity Data Actually Covers
&lt;/h2&gt;

&lt;p&gt;This is where expectations need calibrating. The search-term popularity endpoint is a &lt;strong&gt;ranked-list dataset, not a lookup service&lt;/strong&gt;. You cannot query the popularity of an arbitrary keyword — you get the top terms per genre, and anything outside that list simply isn't returned.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Numbers
&lt;/h3&gt;

&lt;p&gt;One US week of Apple's search-term popularity dataset contains exactly 7,500 distinct terms (top ~500 across 15 consumer genres). The SP cutoff at rank 500 ranges from 39 (Sports) to 57 (Games) — mid-popularity keywords in crowded genres don't make the list.&lt;/p&gt;

&lt;p&gt;The 15 consumer genres covered are: Business, Education, Entertainment, Finance, Food &amp;amp; Drink, Games, Health &amp;amp; Fitness, Lifestyle, News/Publications, Photo &amp;amp; Video, Productivity &amp;amp; Utilities, Shopping, Social Networking, Sports, and Travel (source: &lt;a href="https://developer.apple.com/documentation/apple-ads-platform-api" rel="noopener noreferrer"&gt;Apple Ads Platform API documentation&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Coverage by Popularity Band
&lt;/h3&gt;

&lt;p&gt;How much of the keyword landscape does this dataset capture? Sonar compared Apple's ranked lists against its own 160,000-keyword US corpus:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Popularity band&lt;/th&gt;
&lt;th&gt;Coverage in Apple's lists&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;66+&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;56–65&lt;/td&gt;
&lt;td&gt;~87%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;46–55&lt;/td&gt;
&lt;td&gt;~33%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Below 46&lt;/td&gt;
&lt;td&gt;Under 1%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: Sonar's analysis of Apple's search-term dataset, August 2026.&lt;/p&gt;

&lt;p&gt;Real examples that fall outside their genre's top 500 despite meaningful popularity: "euchre" (SP 55), "obs" (SP 52), "sms" (SP 52). These keywords have real search demand, but they don't crack the list in their genre. If you need popularity for these mid-tail terms, you need a &lt;a href="https://trysonar.app/blog/app-store-keyword-api-difficulty-and-popularity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=apple-ads-platform-api-guide" rel="noopener noreferrer"&gt;keyword-level tool&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2830p18wshst97vtwq6y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2830p18wshst97vtwq6y.png" alt="Coverage of Apple's search-term popularity dataset by keyword popularity band — 100% at SP 66+, dropping to under 1% below SP 46" width="799" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Apple's ranked lists cover the head of the market completely but miss most mid-tail keywords below popularity 55.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  79% Brand Queries
&lt;/h3&gt;

&lt;p&gt;79% of the ranked terms are brand/navigational queries (13,807 of 17,436 US terms Sonar classified) — people typing "youtube" or "duolingo", not generic keywords. The generic minority is where the ASO signal lives. This means the dataset is excellent for competitive intelligence on brand searches but limited for discovering new generic keyword opportunities.&lt;/p&gt;

&lt;p&gt;To put the generic/brand split in perspective: a keyword like "budget planner" (iOS difficulty 66, Apple-reported popularity 51) or "meditation" (iOS difficulty 79, popularity 54) represents the kind of generic term that does appear in the lists — but only because these terms are popular enough to crack the top 500 in their genres (source: Sonar /api/v1/keywords/search, queried 2026-08-16). Thousands of viable generic keywords with popularity in the 35–50 range do not.&lt;/p&gt;

&lt;h3&gt;
  
  
  Posting Lag
&lt;/h3&gt;

&lt;p&gt;New weeks post with a delay — roughly within the following week. If you're building an automated pipeline, treat a not-yet-posted week as pending, not an error. Sonar ingests this dataset daily and it powers the Trends → Top search terms view (genre picker, week-over-week rank change, 26-week popularity sparklines).&lt;/p&gt;

&lt;h2&gt;
  
  
  What ASO Practitioners Can Do With This Data
&lt;/h2&gt;

&lt;p&gt;The apple search ads reporting api and the popularity dataset serve different use cases. Here's what the Platform API is genuinely good for — and where you still need keyword-level tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where the API Excels
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Head-term monitoring.&lt;/strong&gt; Track the top 500 keywords per genre week over week. Spot when a competitor's brand climbs or a seasonal term surges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trend detection.&lt;/strong&gt; Weekly granularity with history back to October 2025 means you can see seasonality patterns: back-to-school surges (ParentSquare, Skyward, Schoology), fantasy football's August climb, game-launch spikes. Sonar surfaced all of these from the dataset before they showed up in other tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-genre popularity benchmarking.&lt;/strong&gt; The &lt;code&gt;searchPopularity1to100&lt;/code&gt; field gives a consistent scale across genres, so you can compare "budget planner" in Finance against "meal planner" in Food &amp;amp; Drink on equal footing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brand monitoring at scale.&lt;/strong&gt; With 79% of terms being brand queries, this is a weekly scoreboard of which apps dominate search in each category.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where You Still Need Keyword-Level Tools
&lt;/h3&gt;

&lt;p&gt;The API cannot answer "what is the popularity of my specific keyword?" unless that keyword happens to be in the top 500 for its genre. For the &lt;a href="https://trysonar.app/blog/aso-apis-compared-2026-pricing-and-data?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=apple-ads-platform-api-guide" rel="noopener noreferrer"&gt;ASO APIs compared across the market&lt;/a&gt;, keyword-level popularity, difficulty scores, and download estimates come from tools like Sonar that maintain their own keyword-level popularity data (Apple's own 5–100 scale).&lt;/p&gt;

&lt;p&gt;The positioning is straightforward: the apple ads api tells you the head of the market per genre. Keyword-level tools answer "what's the popularity of MY keyword" — a question the API's top-500 cutoff cannot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impression Share: The Other Insights Endpoint
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;POST /v1/insights/apps/impression-share/query&lt;/code&gt; returns daily (up to 30 days) or weekly (up to 4 weeks) impression-share data. It requires a &lt;code&gt;promotedObjectId&lt;/code&gt; filter, meaning it only returns data for apps your ad account actively promotes (source: &lt;a href="https://developer.apple.com/documentation/apple-ads-platform-api" rel="noopener noreferrer"&gt;Apple Ads Platform API documentation&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;This is advertiser tooling, not market research. You can see what share of impressions your promoted app captures for specific keywords, but you can't use it to research keywords you aren't already bidding on. If you're running &lt;a href="https://trysonar.app/blog/how-to-set-up-apple-search-ads?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=apple-ads-platform-api-guide" rel="noopener noreferrer"&gt;Apple Search Ads campaigns&lt;/a&gt;, it's useful for budget allocation. For keyword discovery, look elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migration Checklist: Moving From v4/v5 to the Apple Ads API
&lt;/h2&gt;

&lt;p&gt;The Campaign Management API v4/v5 at &lt;code&gt;api.searchads.apple.com&lt;/code&gt; sunsets January 26, 2027 (&lt;a href="https://9to5mac.com/2026/04/02/apple-details-plan-to-sunset-ads-campaign-management-api-in-2027/" rel="noopener noreferrer"&gt;source: 9to5Mac, April 2, 2026&lt;/a&gt;). Apple recommends migrating "as early as possible." Here is a practical checklist:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit your current API calls.&lt;/strong&gt; List every endpoint you hit on &lt;code&gt;api.searchads.apple.com&lt;/code&gt;. The Platform API's endpoint groups map closely: Campaigns, Ad Groups, Keywords, Ads, Reports all have direct equivalents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update the base URL.&lt;/strong&gt; Change from &lt;code&gt;api.searchads.apple.com/api/v4&lt;/code&gt; (or v5) to &lt;code&gt;api.ads.apple.com/v1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add the X-AP-Context header.&lt;/strong&gt; Every call needs &lt;code&gt;X-AP-Context: adAccountId={id}&lt;/code&gt;. Pull your account ID from &lt;code&gt;GET /v1/acls&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch to an official SDK if possible.&lt;/strong&gt; The &lt;code&gt;apple-ads-platform-api-python&lt;/code&gt; and &lt;code&gt;apple-ads-platform-api-node&lt;/code&gt; libraries handle auth, pagination, and the context header. If you're writing apple search ads api python scripts, these are the path of least resistance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update report field names.&lt;/strong&gt; Some report fields have changed names. Test your reporting queries against the new API and verify the response schema matches your parsers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add the Insights endpoints.&lt;/strong&gt; While migrating, integrate &lt;code&gt;search-term-popularity/query&lt;/code&gt; — it's net-new data you weren't getting before.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test rate limits.&lt;/strong&gt; The Platform API's rate limits differ from v4/v5. Insights endpoints run at roughly 5 requests per second (observed, not documented). Build in backoff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set a migration deadline with margin.&lt;/strong&gt; Don't wait until January. API sunsets have a way of causing production fires at the last minute.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is the Apple Ads Platform API free to use?
&lt;/h3&gt;

&lt;p&gt;Yes. The API itself has no usage fees — you need an Apple Search Ads account, but API access is included. You don't need active ad spend to call the Insights endpoints, though the impression-share endpoint only returns data for apps you're actively promoting (source: &lt;a href="https://developer.apple.com/documentation/apple-ads-platform-api" rel="noopener noreferrer"&gt;Apple Ads Platform API documentation&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I look up the search popularity of any keyword?
&lt;/h3&gt;

&lt;p&gt;No. The search-term popularity endpoint returns ranked lists — the top ~500 terms per genre, per country, per week. If your keyword doesn't rank in a genre's top 500, it won't appear. Coverage vs Sonar's 160k-keyword US corpus: 100% of keywords with popularity 66+ appear in Apple's lists, ~87% at 56–65, ~33% at 46–55, under 1% below 46. For arbitrary keyword lookups, you need a keyword-level ASO tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  What replaced the Apple Search Ads Campaign Management API?
&lt;/h3&gt;

&lt;p&gt;The Apple Ads Platform API at &lt;code&gt;api.ads.apple.com/v1&lt;/code&gt; is the direct replacement. It covers all Campaign Management API v4/v5 functionality plus new Insights, Apple Maps campaign management, and official client libraries for Python, Node, Java, and Swift. The old API sunsets January 26, 2027 (&lt;a href="https://9to5mac.com/2026/04/02/apple-details-plan-to-sunset-ads-campaign-management-api-in-2027/" rel="noopener noreferrer"&gt;source: 9to5Mac&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the API return real search volume numbers?
&lt;/h3&gt;

&lt;p&gt;No. Apple does not disclose raw search counts. The API returns a 1-to-100 Search Popularity index — a relative score where higher values mean more searches. The scale is exponential, not linear, so SP 60 represents substantially more search volume than SP 50. For a deeper explanation of how to interpret these scores and estimate impressions from them, see the &lt;a href="https://trysonar.app/blog/apple-search-popularity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=apple-ads-platform-api-guide" rel="noopener noreferrer"&gt;Apple Search Popularity score breakdown&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there an official Python or Node.js client library?
&lt;/h3&gt;

&lt;p&gt;Yes. Apple published four official client libraries on August 14, 2026: &lt;code&gt;apple-ads-platform-api-python&lt;/code&gt;, &lt;code&gt;apple-ads-platform-api-node&lt;/code&gt;, &lt;code&gt;apple-ads-platform-api-java&lt;/code&gt;, and &lt;code&gt;apple-ads-platform-api-swift&lt;/code&gt;. All are available on &lt;a href="https://github.com/apple" rel="noopener noreferrer"&gt;github.com/apple&lt;/a&gt;. They handle OAuth token management, the &lt;code&gt;X-AP-Context&lt;/code&gt; header, and pagination.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://trysonar.app/blog/apple-ads-platform-api-guide?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=apple-ads-platform-api-guide" rel="noopener noreferrer"&gt;trysonar.app&lt;/a&gt;. I build &lt;a href="https://trysonar.app/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=apple-ads-platform-api-guide" rel="noopener noreferrer"&gt;Sonar&lt;/a&gt;, the ASO tool for indie app developers.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>applesearchads</category>
      <category>api</category>
      <category>aso</category>
      <category>keywordresearch</category>
    </item>
  </channel>
</rss>
