Table of Contents
Back in 2008 my college friend Chris sent me a message about a new startup he was working on. It didn’t have a name then but was a system to watch Craigslist for new ads posted around user-defined search topics. Any new ads would then be emailed to users so they could be the first to jump on new listings. He was building this project for his own needs but soon realized there was demand for such an app and pivoted toward a public product. He picked the name and launched a beta to the public. AdRavage was born.
From the very early stages, I helped beta test the product, was a sounding board for programming logic, design changes and was a loyal user. He built the web app well and it was beautiful, as is everything Chris creates. Every redesign of AdRavage was more functional and visually stunning than the last. He added new features as users requested them and the user base quickly grew. Chris soon added paid subscriptions to help cover the cost of AdRavage’s growing resource usage.
AdRavage started picking up steam and was getting noticed on Startup networks. But Chris never stops, he’s always on the move. He seemed bored with AdRavage and soon after launch was already working on other projects. Spreading yourself thin can only last so long and in the end, you have to cut projects loose for them to survive or to create new projects. In March of 2011, Chris listed AdRavage on Flippa.
Up until recently, I didn’t fully understand this statement, “you have to cut projects loose for them to survive or to create new projects.” Being a part of AdRavage’s earliest days, I felt connected to the project and decided to buy it from Chris. We worked out a deal and some of you may remember this tweet around the end of March:
I just bought a company, I feel like such an adult! #weird
— Jesse Michelsen (@JesseTheDev) March 24, 2011
I was excited to say the least. This felt like a big move for me and I already had ideas flowing of how to improve AdRavage. I paid Chris $1,000 for AdRavage. That price included the domain name, code base, user base and current paying subscribers. I paid Chris a bit extra to help move the AdRavage core to my servers to insure everything was functional and there was no interruption in service. I took things from there.
Paying subscribers were set up on a monthly basis through PayPal and PayPal doesn’t allow that kind of subscriber to be “migrated” to a new account, so I had to email those users and ask them to sign up again via my account so they could continue paying. That resulted in a loss of about %20 of the monthly subscribers.
As of April, 2011, AdRavage had 16 paying monthly subscribers at $3/month and an average of two Lifetime Purchase accounts per month at $29. Purchase accounts were a one time purchase price, not a subscription of any kind. AdRavage required a VPS (Virtual Private Server) to function and that cost $49.95/month.
Purchase accounts being what they were, an unreliable source of revenue, AdRavage was just a few dollars short of breaking even and had the possibility of profit every month from the day I took the helm.
Startup Goals and Dreams.
My goals for AdRavage were modest. First, I wanted to ensure that my costs were met every month. To do this, I reworked the AdRavage website from a marketing perspective. I optimized site content to better highlight the premium accounts, I did some Search Engine optimization on the site and I set up a Google AdWords campaign as well as a Facebook Ads campaign to increase traffic. Both of these ad campaigns were done through promotion codes and coupons I found online, so they didn’t cost me anything. I ran the campaigns for about 90 days which resulted in more consistent Purchase account sales. Interestingly enough, monthly subscriptions did not increase much as a result of the ad campaigns.
After costs were reliably met by AdRavage paid subscriptions, my next goal was to add features to the platform. An increase in features would bolster the benefits of the paid accounts and would mean an increase in price would be acceptable. Features I wanted to implement first were; images in results (the email notifications looked like this), more granular control of search matches, and additional services included in search results ie eBay.
My end game for AdRavage was to include classified sites from every state and county in the search database so that results were not limited to or dependent on Craigslist. While eBay is not a classified site, at the time eBay didn’t have a notification system but it did have an affiliate system that I could tie into AdRavage so that users could get notifications from new eBay listings matching their search results and I’d get a commission for any purchases made on eBay that were referred there by my affiliate cookie. The commission was around 4% on the final sale price on eBay. Based on the number of active searches on AdRavage (~100,000), if a small percent of those also included eBay and a small percent of those purchased from eBay, I stood to make a small percent of a small percent of a small fortune!
By my calculations based almost entirely on speculation, if 10% of those 100,000 searches included eBay, and 1% of those searches resulted in a purchase, if the average final sale price was $100, I’d be making $400/month.
I decided to focus on the eBay feature first since if it paid off, I’d have the funds to outsource some of the development work that needed to go into AdRavage. This potential profit also motivated me to get this feature completed quickly even though I had other projects that took priority of my time, so I hired a developer through Odesk to complete the feature for $200. The feature was ready for implementation in about a week. This was in October of 2011, six months after purchasing AdRavage.
Things are never that simple.
During that first six months after purchasing AdRavage, resource usage/requirements slowly climbed, user signups increased slightly probably as a result of Search Engine Optimization and the advertising campaigns, but overall growth was not that upward curve that you like to see. Support time, however, did noticeably increase.
There weren’t major problems with the AdRavage code base, it was well designed on a good code framework. The site was stable. But as more and more users found the site and had specific individual needs, support emails with questions and feature requests seemed to never end. I was constantly updating the city database as Craigslist expanded, and while Craigslist is well known for their snail’s pace release schedule, they seemed to always be tweaking tiny details in their user interface that resulted in feature requests from my users to support those tiny changes.
During that first six months, the time I was spending supporting AdRavage was getting out of hand and I decided I needed to quickly increase revenue as a result, before putting time I didn’t have into features. So I started experimenting.
Trial and Error. Mostly Error.
So I started experimenting. Most notable, I wanted to take advantage of the email list, as I saw it, that was the AdRavage user base. So I hacked together a way to inject text and links of my own into outgoing emails automatically. The ads would only go out in free subscribers emails and that way I could add “ad free” to the premium feature list too.
I wrote the copy for each of these ads myself. The products I chose to promote were products I actually use and promote wherever I can anyway. I kept the product description very short and to the point so that the main content of the emails that users wanted to see wasn’t overshadowed by a huge block of ad text.
To get started, I used the ad injection to promote the AdRavage Facebook page. The results were great! I was excited. The Facebook page went from 15 likes to nearly 400 in a few weeks. I was ready to start promoting products.
When I started promoting products, I was surprised and disappointed with what came next. Not only did I see zero conversions from the text ads, I started getting emails like this:
“I’ve never heard of Freshbooks but I can tell you, I will NEVER use it now!”
What the…how could this be? Why would a FREE user be so upset about getting a one sentence long text ad in an email that’s essentially an email full of ads.
I tried changing the products. I tried placing the ads in different spots within the email. I tried writing shorter ad copy. I tried writing longer ad copy. I tried having the ads run for only one day a week.
Nothing seemed to work. At the time I was testing this, the email list/user base was over 2,000 strong and I never saw a single conversion from my text ads.
This was discouraging.
After the discouraging run with ads, I was weary of introducing new features. At this point, the eBay back-end code was complete, I just needed to integrate it into the core and write the User Interface for the feature so people could use it. But I couldn’t do it. I froze. I didn’t know how to proceed. I was busy with support requests and felt like those kept users happy, and my experience with the text ads made me think that introducing new features or change of any kind would only piss off the users. So I sat on the eBay code for what would turn into forever. That feature never got implemented.
It wasn’t just the eBay feature that got frozen though. All the new features I had on the roadmap got frozen. If multiple users didn’t directly request a feature, I put that feature on hold. If requested features conflicted, both features got put on hold. If I didn’t have time to perfectly execute a feature, it got put on hold till I had the time which in reality would never happen.
AdRavage was still growing slowly but wasn’t climbing that growth curve, it was now coasting down it.
The beginning of the end.
After that first year, the ongoing stability of AdRavage changed from stable months with a few problem days, to a few stable days scattered among months of problems. The user base had outgrown the $49.95 server but I didn’t realize that because of how the problem presented itself. I never got resource usage alerts, just complaints from users that emails weren’t coming on time, emails weren’t coming at all, or in the worst case, duplicate emails were being sent.
My one criticism of the original AdRavage code, looking back now, is that it wasn’t designed to scale. I completely understand why. It was a pet project. It wasn’t meant to scale.
I was able to track the problem back to stuck PHP scripts. Basically, scripts were designed to run on intervals, one after another, to search the database and send emails with results. As the user base grew, the time it took to execute those scripts grew. The five minute interval script was taking thirty-minutes to fully execute. That meant the database was not being updated properly by the scripts and the scripts wouldn’t be able to read what to send from the database.
The duplicate email problem was the most important to me. This problem was being caused by the fact that every script would update the database at the END of its execution with what emails it sent. If another script started before the prior one finished, that second script wouldn’t see that the first had already sent certain emails, and the second script would send them again. To fix this, I implemented a simple socket system so that if a script was running it would create a file on the server to show it was in a running state. Any scripts that tried to execute afterward would first check for that file and if it was present, the script would not run and at the next interval, the next script would make that same check.
This fixed the duplicate email problem but the other problems still existed and in some cases, delays got worse as you might have guessed.
I realized these problems were tied into resource usage when I started having the AdRavage website crash often. I didn’t monitor the AdRavage web interface for uptime as it wasn’t critical for the system to run and traffic was pretty consistent but when ads stopped coming through to users, they would all hammer the web interface to check their ad configuration and the site would crash.
Supporting AdRavage was getting exhausting. Something needed to change.
A Breath of Fresh Air
First I tried increasing the power on the VPS at my current host at nearly double the monthly cost, $79.00. This put me back at breaking even as far as revenue went with AdRavage which would have been fine, but it wasn’t enough of an increase in power to fix any of the problems.
I happened to bring this up during a conversation with a Startup Incubator associate while securing hosting for Manteresting and she asked me to send details about AdRavage to her and she’d set me up with a hosting credit.
What a relief. With that reduction in hosting cost, I was able to provide the power required to stabilize AdRavage. I was able to focus on fixing issues instead of playing catch-up with outages. I spent the next three months after moving to Softlayer rewriting parts of AdRavage that were broken, so the software would scale with the growing user base and the business could start to grow again.
And grow it did. With increased speed in the backend, AdRavage was more efficiently sending emails and users were happy. The user base started to grow faster and there was a noticeable increase in monthly subscriptions as well as Purchase accounts. Search engine traffic increased and AdRavage was getting a lot of attention again. For another six months after moving hosts, AdRavage ran smoothly.
In its best month, AdRavage made over $350 in premium account fees. Things were going great. I was feeling good about the company again and was ready to start implementing the features that I’d developed over the past year. Then I got this (page 1 of 17):
The Death of AdRavage
At first I was angry. AdRavage always operated in grey area inside the Craigslist Terms of Service. Even Craigslist, based on their Cease and Desist document, didn’t fully know how AdRavage was operating as they got a lot of the details wrong. In fact, it is those details that helped AdRavage survive that long without a Cease and Desist from Craigslist as they were constantly shutting down AdRavage competitors for abusing Craigslist data. It was probably only the fact that AdRavage started rising in search results that Craigslist even discovered the service.
After calming down, I started looking at my options. According to the Cease and Desist, I had a short time to comply or suffer the wrath of Craigslist which would have financially crippled me, my children and my grandchildren. It was harsh. I looked over the C&D time and time again, trying to decide whether I had a case against the claims. In many ways I did, but what I lacked was the financial resources to actually fight the claims. Craigslist didn’t have that problem.
I consulted a few knowledgeable friends on the matter, slept on the problem a few nights and thought about whether continuing with AdRavage would be a good idea regardless of the C&D. The site was making more money but there were still problems that needing fixing. Would I suddenly have the time to dedicate to AdRavage if I were to miraculously dodge this huge bullet gunning my way? Probably not.
So I put up a message about the C&D and AdRavage’s closure on the site. I refunded any recent purchases and cancelled the monthly subscription plans. And that was it.
I got a handful of emails requesting refunds and a few more from loyal users expressing sadness about the company shutting down. I still get messages on Facebook asking what happened. But in the end, I feel this was the right decision.
Moving forward is something I now realize I have a problem doing and not just with AdRavage. Moving forward doesn’t mean pushing on regardless of circumstances. It doesn’t mean never letting something die. Moving forward means exactly that. Knowing when to let something die. It means knowing when to move on.
AdRavage was a good project. I learned so much from start to finish. I learned that you never truly know what your users, your audience, is thinking. You can guess, you can survey, you can study, but you’ll be wrong often and you have to learn how to deal with that.
I learned that not everyone likes a good idea. Some are threatened by progress. The most frequent question I got after announcing AdRavage’s closure was, “why would Craigslist care if you’re making their service better?”. I truly don’t know but Craigslist absolutely did not want notifications on their listings. I like to think it’s because they are creating notifications internally, but I have yet to see evidence of that and have stopped using the service entirely because I don’t have the time to sit on their site searching for listings. If only there was a way to be notified of new listings… 😉
Either way. No hard feelings Craigslist. Thank you, AdRavage users. Thanks Chris. It was a great adventure and I’m happy to move forward, on to new things.