zach waugh
  • Blog
  • Projects
  • About
zachwaugh

Meter Maid Sales & Stats

April 29, 2010 - 0 Comments - iphone meter maid

I created Meter Maid to scratch an itch. Living in the city, I’m often parking at meters and forgetting when it expires. I wanted an easy way to be reminded before the meter expired so I didn’t get a ticket. I had a need for the app, didn’t like the existing solutions, and really just wanted a challenge, so I decided to build it. I have a full-time job as a web developer, and never intended Meter Maid to pay the bills, but hoped it could generate a little extra cash. Actually, I hoped it would make a shitload, but I didn’t expect that. Meter Maid recently surpassed 5,000 sales, which has been a goal of mine since the beginning, so I thought it be a good time to share some of the sales, stats, and things I’ve learned, since I always find it interesting when other developers share this kind of info.

Meter Maid went live on September 18, 2009, was updated once, has had over 5,000 sales, netted around $3,600, and sent around 15,000 push notifications. Stupidly, I didn’t track all the time I’ve spent on the app (design/development/website), so I don’t really have an idea of my costs for creating the app. If I had to guess, I’d say that although I consider it a success, I’m probably in the red.

In the chart above, I’ve annotated various events in the timeline of the app. You can see being featured in the App Store made all the difference in my sales. In the two weeks I was featured, I had 3,500 sales, peaking at about 370 sales in a single day. Meter Maid is a bit of niche app. To be interested in it, you have to have a car, most likely live in a city where you park at meters often, and be at least a little bit forgetful. If you had an app with mass-market appeal like Doodle Jump, I would think you’d see thousands of sales/day when featured. I originally had priced the app at $0.99. After it had been out a while, and sales had tapered off, I decided to increase the price to $1.99. As you can see, it didn’t really make a difference. Sales were about the same. I didn’t experiment with higher prices to see when there was a point of diminishing return. I feel like $1.99 is a fair price for the app given it’s features, so I left it there. I’ve thought about giving the app away with ads, but charging $1.99 to enable push notifications and remove ads through in-app purchasing, and that’s something I still may do.

Visibility

A successful iPhone app is all about visibility. If Apple promotes your app, you’ll likely do well. The app store is terrible for searching and discovery of apps, so the vast majority of users just buy what is the most visible in the app store, or what they heard about from a friend. I haven’t heard of any apps succeeding with traditional advertising methods. Most successful apps succeed with Apple’s help or by word of mouth. If you’re featured in a commercial, any of the featured sections, or any of the top lists, you’ll get a lot of downloads. If you get a lot of downloads, you’ll move into the Top 100 lists, which will continue to give you visibility, which will help sustain sales.

The obvious question then is how do I get featured? I have no idea. I woke up one day and Meter Maid was featured in the “What’s Hot” section. Another day, I was watching TV and saw the Meter Maid icon on the commercial. I didn’t contact anyone at Apple and they didn’t contact me about featuring it (not that I’m complaining). Unfortunately, I don’t know how to get featured, but I know what helps. Make an app with a great user experience, is genuinely useful, and has a beautiful interface and icon. Apple is all about getting the little details right, and they want to feature apps the showoff the platform and make users want to buy the iPhone.

Piracy

An interesting thing to note. I send all my push notifications through Urban Airship1. Each iPhone has a unique id for push notifications called a device token. Each device needs to register with Apple’s servers to receive push notifications. As of today, I’ve had 5,038 sales, but 6,483 devices have registered with Urban Airship’s servers from Meter Maid. There are two explanations for this. One, multiple devices can share a single iTunes account. If a family with four iPhones shared an account, they could all install Meter Maid and only purchase it once. I’m sure this happens, and accounts for some of these, but I imagine it’s not that common. The other, more likely option, is most of those 1,400 registrations (about 20%) are from pirated copies. I did some searching and did find cracked versions of Meter Maid along with thousands of other apps across the web. Not really sure what to say about this. I guess it’s common with any software, but I didn’t expect it.

1 Great service, highly recommended if you need to support push notifications in your app

Programmatically retrieving IP Address of iPhone

March 14, 2009 - 0 Comments - cocoa iphone objective-c

For my app, QuickPic, I needed to show the user the IP address of their iPhone so they could type in the URL to the browser. The iPhone SDK provided no simple way to get the IP Address for the wifi connection. There are some undocumented methods that work ([NSHost addresses]), but I didn’t want to risk them pulling that out of there and my app breaking. So I wrote some C code (cobbled together from various sources) that will loop through the network interfaces and retrieve the IP address.

Here’s an Objective-C method to retrieve the IP address of the wifi connection as a NSString.

- (NSString *)getIPAddress { NSString *address = @"error"; struct ifaddrs *interfaces = NULL; struct ifaddrs *temp_addr = NULL; int success = 0; // retrieve the current interfaces - returns 0 on success success = getifaddrs(&interfaces); if (success == 0) { // Loop through linked list of interfaces temp_addr = interfaces; while(temp_addr != NULL) { if(temp_addr->ifa_addr->sa_family == AF_INET) { // Check if interface is en0 which is the wifi connection on the iPhone if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) { // Get NSString from C String address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; } } temp_addr = temp_addr->ifa_next; } } // Free memory freeifaddrs(interfaces); return address; }

Update (7/10/09): if this isn’t working for you you may need to include the following C headers in the top of your class implementation as well

#include <ifaddrs.h> #include <arpa/inet.h>

Note: this code will work with the Simulator as well though the interface may not be en0. The iPhone Simulator seems to just use the underlying active Mac OS X network interface. On my macbook pro using wifi, this is en1, but your mileage may vary.

This will also work in Mac OS X since the iPhone OS and Mac OS X both use a lot of the same unix underpinnings.

ELSEWHERE...

  • Twitter
  • Github
  • Delicious
  • Flickr
  • Blog RSS feed
  • Email

© 2010 Zach Waugh