Using AdWhirl To Achieve High Fill Rates

July 20, 2010

I’ve been running ads in Sleeps to Christmas since it launched in August 2008. During that time I’ve moved between a few suppliers of ads. Each time I did this it involved code changes but I’ve now settled on a solution called AdWhirl which allows you to manage this better. In this post I’ll be writing about why I’m using AdWhirl and how to integrate it in your application.

First, let’s define some of the terms I’ll be using:

  • Fill Rate is (number of ads received / number of ad requests sent ) * 100. So if you request 100 ads but only receive 90 then you have a 90% fill rate.
  • eCPM is “Effective Cost Per Mille (1000) Impressions” That’s (total earnings / impressions) * 1000 and is useful for comparing ad provider against ad provider. Earnings can either be an a CPM (cost per 1000 impressions) or CPC (cost per click) or a combination of both (as in iAds).

All else being equal you want to go with whichever network is providing the highest eCPM rate.

I mentioned earlier that I’ve moved between ad networks a few times. This was due to issues with low fill rates and low eCPM and also the quality of adverts from some suppliers (no BIKINI BABES plz k thx). (I previously put together a post explaining the numbers in excruciating details but I was alerted to the fact that most providers don’t let you provide details of earnings so that’s been mothballed for now).

Earlier this year I moved to Google AdSense for 100% of my requests as it provided a near 100% fill rate and high eCPM so I thought I’d solved this problem but iAds entering the fray has complicated things. iAds was (and really still is, until it rolls out worldwide and more than two adverts become available) a bit of an unknown in terms of options so I wanted the option to be able to dynamically reallocate the proportion of my requests going to iAds at will. If it was earning well, I’d send all my requests their way, if not then I’d send them to AdSense, if I requested an advert from iAd and it wasn’t available then I’d have something to fall back on. I started to roll my own solution for this but I was then alerted to AdWhirl.

AdWhirl is an open source Mediation layer for adverts. It’s owned by AdMob (thus Google) but both the server and client components are open source under the Apache 2.0 License so I’m fairly confident that they’re safe. I’ve encountered one other mediation layer in the past, Mobclix, but they function by collecting and distributing the ad requests on the server side and feeding them to you. This means that they collect all the money from the networks on your behalf, take their cut and then pay you (3+ months later usually).

AdWhirl makes the requests from your application, their server component is really just there for configuration purposes and they don’t take any cut of the revenue nor do they store any of your account details with the ad networks. Its sole purpose is to provide a mechanism for dynamically deciding in which order requests for adverts should be made. You do this by setting up a priority list in their web interface and allocated a percentage of requests. You can then set up a ‘backfill’ list which is used if the other suppliers are not available. This ensures that you should also have 100% fill rate. I cannot emphasise how important this is. Every time you fail to display an ad you’re leaving money on the table.

For the moment, I’ve configured AdWhirl to set iAds to 100% of requests and then fall back to AdSense if no iAds are available. iAds provide the highest eCPM in the industry at the moment, despite only having two adverts, so it makes sense to give them the most requests. They are having serious inventory problems at the moment though, providing only around a 10% fill rate and with only two adverts on the go click through rates are dropping as most people have seen the adverts already.

Integrating AdWhirl was a cinch, it took less than an afternoon, and allowed me to clean up a lot of my code. You simply add their framework, select which ad networks you wish to use by adding them to your build target, add the delegate methods for your supplier (all well documented in the headers) and then it’s just a couple of lines to request an advert and add it to your view

AdWhirlView *awView = [AdWhirlView requestAdWhirlViewWithDelegate:self];
[self.view addSubview:awView];

(Setting up the frame if you want to place it elsewhere on your screen, natch).

AdWhirl manages showing and hiding adverts so you don’t need to worry about Apple’s restrictions on not showing empty frames for iAds and so on.

AdWhirl currently supports AdMob, AdSense, iAds, JumpTap, MdotM, Millenial, Quattro and VideoEgg. You’re under no obligation to integrate them all but I’d recommend doing at least two or three. Advertisers like Millenial often do short term promotional campaigns for big companies that can be very lucrative if you’re willing to switch over all your requests for a short period of time.

You can find more information on AdWhirl at The integration instructions in their SDK are great.

2 Responses to “Using AdWhirl To Achieve High Fill Rates”

  1. Can you provide some detail on how you integrated iads and Adwhirl? i am trying to do the same and there isnt much info out there…

  2. Been looking for a quick summary on adwhirl and this entry answered all my questions. Thanks!

Leave a Reply