We’re getting ready to start contacting review sites about reviewing our newest game and I wanted to share some of our hard work with you the community. We put some spreadsheets together for iOS and Android review sites. The link below is shared through Google Docs and I have given you the ability to edit the doc. If you know of any sites not on the list please add them, so the community can benefit.

App Review Sites Spreadsheet

How do I market my app? Should I hire a marketing agency? I’ve bet you probably heard these questions or seen them posted online. If you’re an app developer you’ve probably even asked them yourself. We have published a few games now and have tried many different marketing techniques. We actually make it a point to try new marketing “experiments” with each new app. We’ve hired marketing agencies before and we’ve also done it ourselves. It is our conclusion that if you’re willing invest the time and effort—marketing your app yourself not only costs far less, but also produces more exposure.

Hiring an app marketing agency can be costly. On the low end you’re going to be spending $3,000 and the high end runs into tens of thousands of dollars. Most of them have different packages that include submitting to review sites, tweeting, managing your  Facebook page, putting out press releases, etc. To most independent developers an app marketing agency is not a luxury that can be afforded. Other developers, like us, even though we could afford an agency we choose not to because in our eyes increases the risk of developing the app. So what do I mean by that? The lower the cost to bring an app to market, the lower the risk to take of developing that app. If you spend $10,000 in real money or opportunity costs, your app has to make that money back before it is profitable. If you add a few thousand more dollars of marketing costs after the development costs you just added more to your total investment and risk.

Now let me be clear about one thing—you have to market your app. Marketing can have a huge impact on the success or failure of an app. It is not option, it has to be done. Before you point to apps like Tiny Wings and Bubble Ball let me point out that those are exceptions or flukes. For every Tiny Wings app, there are thousands and thousands of apps on the app store that no one has heard of. And they receive only a few downloads a year. You can’t just put out your app and wait on people to discover it, you’re going to need to invest in marketing. The good news is that investing in marketing your app doesn’t have to cost you a lot of money.

Before we talk about where to spend your time and money marketing your app, lets start with what doesn’t work. In our experience investing in ads doesn’t work. We have seen absolutely no up tick in our sales based on ads we have bought. It might work for larger developers that can afford to canvas review sites with their apps, but if you’re a little developer don’t waste your money. The only possible exception to this rule is what I’m going to call a payoff. There are some sites that offer a deal where if you purchase ad space they will review your app. That won’t guarantee you a good review, but it will get your app reviewed in more places and that has been worth it to us in the past.

So where should you invest your time and resources? First, we spend a lot of time making sure all our marketing materials are polished. This includes the app description, screenshots, trailer, and website. Writing should be brief and enticing, written for normal people and stripped of all marketing speak. A few sentences to a paragraph is plenty for the description. Include a bulleted list of the features. Screenshots and trailers go a long way to convince people to check out your app. The idea of a trailer may intimidate some people, but it can be as simple recording yourself using the app. If your app is a game this is especially true, people love to see game play footage.

Second, invest your time in trying to acquire app reviews. We believe that app review sites are the second place people go to find out about new apps. The first place is the app store. We have not control over the app store lists, but you can have impact on the review sites. Spend time compiling a list of all the top review sites. Here is a list of the top ten to get you started. There are many many more sites out there, put them in a spread sheet and include contact information/submission guidelines. Each site is different in how they want people to contact them for app submission/reviews, so make notes on the spreadsheet. Develop relationships with reviewers at these sites. Don’t overlook the lesser trafficked sites, many will jump at the chance to review a cool new app. Finally when it comes to reviews, don’t forget about youtube. Do a search on youtube for app reviews. You’ll be surprised how many individuals review apps—its not just companies. Make a list of those reviewers and contact them as well.

What do you say when contacting reviewers? When emailing reviewers it is important to    polite, brief, and provide them with enough information to entice them into making a decision to review your app. Here is an example of an email we sent out for Float.

Would you like to review our new game Float for iOS devices? Its current on the New and Noteworthy list and its starting to get some good attention. Let me know and I’ll send you a promo code. Thanks.

Description

Float is a game that makes you feel happy. Try to keep the balloons in the air and off the spikes. Tap, bobble, and bump your way to fun. With multiple games modes, achievements, and leader boards there is something for everyone.

4.5 out of 5 – Appsmile.com

4.5 out of 5 – CrazyMikesapps.com

4 out of 5 – Appspy.com

Trailer

http://www.youtube.com/watch?v=QxnH3aWf38

iTunes

http://itunes.apple.com/us/app/float/id409855273?mt=8

Features

  • Multiple Game Modes

  • Retina Graphics

  • Open Feint & Facebook Leaderboards

  • Over 40 Achievements

  • Post Your Scores to Facebook

  • Increase Your Fun with Game Mode Packs

 

Price

$0.99

More Info

www.floatgame.com

 

On some review sites there is another opportunity to market your app and that is in the fourms. One of the most vibrant hubs of app discussion is the toucharcade.com forum. Most of the app forums have dedicated channels where developers can announce their new app. Similar to the email example above, post important information about your app like pricing, screenshots, and trailer links. Encourage feedback in your post and don’t be afraid to give away promo codes. Don’t forget to subscribe to the post, that way you will be notified when someone posts a comment and you can keep the post activity going.

Third, get involved in social media. With over 600 million people on Facebook and 100 million registered users on Twitter these are clearly online hubs of communication. Since most people in your social circles are presumably interested in you and the things you are doing its low hanging fruit. But go the extra steps, especially in the case with Facebook. Not only setup a facebook page for your company or apps, but develop your apps with social integration in mind. In the case of our games, we give the player the opportunity to post their score to their facebook stream, compete against their friends in Facebook leaderboards, and like our company and the game. If people like the app and you give them the tools, they will market it for you.

Fourth, always develop a lite or free versions of the app. People want to try before they buy. Even if the price is only $0.99, there will always be a portion that people that just won’t purchase without trying it first. Like a digital drug dealer, give away a taste for free and then when people are hooked charge them for more. We have done both free and lite versions of games. Both work well it just depends on your strategy. We have made more money off the free version of Float that serves ads than the paid version in the Apple store. Our strategy going forward is to release the paid version with a lite version that drives them to the paid version. Depending on how well the paid version performs, we will then remove the lite version and put out a free version with ads. You can always put out a free version later, so hold off and see how well your paid version does.

Finally, consider doing giveaways. There are lots of ways to do this, as I mentioned above giving away promo codes through forums, review sites, twitter, etc is a great way to spread the word. Consider large giveaway programs and sites. Most of them require revenue sharing or a fee upfront, but they can get you a huge amount of exposure. One example is FreeAppADay.com. It has a large amount of followers and can be used as a calculated risk. We used them to promote Float Free. We paid them $3,500 to participate in their give away and it catapulted Float Free to the top of the free charts. This calculated risk paid off for us through $12,000 in ad revenue. Another great give away program is through Open Feint. If you use Open Feint in your app you can participate in their give away program. The terms for their program are revenue share or an upfront payment. If you don’t want to spend any money, you can always just change the price of your app to free in the store. Simply by making the app free will get your app on quite a few sites’ radars, which can lead to new reviews and increased exposure. All giveaways and free periods need to be thought out though. Making your app free will increase exposure and downloads, but your app’s ratings will suffer. People don’t value free so you will get a lot of people downloading your app just because it is free, not because they have any real interest in it. Bad comments and one star reviews are sure to follow, so be prepared going into it. One good strategy is to have an update ready to roll out after the free period to wash away the bad reviews and get your ratings back up. Calculate your risks and plan ahead to make the most out of giveaways.

Hopefully this has given you some ideas to try. Having little or no marketing budget doesn’t mean you can’t generate exposure for your app. We believe using these techniques that we can do a better job marketing our apps for far less risk, enabling us to continue to make games.

 

Preface: on Twitter, Peter Baily @peterbailey encouraged us to write about marketing and developing apps, so from Peter’s encouragement here is the first of a series of blog posts on those topics.

Recently I’ve been reading several business books and one book in particular has given me several nuggets of wisdom. Founders at Work is comprised of a series of interviews with founders during their startup years. In the first two chapters, Max Levchin (Paypal founder) and Sabeer Bhatia (Hotmail Founder) talk about how their businesses had built in virality. In the case of Hotmail, when someone sends you an email from Hotmail at the bottom of the email is a little advertisement letting you know that the email came from Hotmail and you can get a free account there too. From a business standpoint that is absolutely brilliant. Free advertising built into every single email sent. That little link was a huge contributing factor of why Hotmail went viral and it turned into the success it has become.

So here are some questions I’ve been wrestling with lately—How do we make our games more viral? How do we reward people for telling their friends about our game? How do we build a fan base/community around our games? If you’re a game developer I’m sure you have asked yourself the same questions. As I look around our social media landscape, its obvious that Facebook is the big player. And whether you like it or not—their “Like Button” has become a very powerful tool to spread the word about something cool or believe in. With that in mind, I’ve spent the last few days diving into the Facebook Api trying to understand all the ways we can use Facebook to encourage virality and setting up a system which we could use in all our games going forward.

Right now we have decided there are four actions we want to encourage users to take within our games. That is to say, we want to encourage four other actions in addition to the standard post your score to Open Feint and Facebook, which are standard fare. We want to encourage players to Like Crawl Space on Facebook, Like Our Game, Rate the Game, and Tell a Friend About the Game.

Lets jump into some code. In our main.lua file we define some variables. The code below shows our default variables being defined using the CrawlSpace Library.

Defaults{rateGame=false, likeUs=false, likeGame=false, tellFriend=false}

These variables come into use during our game through two classes. The first class is adBar.lua. The adBar class allows us to place an ad bar wherever we like on the screen. You can define if you want to show external ads like AdMob or “house” ads which in this case is what we want to do. If you understand how to make text or graphic with a listener then you understand the adBar class. I’m not going to go into all the code, but I will show you one of the listener functions in the class.


openLikeGame = function(event)
    if event.phase == "began" then
        local url = websiteUrl.."likegame.php"
        easyFB:showLikeBox(url)
    end
end

As you can see its a pretty standard listener function. We are listening for a touch phase. The if statement is looking specifically for the beginning of the touch phase, so the function isn’t called multiple times. After declaring our variable, url, we pass it into the work horse class “easyFB” where we call the showLikeBox function.

All Facebook interaction is handled in our easyFB.lua file. The easyFB class stands for “easy Facebook”. We took the Facebook example code included with the Corona SDk files and made a class that we reuse across our games—which I’m giving away today to all our lucky readers. Easy FB handles logging in and out, posting to wall, showing leaderboards, checking likes, and show like boxes. We will only touch on a few of these functions for this article, but feel free to post any questions you have or send me an email.

The first function, easyFB.login(), does what is says…it logs you into Facebook. You pass in your Facebook App Id and an optional callback function. The callback function will fire after you are logged into Facebook. The important part to highlight in this function is that we are requesting a few permissions from the user when they connect. They are giving us permission to see their likes and publish to their stream. We obviously don’t want to abuse these permissions, but they are needed to be able to post high scores to their wall and to check if they like our company and our game.


easyFB.login = function ( event, facebookAppId, cb )
    callback = cb
    facebook.login(facebookAppId, fbListener, {"user_likes", "publish_stream"} )
end

When logging into Facebook we attached a listener called “fbListener”. This function handles all the event login for the communication between facebook and the game. I apologize that the function is a little long and complex. The listener is the listener in the Facebook example code, bundle with corona, with a few additions.


fbListener = function( event )
    if ( "session" == event.type ) then
        -- event.phase is one of: "login", "loginFailed", "loginCancelled", "logout"
        if ( "login" == event.phase ) then
            setVar{"fbLoggedIn", true}
            facebook.request( "me/likes")
            if fbCommand == SHOW_DIALOG then
                facebook.showDialog( {action = "stream.publish"} )
            end
            if fbCommand == POST_PHOTO then
                facebook.request( "me/feed", "POST", attachment )
                Achieve("share")
            end
        elseif "logout" == event.phase then
            setVar{"fbLoggedIn", false}
        elseif "loginCancelled" == event.phase then
            callback = nil
            native.cancelWebPopup()
        end
        -- if there is a requested callback function, execute it
        if callback then callback() end
    elseif ( "request" == event.type ) then
        -- event.response is a JSON object from the FB server
        local response = event.response
        -- if request succeeds, create a scrolling list of friend names
        if ( not event.isError ) then
            response = json.decode( event.response )
            local data = response.data
            for i=1,#data do
                local name = data[i].name
                if name == company then
                    setVar{"likeUs", true}
                elseif name == game then
                    setVar{"likeGame", true}
                else
                end
            end
    elseif ( "dialog" == event.type ) then
    end
end
end

When someone successfully logs in to Facebook the login event.phase runs and we first set a variable to let the game know that the user is logged into Facebook then we request the users likes. Within this same listener, at the bottom half of the code, we see a check for “request”. This code receives the json data, decodes it then we loop through the users likes and check if they like our company or our game. We set respective variables to true accordingly.


elseif ( "request" == event.type ) then
        -- event.response is a JSON object from the FB server
        local response = event.response
        -- if request succeeds, create a scrolling list of friend names
        if ( not event.isError ) then
            response = json.decode( event.response )
            local data = response.data
            for i=1,#data do
                local name = data[i].name
                if name == company then
                    setVar{"likeUs", true}
                elseif name == game then
                    setVar{"likeGame", true}
                else
                end
            end

At this point we have determined if the player likes our company and if he/she likes our game. For illustration lets assume they have not liked either our game or company on Facebook. At this point we would provide the player with an enticing offer to like us, such as unlocking extra content if they like us on Facebook. The player clicks on the ad and it calls this function:


easyFB.showLikeBox = function(self, url)
    local urlPath = url
    local showLike = function()
        callback = nil
        native.cancelWebPopup()
        native.showWebPopup(centerX - 150, centerY - 200, 300, 400, urlPath, {urlRequest=webListener})
    end
    callback = showLike
    if retrieveVar("fbLoggedIn") == true then
        showLike()
    else
        facebook.login( facebookAppId, fbListener, {"user_likes", "publish_stream"}  )
    end
end

The showLikeBox accepts a url parameter, which is the url for the web page that we will popup. That web page contains a title, Facebook Like Button, and a close button. You can load all the code at the bottom of the post.

Anytime we call a web popup in the easyFb class we attach the same listener called “webListener”. This listener listens for three events, “corona:close”, “corona:likeUs”, and “corona:likeGame”. If a user clicks like in the popup, we have a javascript listener that will hide all content except for a thank you message a link to return to the game, which our webListener in the game listens for.


webListener = function( event )
    local shouldLoad = true
    local url = event.url
    if 1 == string.find( url, "corona:close" ) then
        -- Close the web popup
        if externalAds == true then
            adBar:openAds()
        end
        shouldLoad = false
    elseif 1 == string.find(url, "corona:likeUs") then
        setVar{"likeUs", true}
        shouldLoad = false
    elseif 1 == string.find(url, "corona:likeGame") then
        setVar{"likeGame", true}
        shouldLoad = false
    end
    return shouldLoad
end

We will be rolling out this system in all our games going forward starting with Globs and Bounce to Win both coming out in June. If you have any questions about the code let me know and I’ll be glad to assist.

Download Source Code

Socialize

Crawl Space

Stalk Stick

Games

Comics

Good Ol' Sites

Elevate Entertainment