DomainPolish: From MVP To Exit In 6 Months

Hi my name is Dan Shipper. I’m a sophomore at UPenn and last month I sold my web app DomainPolish.

If you’re new around here DomainPolish is an MVP I built over the course of a few days in August. It’s an MTurk arbitrage that helps companies get on-demand feedback on their websites. Because I think it’s a successful example of the mythical minimum-viable product I’m going to use this post to break down what I did right and what I did horribly wrong during the process of building this product.

We’ll cover everything from pricing to exit negotiations replete with lots of interesting (and sometimes stomach-churning) statistics.

Warning: this post is really long. It’s also really detailed. If you’re not up for it you might want to follow the discussion for this article on Hacker News, check me out on Twitter, or maybe even read some James Altucher.

Still here? Let’s get started.

What I Did Right

The MVP itself

Before I decided to sit down to build DomainPolish a few things happened.

First, I knew the product was valuable because I had used MTurk to get feedback on my own websites. DomainPolish as a product was just a service to automate what I was already doing by hand.

Second I went out and cold emailed a bunch of random people who I thought were potential customers. Based on their feedback I knew I shouldn’t target the site at freelance web developers (who I thought were going to be my target market) and instead at people developing their own websites.

Third I literally built the absolute minimum barebones app I possibly could. All it had was a landing page, a pricing page and a checkout page. That was it. When orders came in I would go to Mechanical Turk, create a survey by hand, publish it and then email the results to each customer individually. 

That sucked. But what would have sucked a lot more was building a product that fully automated the process and finding out later that no one wanted to use it.

After about 70 orders I finally automated the whole thing and built an online dashboard to view your survey results. And it was worth it.

Connecting with customers

The two things about DomainPolish that contributed most to my bottom line were Twitter alerts and SnapEngage. They added exactly $4500 to my pocket. 

I can tell you this because I met the guy who eventually bought DomainPolish through the SnapEngage widget on my website. He started out as a customer and because we were chatting he got interested in the business. If that widget wasn’t there it’s much less likely he would have ever gotten in touch and it’s much less likely that the sale would have ever taken place. 

SnapEngage alone added $3,000 to the business. The other $1,500 came from Twitter alerts. Which brings me to the next thing I did right:

Licensing the codebase

Whenever anyone tweets anything with the word DomainPolish in it I get an email. One day I saw a tweet that said something along the lines of: “Looking for a freelancer to make a site similar to DomainPolish.”

At first I was a little pissed. I thought the guy was trying to rip off the idea. But I got over that pretty quickly and shot him an email. It turned out he wanted to build a site built on MTurk that didn’t get your website reviewed, it got your dating profile reviewed. 

Cool! So instead of having a freelancer build it in a few weeks I told him I would license him the codebase. I kept the IP and he got to build his website. 

It was a great experience and something that I highly recommend to anyone that has an app built on top of an API. If you’re making money with it, someone else is going to want your code. And you don’t always have to give up your IP to sell it to them.

Doing things that don’t scale

I really wanted the customer experience for DomainPolish to be awesome. In many ways it wasn’t: the app was clearly MVP, it had rough edges and there were a few bugs. But for every customer that bought I plan, I recorded a 30-second custom thank you video and sent it to them. I did about 40 videos before I finally ran out of steam.

But the response was awesome. People really seemed to respond to that level of gratitude and (although I can’t prove it) I suspect it had a lot to do with the amount of sales we got even after ceasing all forms of marketing.

What I Did Wrong

Everything. Let’s dive into a few specifics.


A big problem with software is that it’s so difficult to price. DomainPolish was no exception. I don’t have all of the answers but I can tell you to make sure to make sure your pricing model can’t be arbitraged. About a month after launch I tried a pricing model like this:

Basic: $5 – 5 reviews

Professional: $20 – 15 reviews

Max: $50 – 40 reviews

For some reason I thought that would drive more people to pay for the product because the cheapest plan was the best value. You might even think that people would just sign up for 10 Basic plans instead of the Max plan.


If your pricing doesn’t make sense, even if it means your customers are getting a better deal, no one will sign up. I didn’t make any sales for the month or so that my pricing was like that. And as soon as I pulled myself away from the other stuff I was working on to change it back, the sales started trickling in again.

Metrics and Testing

I gathered no metrics. I can’t tell you what percentage of my customers were on the Basic plan vs the Max plan. I couldn’t tell you what the conversion rate was until about 10 minutes ago when I calculated it for this blog post. 

I actually set up A/B testing with A/Bingo. I ran two experiments. One was the headline on the homepage and the other was the Pay Now button on the pricing page. Neither experiment produced statistically significant results. 

Looking back on it, this was such a huge mistake because DomainPolish provided me with an opportunity to do learn how to optimize a site. I had a sales funnel ready to be tinkered with. It was such an awesome problem to solve – and a rare opportunity that just sort of dropped into my lap. But I basically ignored the opportunity to learn those lessons in favor of working on other newer projects. I really regret that.


I usually host my projects on Heroku. For DomainPolish I decided I wanted to learn EC2. I set up 3 instances (two production and one staging) and thought I was a boss. Wrong. If I had used Heroku to host DomainPolish my hosting fees would be exactly zero dollars. On EC2 my bill fluctuated between $100-$200 a month. I ended up paying $1078.26 in hosting. 

That’s A THOUSAND DOLLARS in hosting fees. For a small project like this that’s absolutely killer.

Lesson learned: don’t use anything but Heroku until you have to.

The Negotiation

For 4 of the 6 months that I was running DomainPolish it was a second class citizen to me. It was a nice low-maintenance income stream but that was it. Until I received this:

“Just out of curiosity, you have any interest in selling DomainPolish since you are not actively working on it?”

It’s funny how one sentence can completely change your perspective on a product. Suddenly I really cared what happened to it. I was so nervous. I really really wanted the sale to happen. Even though I really had nothing to lose – somehow it didn’t feel that way.

And so I made a fatal mistake: I played not to lose instead of playing to win. After a brief discussion about profit margin, traffic and customers he made an offer.

I’m going to be honest: I completely froze. Rationally I knew I should have made a counter offer. But I really DID NOT want to fuck the deal up.

So I accepted the first offer he made. 

It’s so dumb in retrospect. But I look at it as a learning experience: hopefully I have being such a pansy out of my system now. 

Some Statistics

Plans Sold: 140

Total Unique Visitors: 9,357

Conversion Rate: 1.49%

Total Expenses: $1,775.26 – this includes hosting and fees paid to MTurk workers

Total Sales: $2,355.90

Fee to License: $1,500

Sale Price: $3,500

Total Take Home Profit: $5080.64


Use metrics. Don’t use EC2 unless you have to. Reach out to your customers on Twitter and with SnapEngage. 

Play to win. Don’t play not to lose.

It’s not bad for something that I built in a weekend and basically threw into maintenance mode shortly afterward.

But the biggest lesson: the MVP model works.

The Future

DomainPolish will be officially transferred over to its new buyer in the next week or so. He’s a really awesome guy and during the process has become a good friend. I highly recommend checking it out once he has finished transforming it into a new product.

Thanks for reading this far! You should follow me on Twitter. Or check out my current project Airtime for Email.

13 Mar 2012, 2:19pm | 24 comments

  • christopherdb

    Congrats on the exit, and on all you learnt from it, looking at your stats at the bottom of the post, what exactly is the ‘Fee to Licence’?

  • Dan Shipper

    So I ended up licensing the codebase to someone else so he could build a different Mechanical Turk app. I kept all the IP but he got the codebase to use. Thanks for asking I’ll try and make that more clear in the post!

  • fchollet

    Interesting story!Just curious, what makes Heroku so superior to EC2 in terms of spending? I have currently a Django app hosted on GAE that I move to move to somewhere else, and I’m considering EC2 and Heroku as alternatives.

  • Saad Malik

    Dan, this is awesome. Not bad at all for a weekend project. Congrats!

  • Dan Shipper

    @fchollet I work in Rails and for a small app it’s completely free to host on Heroku. That’s the only reason. I think GAE is the same but correct me if I’m wrong. I can’t speak for Python support on Heroku though sadly – but it’s definitely worth a shot!@Saad thanks so much! I hope you found the article interesting 🙂

  • Eric Rafaloff

    Hey Dan, I’m a Sophomore in college as well, and although I’m a bit more on the techie (also Rails) side of things than the business side, I thought this was awesome! Great work alone on building an MVP, a task that seems to be daunting to a lot of people even though that kind of defeats the purpose of it 🙂 Keep us updated on your ventures please.

  • Dan Shipper

    Thanks for reaching out Eric definitely email me if you want to chat some time: dshipper [at] gmail.

  • chrisco

    Can you share your IP licensing agreement and buy/sell agreement? That would be interesting and instructive to people. Just redact any private info (names, contact info, etc.). Thks.

  • Dan Shipper

    nothing too fancy. the IP licensing was done by email (i.e. he emailed me saying he agreed that I retained all IP and control and he only got the source) and then he PayPal’d me the money. The buy/sell agreement was an actual contract but was probably written in like an hour by the buyer. Ping me at dshipper [at] gmail if you’re interested I’ll send it to you.

  • Thomas Staub

    Thanks for being so open. But I can’t believe you sold this project for 3500.-.If I would have get this offer, I wouldn’t have answered with an counter offer, I just would have answered “I believe DomainPolish is worth a good deal more…”.Next time you want to sell a project send me an email.

  • deremer

    You’re the man, Dan. When I was in college my money making schemes all centered around how to score more beer. Oddly enough they still kinda do. You’re fucking awesome. Let’s catch up soon.

  • max

    Good going! I remember your original post for the site on HN and was impressed then, as I am now. Keep up the positive attitude, hard work, quick iterations and evidence based decision making and I’m sure I’ll be hearing about much bigger deals from you in the future 🙂

  • Dan Shipper

    Thanks for the comments guys it really means a lot 🙂

  • IceCreamYou

    There are a couple of good guidelines to follow about negotiating; “don’t accept the first offer” is one of them, as is “don’t make the first offer.” If you know something has value — whether it’s your time, a service, or a product — you should know what you want to get and be able to feel comfortable saying “no” until you get it. This post came up on HN awhile ago and I agree with many of the guidelines it offers: other thing — free is one thing, but outside of that, a VPS tends to be a lot cheaper than cloud hosting for small sites (and in your case shared hosting would have even been fine). Cloud gets a lot of hype but the advantage comes from the ability to scale quickly and unless you already know you are having problems scaling quickly it’s probably not worth the investment at first.Congratulations Dan.

  • Giles

    Congrats! Really awesome story.

  • Grogenaut

    Is it too hard to type in the full name of things? MTurk? woah, Mechanical Turk, or… much clearer. MVP? Model View Presenter? Most Valuable Person? Stop being a BFD (big fucking douche).

  • kmaxat

    Cool stuff Dan! Could you please explain what you meant by saying play for win? Could you also send me a code licensing agreement? Thanks!

  • Steve Klebanoff

    Loved the insight into the entire process, would love to see more people give such thorough roundups after an exit.What did you do to market the product and get customers to the site? I feel as though this is one of the hardest things about creating something like DomainPolish.Also — I’ve seen quite a few sites similar to DomainPolish. What do you think got you customers over the competition?

  • MVP is a bunch of letters

    What the hell is MVP?

  • mike

    @MVP – Come on guys if you are interested in startups and reading a post about startups how hard is it to Google??… Minimum Viable Product. Absolute minimum. @Grogenau stop being such a douche, dan has been great to share this valuable info.

  • Vikram

    Hey MikeThanks for pointing out what MVP stands for. I am 35 years old trying to learn programming and create something of value. Sometimes even the very basic explanation helps.

  • Makal


    Very good reading! Although I am missing some comparision in few examples, like – if the pricing you’re talking about didnt make any sales (and sense), then what was the pricing that DID, and why do you think it made the sense?

    Regards, M.

  • comment devenir freelance

    Hello, i feel that i saw you visited my blog so i came to return the want?.I am trying to find things to enhance my website!I assume its good enough to use some of your ideas!!

  • Pingback: Why I’m doing it all wrong « Dan Shipper – Distilled Thinking


Never miss a new post