So how much does an iPhone developer make?

Note: This story was written in December 2009, and has been updated a few times. The text of the updates is appended at the bottom.

A bit of history

I write software. I have been doing so for the past two thirds of my life, and half of that can be called ‘professional’: someone, somewhere, paid me money for my work. In some cases this was a company who employed me, in others, it was a paying end-customer. Over time, I have worked on products in quite a large price range. I am by no means an expert in the field of advanced software priceology (see the interesting article Camels and Rubber Duckies by Joel Spolsky), but I have recently made some interesting observations regarding software pricing for iPhone applications.

When I first entered the commercial software scene, I sold a paint application I wrote for the BeOS, called Becasso. Fond memories! One interesting thing (and a big eye-opener for the tiny bit of me which is interested in the commercial side of things) was that I first decided to sell it for $9.99 – a price I just made up. I was actually still a student, so what did I know. Be (the company) offered gentle advice to pick a higher price since I was giving off the signal that my application ‘wasn't worth much’. They convinced me it was, since I was the first one with a paint application for the platform. I didn't dare go too high so I reluctantly agreed to make it $29 instead.

I immediately started selling more copies. Note I'm not just saying I made more money, which is an obvious consequence. I was baffled – people are more inclined to buy something which is more expensive. Interesting indeed.

This was about ten years ago, and I haven't done much in the ‘consumer grade’ software sector since. In the little amount of spare time I have these days, I did write a set of programs to help automate some tedious task in a pharmacy. It wasn't much work (a few weeks' worth of spare evenings) but people are paying a four-digit sum of money for it because it solves a specific problem and it saves them much more money than it costs them.

In my current day job, one of the most recent software applications I have designed is a very specific, highly specialized measurement application. Our marketing department decided to stick a price tag on it which has five digits (and the first one isn't a ‘1’). I was expecting this to be rather steep, but it's selling quite well. Again, it is solving a specific problem and it is saving people much more money than it costs them.

iPhone programming

When I got an iPod Touch a while ago, I was amazed by the technical abilities of the thing. So much computing power in such a small package! I obviously wanted to learn how to program it. I had already picked up Objective-C and spent a bit of time dusting off my high-school physics and maths (colliding objects and perspective transformations), wrote a game, and decided to publish Sjoelen on the App Store.

Of course I had read the stories about indie developers ‘striking gold’ but I didn't really have high hopes. The game is only known in The Netherlands and a few neighboring countries (for people in the United States, it looks a bit like shuffleboard). Anyway, my goal was just to learn something new and not to quit my day job (which I love). I am selling the game for $0.99, which (after proper rounding) marks it as my entry in the ‘single digit price’ software sector. The game sells about 20 – 50 copies per week, almost exclusively in The Netherlands. Apple keeps 30%, but there's another catch: Apple will only pay out once the amount of money exceeds a certain limit (now $150, but used to be $250). What I didn't realize is that this limit is per App Store region, and there are seven of them:

  • United States
  • Canada
  • United Kingdom
  • Rest of Europe
  • Australia
  • Japan
  • Rest of World

Sjoelen has sold over 1000 times at the time of writing (over almost 10 months), but I've been paid out for the second time only recently (both times for the European store) and although it's nice to see that people all over the world are occasionally buying my game, I don't expect to ever cross the $250 limit in those regions and hence will never see any money for these copies. Still, it was fun to write, and I updated it a few times to add features (such as online highscores – it is quite humbling to see complete strangers routinely beating my own scores). It also paid for my iPhone developer subscription as well as my iPhone subscription. It only cost me time, and I learned a few things. I wrote some more iPhone apps which I didn't submit (a cool one lets me control an electron microscope from my iPhone!)

Zero-digit software

So far, I mentioned I designed and/or sold software in the single-digit, double-digit, quadruple-digit, and quintuple-digit price ranges. The only sector I don't have experience in is the triple-digit, ‘prosumer’ software segment. I recently added the zero-digit range, which turned out to be very interesting.

For my four-year old daughter, I wrote a little maze-solving game during a vacation in France. (How many professions can be performed in front of a tent under the starry evening sky with a glass of rosé in one hand..?) I spent a few evenings on it, most of which was spent building a maze generator (basically the reverse of chapter 9.4 of my own book :-) and some cool transition effects when you finish a maze. I wrote one because I couldn't find a simple maze solver on the App Store; only games where you had to guide a marble through a maze using the tilt sensor, which my daughter didn't seem to like very much. Some time after we got back from the holiday, I thought I'd share it on the App Store for other people with young kids. Not thinking many people would be interested, let alone pay even $0.99 for such a simple game, I decided to make Mazer a free game. I did add a button on the ‘flip side’ of the game which took the user to Sjoelen's App Store page, although I will say in advance that I did not notice any effect on Sjoelen sales after releasing Mazer.

But something interesting did happen.

I checked iTunes Connect the day after Mazer was approved for the store (for non-developers: this is the Apple site where developers can submit new applications and check their status, daily download statistics, etc.) To my amazement, it had been downloaded more often in less than a day, than Sjoelen had been in the nine months it had been available. At first I thought this was just an effect of people downloading every free app which appears on the App Store, but the next few days saw more than a thousand daily downloads as well. Clearly, some people were interested in maze games!

Of course, I started doubting whether making it free was such a good idea. I decided to do an experiment and raise the price to $0.99 for a week or two, and see what would happen.

What happened was this: During those two weeks, the number of downloads plummeted to less than a dozen in total. Lesson learned:

The difference between ‘free’ and ‘nearly free’ is about three orders of magnitude.
After that, I decided to make the app free again (apologies for the people who bought Mazer in the mean time...) and thought about how to ‘monetize’ the application instead, while downloads were immediately picking up to their previous levels of around a thousand a day. I decided to try making it ‘ad-supported’.

It turns out there are many different companies providing solutions for iPhone developers, and since I was completely new in the arena of ‘online advertizing’ I quickly lost the forest for the trees. I was bombarded with acronyms such as ‘eCPM’ and ‘CTR’. To spare other innocent developers the same baffling experience, I decided to write a bit about the industry here. Ironically, there is usually a lot of documentation available about how to integrate a certain company's SDK into your application, but being app developers, this stuff is usually rather clear to us. For me, it was the background of how this all works which was pretty difficult to find out.

The online advertizing space

Website owners can place ads on their site for their own stuff, just like the little add to the right of this paragraph. When you click it, you're taken to the Amazon page for the book I wrote. Of course, I could also add ads for books I didn't write myself. The reason for doing so (apart from promoting books I really like) would be that Amazon pays referral fees when someone buys the book after being directed to their page via an ad on my site.

In my case, this also happens to be a form of targeted advertizing, since the audience reading this page will quite likely have a high percentage of people interested in computer programming. On the other hand, if you're already a seasoned iPhone developer, you are probably not the intended audience for my introductionary computer programming book. (Of course, you should buy it anyway.)

As a site owner or free app developer, it is quite possible that you don't have anything to advertize for yourself. Instead, you'd say ‘this space for rent’ and let other people put their ads on your site or in your game. The problem then becomes finding advertizers, setting up a cost structure, keeping track of which ad was displayed how many times and was clicked how many times, etc.

Fortunately, there are ‘ad networks’ which act as intermediaries between advertizers and publishers (‘publisher’ can mean ‘web site owner’ or, in our case, ‘app developer’). The idea is that advertizers pay the networks, and the publisher deals with the network instead of with the advertizers directly. The publisher adds code to the web site or app which requests a new ad from the network, and the network tracks how many times a certain ad is viewed and/or clicked, charging the advertizer appropriately and passing (part of) the money on to the publisher. A well-known example of this is Google AdSense, an example of which is shown below. AdSense takes the content of the page into account when determining which ads are ‘relevant’, so it is quite likely that the ads will be iPhone or advertizing-related.

Sometimes, the publisher is paid a certain amount of money each time an ad is displayed. It can also be that the publisher gets paid every time a viewer actually clicks on the ad, or a combination of the two. This is where the acronyms ‘CPM’ and ‘CTR’ come in. The former stands for Cost Per Mille (in other words, cost per thousand views – don't ask me why they use the fancy ‘mille’ for this). Although it says ‘cost’ and therefore looks like it's directed at the advertizers, it's also used for publishers (a better name would be ‘earnings per thousand’). CTR stands for ‘click-through rate’ – this is a percentage, and indicates how often viewers of the ad actually clicked on it.

This CPM is not a fixed number. The advertizers themselves ‘bid’ for placement, and this can drive up the price depending on several factors. The time of year for instance – perhaps online flower delivery companies would like to ‘air’ more advertizements in the first two weeks of February because they get a big chunk of their revenue around Valentine's day. The holiday season is also a popular time for ads. Another reason can be targeting. If an ad network can make sure it is delivering ads to viewers in a certain demographic, advertizers may be willing to pay more. The way it works is that the code contains a ‘publisher ID’ so the network servers know which publisher to credit for displaying the ad.

To confuse things just a little bit, as an app developer you don't have to deal directly with the networks either. Instead, you can use an SDK by a company like Mobclix or AdWhirl to add a banner to your app. These companies keep track of which networks currently offer the highest CPM, and fill your ad space with the ads making the most money. These ‘intermediaries’ also make sure that when a certain network doesn't have an ad for you to display at a particular time, they switch to another. They even take care of signing up with the various networks for you. In effect, they are a sort of ‘meta-networks’.

I decided to go with Mobclix. It was quite straight-forward to incorporate their SDK in Mazer, so I signed up to a few networks via their site, made a new binary, and after testing, uploaded it to Apple for review.

The App Store approval process

A lot of electrons have been spent writing about the App Store review and approval process. My experience thus far had been rather smooth, so I just sat waiting for about two weeks, seeing thousands of downloads and entering the top-25 in the kids' games category in at least the Western European App Store. I didn't really worry about all these downloads, as I assumed they would all upgrade to the ad-supported version anyway.

But then came a surprise. Mazer 1.1 was rejected, ‘because of an Apple trademark image’. The user could select one of the standard wallpaper images as background for the game, but I didn't bundle these images with the app – I just presented what was already on the user's iPhone or iPod Touch. When I pointed this out to the reviewer, they told me: ‘your application is accessing and displaying the contents of the iPhone OS filesystem outside of your designated container area’, and ‘You will need to revise your application to read only within your directory container and resubmit your binary to iTunes Connect in order for your application to be reconsidered for the App Store.’

Note that version 1.0, which was already approved and was currently available for download on the App Store, had exactly the same functionality. However, I didn't want to incur more delay by continuing the discussion, so I quickly added some photos I personally took at a zoo trip sometime earlier, and resubmitted my app. Less than two weeks later, it was approved.

The problem was, though, that by that time Mazer was more than a month ‘old’ and the novelty was apparently starting to wear off. The daily download stats were leveling off, and even decreasing a bit. Even worse, I made a stupid mistake. The Mobclix SDK optionally finds out the users geographical location (via the CoreLocation framework on the iPhone) and can use that to deliver more targeted ads. I chose to enable that option. But that means that everytime a user wants to play the game, the familiar alert box pops up asking the user whether this app is allowed to access the current location. Of course, this generated quite a backlash among users. Because after all, why would a simple game need to know their current location? If the user disallowed, ‘generic’ ads would still be served, but users who downloaded Mazer because it was free anyway, just to check it out, might well have removed it immediately after this strange request popped up. Jokes aside (‘of course a maze solver needs to know where you are!’) I quickly decided this was a bad move. As the daily downloads decreased, I quickly resubmitted a new version with this CoreLocation feature disabled, but had to wait the customary two to three weeks before it was approved.

While I was waiting for the new version to be approved, I did see ad revenue starting to come in. Mobclix has an excellent ‘dashboard-style’ overview page after you sign in to your account there, which shows exactly how many ‘impressions’ (served ads) there have been in a given day, what the average CTR was, the CPM, and the revenue. Even though downloads were slowing down, apparently Mazer had some ‘recurring players’ because the daily number of impressions did not show a decline at all. Also, I found out that Mobclix gathers statistics on things like the type of device, the number of sessions, the OS version, etc. I found some interesting information there. Take a look at the pie chart, and notice that some 15% of users is on 2.2.1, even though version 3.0 was released more than half a year before, and 3.1.2 was current at the time I released the game. Interesting information for us developers, since it means you should not ditch compatibility with 2.2.1 if you don't have to. It is important to note that obviously, only online devices are counted here, so the real number of iPod Touches with 2.2.1 on them will probably be much higher.

As has also been pointed out many times, as soon as your app drops ‘off the radar’ (in other words, when it gets driven off the top-25 lists), there is a very sharp decline in daily downloads. By the time the new, less-intrusive version was approved, the harm was already done, and I did not see the number of downloads pick up much. It is currently at between 500 and 600 downloads per week (total number of downloads at the time of writing is slightly over 25000). In the first month of being ad-supported, Mazer generated just over $200 in ad revenue (update: it later turned out that this had to be adjusted downwards by about 15% since one of the ad networks (Jumptap) had reported gross revenue instead of net). Keep in mind that the experiment with selling Mazer for the lowest possible price on the App Store would have earned me, extrapolated from my two-week experiment, less than 10% of that amount.

Closing thoughts

Given the amount of effort that went into creating Mazer, I still think $200/month is not too bad. If you write ten of such simple games, that would amount to a sizable chunk of income, generated even while you sleep. The model of ad-supported free apps seems to have a better chance of making money than trying to sell apps directly. Especially if you have the type of app that people either use often (because it's addictive or because it's some kind of handy reference tool) or use for long stretches of time, you can get lots of ‘impressions’.

On the other hand, if everyone starts doing this, the App Store will be diluted even more with free apps. I'm also not sure what Apples response to this will be. After all, they don't make any money off this. For money you make via advertizing, they don't get their 30% cut. Of course, it is being said that Apple doesn't really see the App Store as a profit-making venue, and they are happy with it because it is an incentive for people to buy more iPhones.

December 7, 2009

Update 9 Jan 2010: Apple has recently acquired Quattro Wireless – perhaps they do want part of the ad revenue. Also, I noticed in the beginning of 2010 that there is a rather large ‘seasonal effect’ in ad revenue. My ‘fill rate’ (the number of ads displayed divided by the number of ads requested from the network) dropped significantly, meaning a lot of time my app simply didn't display any ads. The revenue went down correspondingly. This is because of the end of the holiday season, and a lot of advertizers scaled down their ad spending.

Mobclix allows you to add ‘custom ads’ so I decided to make a little banner ad for my paid game Sjoelen, and give that the lowest priority. If no other ads were available, my Sjoelen ad would be displayed. My daily sales of Sjoelen went up by a factor of 10 when I did that for a few days, but still only in The Netherlands. Americans simply don't seem to be interested in a ‘traditional Dutch game’...

Another interesting thought is that some others are making much more money than I am. On the iPhone Dev SDK forum there is a thread by the author of Fake-A-Call, who claims to hade made $250/day after switching to an ad-supported business model. Those are encouraging numbers. But keep in mind that the majority of apps are not making significant money.

Update 25 Feb 2010: Sjoelen has been on the App Store for a year now. A month or so ago, I decided to partake in an ‘AppEvent’ which featured one free app a day for the first three weeks of January, each from a Dutch or Belgian developer. During the free day, Sjoelen was downloaded 14633 times (ten times as much as the paid version in almost a year before that...) but the nice thing is, this increased awareness of the game considerably. In fact, the 6 weeks since the free day were good for more than 30% of the total sales. I can't say this is because of the custom ad I mentioned above, or because of the event. In any case, I hadn't changed the game for months – it was just the extra exposure. This propelled me into the top-5 position in the ‘kids’ game category (fluctuating between 2 and 5) and as every iPhone developer knows by now, nothing beats being in a top-N listing in a category on the App Store.

In the mean time, the ad revenue has declined to a steady $65 or so per month. Nothing to write home about, especially after getting nearly $200 in the first month.

Update 30 Mar 2010: I will restate the above: nothing beats being in a top-N listing in a category on the App Store. Sjoelen has been in the top-10 in the Dutch App Store, and the past two weeks have seen weekly sales in the same order of magnitude as total sales in the first half year!

Update 16 Dec 2010: I have been consistently in the top-10 for the Kids section in the Dutch App Store. Sales have been around 125/week for ages now. I recently became ‘featured’ in several App Stores, but contrary to most reports, I can't say I've noticed much change in sales. One thing to look out for is releasing new versions. iOS 4 had a serious performance regression in a certain drawing API I used to draw the pucks on screen, which basically rendered the game unusable (even on the faster hardware of iPhone 4). It took a while to figure out what was happening, and I needed to rewrite parts of the rendering engine for it.

The drawback of releasing a new version is that when there haven't been enough reviews for this new version, iTunes will show the reviews from all versions, including the ones where you screwed up and introduced a bug, or the ones gathered during the period when the game was offered for free, getting downloaded by people who didn't like the concept of the game in the first place, and giving it bad reviews. Ergo, there will be a drop in my rating immediately after releasing a new version, and I have to count on having enough momentum to overcome this.

Update 7 Jan 2011: I have no idea what's going on. Around the Christmas holidays sales were picking up, but my ranking wasn't (which is an obvious result of general increase in iOS app sales across the board). However, something strange happened in the first few days of this year. Daily sales were suddenly the same as normally for a whole week, and I'm now even seeing 600-700 sales each day for the past few days. My current rating in the Dutch app store is #1 in the Kids and Family categories, #2 for all Games, and #3 overall (!) The vast majority (>95%) are from the Dutch app store.

Again, I don't know what's going on (as far as I know, I haven't been mentioned on a big website or anything like that, and I don't think anything changed in my ‘featured’ status). I'm buzzed though!

Update 31 Jan 2011: A cautionary tale. A week or so ago, the biggest peak in my sales was over. Sales seemed to settle to somewhat below 100 a day, which was still pretty nice. During the peak, I sold more than 4000 copies, basically in two weeks time – a very nice way to start the year! I recently received a reminder that my iOS developer agreement was up for renewal, so I (obviously) renewed it – a single good day's worth of sales would pay for it. But just before last weekend, something strange happened. Sales plummeted to 12 – back to the ‘old’ levels. Disappointing, but not yet alarming. Until the next day, when I got zero sales. This has never happened since launch day. What was going on?

I checked iTunes Connect and Sjoelen was listed as ‘Ready for sale’, and also in the App Store my listing seemed OK. So why was nobody buying it?

A friend then pointed out to me that he had tried to purchase Sjoelen, and he got a message saying ‘This app is currently not available’. When trying to buy my own app myself, I got the same message. That was a hint that something was indeed wrong. In the mean time, though, my position in the charts had plummeted to #27 in the Kids section, where I was firmly on #1 just a few days ago.

I already filled in the contact form on Apple's developer site, since there was no way to contact them by phone over the weekend. This morning, I decided to check iTunes Connect again, thinking that perhaps something had gone wrong with my developer renewal (the due date was January 24th, but I already got an acknowledgement of my renewal on the 17th). I noticed something strange: My ‘iOS Paid Applications’ contract was not listed in the ‘Contracts in Effect’ section. Apparently, it was awaiting confirmation of te ‘contact persons’. So I quickly filled these in and hit Submit. I tried buying my own application from my iPhone and got the message that I already have this application – hopefully, everything works again now.

The bad thing is that I had not received any notification from Apple saying I had to take a look at my contracts (I specifically went through my inbox to check for this). I now face the difficult task of trying to climb back up in the charts. I will try to see this as an opportunity to conduct an experiment again: Will I ever find myself back in the top-10, and how hard will it be to secure my position again. The start of my experiment has me at #78 in the Kids category, #90 in the Family category, and #726 in Games. My rating in the Dutch app store is below that of Belgium and Kenya right now :-)

I will keep you posted...

Update 18 Apr 2011: It wasn't too bad actually. Within a few days, my app was back in the top 10. It has kept a steady position around #5 for a long time, although sales did seem to follow a slow exponential decay. Apparently, my app was being found even though it wasn't in the charts – to me that signals that people were either actively searching the App Store for a ‘sjoelen’ app, or I was seeing the effect of mouth-to-mouth advertizing by my existing users (in which case, a big thanks to all of you :-)

What I found interesting is that although sales could vary by a factor of two, the position in the rankings is relatively stable. This could mean that either the absolute number of app sales varies by the same amount, spread equally over all apps (which makes sense in case there is increased ‘buzz’, for instance, right after an Apple Keynote or after the introduction of new iPod/iPhone/iPad models), or that there is significant distance in number of sales between the various ranks in the top-10. Of course, it could be an effect of both combined.

This weekend, the iPad version of Sjoelen was admitted into the app store. I am curious as to how this will affect sales. I think the iPad is not so much a ‘casual games’ platform, and a colleague who has written a productivity app recently got quite good sales numbers in his first week. Of course, people tend to pay more for a productivity app and buy them for entirely different reasons, so I think you can't compare those with games.

Unfortunately, the iPad App Store doesn't seem to let people browse specific categories, so I'm wondering whether Sjoelen will somehow stand out between the tens of thousands of other apps...