Thanks!

7 pitfalls to watch out for when measuring your in-app purchases

By Dubi Furie
7 pitfalls to watch out for when measuring your in-app purchases - OG image

Did you know that roughly 45% of in-app purchase (IAP) revenue is measured inaccurately? That’s right —  it may seem hard to believe, but it’s what our numbers indicate. The reason is simple: the data isn’t properly validated and stripped of extras — taxes, commissions, duplicates, and more.

This is alarming because IAP accuracy is obviously critical — it’s money your business is making. Not to mention it’s extensively used by almost every type of app and is experiencing considerable growth. In fact, 2023 saw IAP revenue surge 19% and 11% in non-gaming and gaming apps, respectively.

YoY% change in revenue from IAP (non-gaming apps)

Beyond accuracy, the pace of change in the mobile app space means that monetization becomes an even greater challenge. Privacy regulations, economic uncertainty, fierce competition, and new marketing channels, to name a few, have a significant impact on user acquisition (UA) and monetization strategies.

Constant changes in the business environment can impact your measurement and UA efforts. For example, during an economic slowdown, you need to test different pricing strategies with discounts to maximize revenue. As a result, measurement becomes more difficult. This holds true for every monetization model, but it’s mostly relevant for IAP.

In this blog post, we’ll demystify the challenges of measuring IAP, learn why it’s crucial to get it right, and explore what’s holding it back. We’ll also offer several alternative solutions. Are you ready? Let’s dive in.

Why is accurate IAP data so important?

Measuring your return on ad spend (ROAS) is perhaps the most important KPI for growth marketers. 

To measure ROAS, you need two parameters: ad spend and revenue. Needless to say, accuracy is paramount when you’re looking at your #1 KPI. Knowing your ROAS can drive more revenue by ensuring you’re spending your budget on profitable channels and campaigns. 

In fact, if the data is off by only a few percentage points, your entire campaign can derail and become non-profitable.

Now, you might take IAP revenue figures for granted. But you definitely shouldn’t. Typically, UA teams don’t manage the catalog of items consumers can purchase in the app, their pricing, discounts, and so on. That would be the role of the product team, the monetization team, or someone else. So the UA team is just presented with the revenue figures and if they’re not accurate, the entire campaign is at risk. 

That’s why you can’t assume that the data is accurate, and it’s crucial to dig deeper to understand its pitfalls.

Also, as a growth manager, when you examine IAP revenue data that’s beyond your direct responsibility, you can improve collaboration with other teams and coordinate changes affecting ROAS. This is critical when you want to accurately measure the success of your campaigns, identify new opportunities, and unhide new user profiles for targeting.

Pitfalls that risk the accuracy of IAP data

Now that we understand the importance of accuracy when we measure IAP revenue, let’s break down the potential pitfalls in measurement. According to our research, solving the following problems can increase your IAP revenue accuracy by 5 to 35%!  

1) Fraudulent transactions

Fraudulent traffic has plagued the mobile app industry for years. Where there’s money, there are bad actors looking for a piece of the pie. In this multi-billion dollar game of cat and mouse, fraudsters will always be on the lookout for new ways to fool the system. 

To combat this, you should validate every receipt against Google Play or the App Store, and only then report on its revenue. If your team isn’t validating your receipts, you’re risking reporting fraudulent transactions and their revenue, which can badly damage the accuracy of your ROAS.

2) Data duplications

Did you know that duplicated data can reduce the accuracy of your IAP figures by as much as 10%?  

There can be multiple reasons for duplicates in reporting data. For example, connectivity issues between the app client and server sides can lead to duplicates. In this scenario, the app reports the same event more than once, resulting in duplicated revenue.

A different example that’s specific to iOS occurs when a user shares a purchased item with one of their family members (aka “Family Sharing”). The App Store might then report this revenue multiple times. To prevent that from happening, you need to understand the transaction’s context and ensure you’re removing the duplication.

3) Refunds

Where a user asks for a refund, the associated revenue needs to be deducted. That might sound simple, but it’s actually quite complex. You’ll need to locate the original receipt and match it with the refund transaction, to make sure the revenue is deducted from the right campaign that delivered the user.

Failure to deal with refunds can reduce your data accuracy by 5 to 10%.   

4) Pending transactions

Android users in some countries can make a purchase inside the app but pay for it outside of the app (using cash or other non-digital measures). 

As a result, app developers can end up recording 50% of pending transactions that won’t necessarily convert into revenue. In these cases, the store may report these transactions but revenue won’t be recorded until the actual payment is made. If the payment is not completed until its due date, the transaction is canceled and no revenue is collected or reported. 

Being able to see pending transactions that aren’t getting converted into revenue is critical for optimizing your payment funnel.

5) Mapping and attributing transactions

Your app is the entity that reports the purchases, as it’s the digital cashier. That means you’ll have to work with the product team to map out the events you’d like to measure when they implement your mobile measurement partner (MMP)’s SDK.

As mentioned above, the product team is typically responsible for IAP data. However, product and marketing teams probably don’t share the same goals. This means it’s up to the marketing team to request this mapping and make sure IAP data is reported correctly: attributed to the right media source and processed in a consumable way. This includes currency, timezone, and other parameters.

IAP transactions can also have multiple states. When follow-up purchases are made, you must connect them to the original transaction. Otherwise, you risk completely misinterpreting the data — for example, you might think a campaign is performing well, but in reality its metrics are based on acquired users who asked for a refund.

6) Net revenue

Net revenue can completely change your perspective on profitable campaigns.

When the stores report revenue, their figures show gross revenue which includes store commissions and taxes. You may think that commissions are always 30%, but that isn’t the case. In the SMB program, when the revenue is up to $1M, the commission is cut by half to only 15%. Commission is also 15% for subscription apps, when users subscribe for more than 12 months. And if that is not enough, Apple’s recent response to the Digital Marketing Act (DMA) in Europe has made it more complex.

Sales taxes are also complex. Each country has different regulations, and sales tax may or may not be included. 

The impact can be significant, as you can see in the following example: 

Net revenue impact

7) Privacy regulations

Privacy-driven data restrictions have significantly changed growth strategies on iOS, primarily due to the introduction of SKAN, which has many limitations. For example, the conversion value is limited to 6 bits, and therefore doesn’t support accurate IAP measurement. 

In order to deal with SKAN’s limited post-install data, you need to set up revenue buckets where a purchase will likely fall (for example, $0-10, $10-20, and so on). These buckets are determined based on what you’re selling in your app and statistical payment distribution data. Firstly, the fact that you’re looking at buckets means you don’t know the actual revenue generated. Secondly, if you create these ranges based on inaccurate revenue data in the first place, your SKAN revenue measurement also suffers.

Take note that Google is also planning to offer a similar mechanism limiting post-install data in the Privacy Sandbox — and make sure you’re ready.

Solving these pitfalls with stores integration

To solve these problems, you need to implement API and SDK integrations with the stores: Apple App Store, Google Play, or others. 

This is complex because:

  1. Every store and API has its own rules.
  2. Non-standardized data schemes make it hard to compare performance across platforms — for example, answering questions like “Which discount worked better on which platform?”
  3. Technical errors, loss of signal, and re-tries present the risk of incomplete and duplicated data.
  4. When you implement integration with the stores, it’s not a one-time effort. These APIs frequently change, and keeping up can be a drain on your resources. This elevates the risk of inaccurate measurement as Apple and Google roll out new features. The higher the number of apps in your portfolio, the higher the cost to maintain it.
App store changes over time

Focus on what matters — your campaigns

Aggregating and cleaning data shouldn’t be a time-consuming, resource-heavy affair. Instead, your focus should be on how to acquire the right users, monetize them effectively, optimize their experience, and retain them. 

In addition, integrating with the stores for IAP reporting is a must but, as discussed above, introduces moderate to significant risk to your business. 

Allowing your MMP to take on this weight makes much more sense. They can help you with:

  1. Fraud prevention: Your MMP already has access to your app through the SDK. They can use that access to validate each transaction against fraud and ensure real purchases are getting reported.
  2. Attribution: Revenue attribution is “out of the box”, including follow-up transactions.
  3. Higher data accuracy: Reliable, high-quality data that removes duplicates and errors is an integral part of an MMP’s service.
  4. Standardization of platform data: An MMP standardizes the data reporting across Android and iOS, so you can slice and dice the data however you want.
  5. Transactional semantics: Your MMP can derive the transaction context and take care of convoluted logic like pending transactions, refunds, family sharing, and more.
  6. Store API changes: There’s no need to concern yourself with every update in the stores, big or small, that impacts your performance metrics. Your MMP can manage all this for you.
  7. Handling failures: An MMP will have support and R&D teams on hand, with powerful monitoring mechanisms in place to ensure nothing gets broken in real time.

The bottom line

IAP accuracy is an absolute must for UA teams looking to optimize campaigns for higher ROAS. 

But measuring IAP is complex, primarily because of:

  • multiple layers of business logic 
  • many pitfalls along the way that create errors, duplications, and incomplete data
  • highly technical stores integrations

You can solve this yourself, if you have the resources and expertise. Or you can rely on your MMP and just “plug and play.”
Ready to prove your true ROI? AppsFlyer’s ROI360 provides comprehensive revenue and cost data you can trust. Read more.

Dubi Furie

With over 10 years of extensive experience in SaaS products, Dubi’s skills combine innovation, business, and technological expertise. Dubi is the Director of Product for ROI360, AppsFlyer's ROI measurement solution
Background
array(4) {
  ["title"]=>
  string(35) "Ready to start making good choices?"
  ["buttons"]=>
  array(2) {
    ["button1"]=>
    array(7) {
      ["enabled"]=>
      bool(true)
      ["text"]=>
      string(13) "Contact sales"
      ["url"]=>
      string(37) "https://www.appsflyer.com/start/demo/"
      ["style"]=>
      string(34) "btn btn-primary btn-primary--white"
      ["size"]=>
      string(6) "btn-lg"
      ["target"]=>
      string(5) "_self"
      ["id"]=>
      string(0) ""
    }
    ["button2"]=>
    array(7) {
      ["enabled"]=>
      bool(true)
      ["text"]=>
      string(12) "Sign up free"
      ["url"]=>
      string(32) "https://www.appsflyer.com/start/"
      ["style"]=>
      string(39) "btn btn-text btn-arrow btn-arrow--white"
      ["size"]=>
      string(3) "btn"
      ["target"]=>
      string(5) "_self"
      ["id"]=>
      string(0) ""
    }
  }
  ["image"]=>
  bool(false)
  ["section_settings"]=>
  array(1) {
    ["hide"]=>
    bool(false)
  }
}
Ready to start making good choices?