The Hidden Costs of Building Your Own Ad Server
Successful API microservices like Twilio and Stripe rely on the idea that while engineers love building their own solutions, some problems - such as communications and payment processing - have too much complexity to build in-house. Indeed, why spend months/years building a communication infrastructure when you can hook into Twilio’s APIs in hours.
This perceived value of API microservices hasn’t migrated to ad serving tech, though, and the most common pushback we hear from companies (as we are an API microservice for ad serving tools) is that they don't see any reason why they can't just build it in-house from scratch.
It’s unclear why many companies think ad servers are simple to build.
If you look at the top ad platforms - like those offered by Google, Facebook, Pinterest, Amazon, etc - they have entire departments dedicated to their ad products (and have for years/decades). And, yet, companies not in ad tech often believe it’s possible to build an ad platform in just a couple months using their current engineering team.
Maybe it’s because placing ads on a site/app seems, well, easy. Just design a basic interface for uploading a 300x250 banner, include some Boolean logic on when to display it, and there you go. Of course, as we’ll touch upon below, such a barebones ad server would be unsellable and see little adoption.
Or, maybe it’s because ads, when they aren’t the sole source of revenue, are viewed negatively, and employees are fine repeatedly punting the project under the guise of, “We’ll get to it when we have the engineering resources” (which ultimately leads to it never getting done). This may partly be why 95% of the Top 500 e-Commerce sites don’t use sponsored listings, even though they are wildly successful for the largest brands (Amazon, Walmart, Etsy, etc all have high-value sponsored listing ad products).
This is unfortunate, as integrating user-friendly native ads and/or sponsored listings can drive new revenue without impacting the customer experience. For instance, one Adzerk client - a niche marketplace - saw a 10% increase in total revenue after spending just six weeks to integrate sponsored listings into its search results, and another client immediately drove $300K/month upon the release of its ad platform. There are few other silver bullets that can move the revenue needle like a new, innovative ad product.
It may also be that there are just few educational resources on the subject. To that end, we wanted to highlight exactly what building an ad server from scratch means.
Ad server features you will need to build
We’ll admit that if your ideal ad server involves banners that rotate evenly, with minimal targeting and manual campaign creation/reporting, then you can build your own without much work.
That said, this is like designing a car that gets someone from point A to B but lacks windows, AC, side mirrors, etc. In other words, you aren’t creating anything that’ll sell.
Ultimately, ad products are only successful if advertisers are willing to pay for them, meaning you’re now competing with Facebook, Google, and others for a limited ad budget (and new budget won’t just appear because you release an ad platform).
As you look to sell your inventory, advertisers will ask questions like:
“Can you target by gender? Facebook can.”
“Do you do 2nd-price auctions? Google does.”
“Can I bid by CPC through a self-serve portal? And layer in frequency capping? I can do that with Amazon.”
Building an ad server doesn’t mean the advertisers will come. A subpar ad product may drive some revenue, but it’ll have trouble retaining advertisers, and, at worst, it could make the brand as a whole appear behind-the-curve.
It’s important, therefore, to design an ad server with all the functionality needed to make it successful. Below looks at the features that most of the major ad platforms already offer (and against whom you're competing for ad budget).
|Zone/placement targeting||Location on page; spot in search results||You’ll want to have different ads in various locations - in order to optimize CTRs, drive more money, and make your platform look versatile to advertisers|
|Contextual targeting||Shoes sub-category||Enable in-market targeting by letting, say, Nike show ads to a user only when they are browsing your shoe subcategory page|
|Frequency capping||Show same ad only once to a user per day||A common request from advertisers, this also provides a better user experience|
|Keyword targeting||Ad appears in the search results for ‘red hat’||Search targeting is extremely valuable to buyers - hence why Google is the #1 ad tech player|
|Day & hour parting||Show ads just on Saturdays, 9am-5pm||Buying patterns change on evenings and weekends, and smart advertisers bid differently during those times|
|Country targeting||USA||Non-starter if don’t have|
|City/DMA targeting||Durham, NC only||Country targeting may cover most use cases, but even tighter targeting can lead to higher eCPMs|
|Radius targeting||30 miles around Durham, NC only||City/DMA targeting isn't perfect because it targets just people in that area, so offering radius targeting can be a real differentiator|
|Language targeting||English||Enables advertisers to target just users who speak English (creating better user experience)|
|Demographic targeting||Gender, age||Advertisers know their target markets and will pay extra to show ads just to these users|
|Behavioral/Interest targeting||Shoe lovers (visitors who have searched for shoes in past)||Even if you don't have demo data, you can still offer user-level targeting by creating interest or behavior categories that advertiers can target, based on users' actions or information they've given you|
|Retargeting||Show an ad to someone who's visited the advertiser's site||Retargeting is lucrative, and you can offer this dynamically through a pixel or manually via a way to upload IDs to target|
|User agent targeting||iPhone X||Advertisers usually break their campaigns down by platform (desktop, mobile, tablet), as well as by device and even OS version|
Ad Delivery/Decision Engine Features
|Bidding by CPM||Cost Per Mille (1K impressions)||The standard way a beginning ad server charges, but it isn’t the way that performance advertisers prefer buying|
|Bidding by other metrics||Cost Per Click, Cost per Conversion||This takes risk off the advertisers, who can bid by deeper actions|
|Ad pacing by time frame (pacing spend evenly over period of time)||Campaign with a 30MM impression goal over 30 days that wants to average 1MM/day||Ad pacing is complicated - if there’s a spike in a given hour, does the system correct itself and slow down ads? Or, if volume slows down, does it try to be more aggressive? If your system can’t balance requests in real-time, you run the risk of advertisers being unhappy about uneven display (or worse, ending without hitting their campaign goals)|
|Ad pacing by multiple metrics||Pace by clicks, not impressions||Not all customers want to pace by the same metric, so the ad balancer needs to incorporate multiple options|
|Ad capping||Pause a campaign after $500/day is spent||In addition to pacing goals, advertisers will want to set daily and lifetime caps. The ad server must be able to slow down and stop at the required metric|
|Goal optimizations||The advertiser bids via CPC but wants the system to optimize for a $20 cost per conversion||A more advanced functionality, this helps advertisers hit downstream goals|
|Priority waterfalls||Premium sponsorships → standard ads → in-house banners||This helps you sell higher value inventory and manage multiple advertiser buckets. For instance, you could sell full-site takeovers to key advertisers, but if none of these campaigns are active, you “waterfall” down to the next cohort of bidders|
|Lottery display rules||10 ads would each have a 10% chance of being chosen||Which ad wins is a vital aspect of ad serving, especially with 1000s of ads to choose from. Lottery is the simplest: all ads have equal chance to show|
|eCPM auctions||The ad that will deliver the most revenue wins||Lottery rules, however, don’t maximize revenue. Auctions that account for which ad will deliver the most revenue (a combo of bid and interaction rates) will increase your top-line|
|2nd-price auction||Auction where winning ad pays $0.01 more than what the 2nd bidder was bidding||Advertisers love 2nd-price auctions because they help minimize risk of high bids, and it’s what Google and others employ|
|Relevancy score||Ads with a higher relevancy score are more likely to be shown||This feature drives better user experiences by limiting ads that have low click-through-rates|
|Macros||Dynamically inserting a user's location into the ad||Using macros to dynamically insert content into the ad itself (such as the user's location, user agent, page metadata, etc) is valuable in making the ad as tailored as possible|
|Companion ads||Two ads on the same page come from the same advertiser||Advertisers love full-page takeovers, where every ad spot belongs to them. Building this so it includes eCPM optimization and targeting is much more complex than one would think|
|Show no duplicates||All ads on a page are different||The opposite of companion ads, this ensures that users aren't bombarded by the same ads, or ads from the same advertiser, at once|
|Brand exclusions||Nike and Adidas never appear next to each other||This feature pleases advertisers who want to make sure their ads never appear next to a competitor's|
|Pixel tracking||Impressions||Advertisers won't run without it|
|Click tracking||Clicks||Advertisers won't run without it|
|Revenue tracking||How much the advertiser is spending||You'll need to be able to calculate how the advertiser is bidding (CPM, CPC, etc) and at what amount, and then track and report on this||Conversion tracking||Purchases||An important addition for advertisers to measure downstream performance|
|Custom event tracking||Likes, saves||A valuable addition that lets advertisers track unique ways their ad is being interacted with|
|Enabling 3rd-party tags||MOAT tags||Required - advertisers won’t run unless they can track using independent tools|
|Tag management tools||Multiple tags pinged at once||Tag managers help to speed up ad requests by reducing number of calls, improving the user experience|
Campaign structure, ad management, & reporting
|Structured campaign hierarchy||Advertiser → Campaign → Ad Group → Ads||Advertisers will want different campaigns/ads with different targeting and bids. You’ll then need to structure reporting around these permutations|
|Multiple ad types||Native, 300x250, etc||Boost your offering by having multiple ad types and different bidding options, as they’ll have varying value|
|Video ads||15s clips||Video ads not only drive higher CPMs, but they are increasingly demanded by advertisers. Make sure you can also report on how far users got through each video (25%, 50%, etc)|
|Campaign scheduling||Start on 9/15 and end on 10/15||Automated campaign start/stop helps ensure no manual mistakes|
|Self-serve campaign management UI||Advertisers are used to self-serve UIs and only begrudgingly work with partners that require e-mail to stop/stop/etc campaigns (plus it's more work for you to manage these)|
|Self-serve reporting UI||Ad servers with manual reporting vs a log-in UI are unlikely to see quick customer adoption|
|Reporting by every metric||Advertisers will expect reporting by all permutations, including campaign, ad, keyword, country, device, etc|
|GDPR compliance||Consent prompt and back-end database to store info||Your ad server must be able to ask for, handle, and manage consent for EU residents|
|User management (advertiser logins)||You’ll want a system for creating user logins, scheduled reporting to them, etc|
|Billing||Automated tools to help with billing and invoicing cut down on internal time|
|SOC Type I audit prep||You’ll have to go through the auditing process, a time-consuming ordeal|
|Multiple server locations||Servers in Seattle, Singapore, etc||If you have international traffic, working with multiple servers across different continents is needed to minimize response times|
Even with a team of 5-10 engineers dedicated to the project, building an ad platform from scratch with all these features would take years (at least, it did for Google, Facebook, and others, who had much larger teams than that).
Of course, one could build an ad server without many of these capabilities, but doing so doesn’t set the product up for success, and now months have been wasted building a product nobody uses.
Certifications / Tools / Audits
Additionally, offering an ad product comes with the need for new software tools, certifications, and audits. These costs add up and are easy to overlook when making the decision to build in-house.
|What||Avg Yearly Cost for Enterprise Customer||Importance|
|IAB Membership||$50K - $100K+||IAB membership helps to drive advertiser trust by ensuring your platform is transparent, following best practices, and a legitimate ad product. This is something you’ll likely be asked about from advertisers with large budgets|
|IAB Spiders & Bot List||$4K with membership||In order to provide accurate reporting, you’ll want to remove impressions and clicks from non-human traffic. This helps with fighting refunds that may arise from discrepancies with advertisers who use their own tracking tools|
|SOC Type I Audits||$30K||If you’ll be handling financial reporting, SOC I auditing is a must|
|Device targeting databases||$20K||To provide robust and accurate device-level/user agent targeting and reporting, you’ll need integration with a device detection tool in real-time|
|Status and incident communication tool||$5K||For your advertisers to continue to spend with you, they need to trust the platform. Having a live feed of uptime provides your advertisers with transparency into your product, cutting down support costs and increasing customer trust|
|Server monitoring tools||$4K||It’s vital you are tracking and monitoring your uptime, timeouts, and volume of your ad serving and ad creation requests|
|Location targeting databases||$2K||To provide robust and accurate location targeting and reporting, you’ll need integration with a geoIP database in real time|
|Server Costs||$10 per million requests||Using an average price of $10 per million ad requests, high volume publisherrs can expect server costs to escalate quickly (100M monthly requests = $10K)|
These necessary services add up. For instance, a publisher with 500M monthly ad requests may be looking at an additional $150K - $200K/year on top of salary costs.
Scaling and Maintenance
Another hidden cost is the work needed to scale and maintain the product. An ad server that begins with 1 million monthly impressions will crumble if it tries to grow to 100 million without a team focused on optimizing costs down and preventing ad serving issues. Advertisers expect 99.99%+ uptime, so without a team focused on maintaining it, it’s likely there will be massive issues and headaches for sales/ad operations.
Additionally, the ad tech space is constantly shifting. For instance, to comply with GDPR, Adzerk spent 6+ months making our system compliant. Owning the tech entirely means you must keep up with ad tech trends (which also include, over the years, viewability, fraud, header bidding, video, retargeting, and more).
Our recommendation would be that for every 100 million monthly requests, you have one dedicated ad engineer to help with scalability, reliability, maintenance, growth, and new features.
This means a site with 500 million monthly requests would need five, which at an average engineering salary of $125K is over $600K in salary costs.
Let’s take the scenario of a publisher with 500 million monthly impressions who wants to build an ad server with all the table stakes features of a 2018 ad platform, such as user-level targeting, frequency capping, eCPM optimizations, and more.
Estimated timetable and costs to build are:
Building/Maintenance Costs: 5 engineers @ $125K salaries
Months to launch: 12-24
Yearly costs: approx $800K
And this is with no delays. We have yet to see a company who decided to build from scratch then release their ad platform on time, and most end up never actually launching one.
Fortunately, it doesn’t have to be so dire.
Hooking into an API microservice like Adzerk means you’d get instant access to tools for building a bespoke ad server with all the functionality of the large ad tech players. Indeed, the above company could launch at a fraction of the time (1-2 months versus 12-24) and cost (average Adzerk fee is $10K/month, an 85% savings) using APIs. Plus, the “hidden costs” like server costs, certifications, audits, IAB spider lists, and engineering salaries are built into that price.
This isn’t to say there aren’t reasons to build an ad server from scratch. Some brands want full ownership of the data; for others, if ad revenue is the only way they monetize, it may seem daunting to hand that responsibility to a third-party.
But if the justification is that building from scratch is cheaper or faster, it’s rare that it makes sense not to build on top of an API microservice, in the same way devs no longer build their own communication infrastructures but just rely on Twilio instead.