7 Things I Learned After 1000 WordPress Plugin Sales

1,000 WordPress plugin sales and the 7 things I learned along the way.

The Ultimate Book Blogger plugin recently passed 1,000 sales. And I’m floored.

I never thought I’d get to this point. When I first built the Ultimate Book Blogger plugin I was in college and doing this for fun. I expected to maaaybe earn $500. At $35 a piece, that comes out to about 15 sales. But now I’ve sold over 1,000 copies and made over $30,000—from this one plugin.

Ultimate Book Blogger is what really kick-started my business and allowed me to continue building it right after university.

Here are a few things I learned along the way…

1) You can’t please everyone

Person #1:

Can you make it so the ‘about the author’ box appears after my signature?

Person #2:

Can you change that back? I want the ‘about the author’ box to appear before my signature.

Person #1:

I really want my giveaways listed in ascending order.

Person #2:

I really want my giveaways listed in descending order.

For every person who wants something a certain way, there’s going to be another person who wants it a different way. Sure, I can make some of these things customizable, but for others, I just have to make a decision and do what I feel is best. I’m not always going to be able to please everyone. People are different and want things to happen in different ways.

2) People will buy without reading

Despite numerous warnings and notices in coloured boxes that the product is for “self-hosted WordPress.org blogs only”, I still get people on Blogger and WordPress.com buying the plugin. Even when I had a “no refund” policy, I still refunded these people who purchased it and later realized they couldn’t even used it. This contributed to my decision to start officially allowing refunds back in 2015.

Part of the problem is definitely the huge amount of confusion between WordPress.com and self-hosted WordPress.org. So many people think that when they buy “premium” on WordPress.com, they’re suddenly “self hosted”. But that’s not the case.

If you’re selling any kind of WordPress product, you definitely need to be prepared for this confusion!

3) Test everything—even if it should “obviously” work

Of course it’s common sense to test any big features or significant changes. But I’ve often tweaked a tiny thing or implemented one simple piece of code that I’ve done a million times, and I didn’t test it properly because it was so simple, so easy, and I knew it would work.

Then it didn’t work.

As a result, I have a few changelog entries that look like this:

Version 1.1

  • Fixed x.

Version 1.2

  • Seriously fixed x.

4) People will be using outdated systems that “expired” years ago

PHP versions that are almost a decade old

I’ve had customers using PHP 5.2, which was released in November 2006. It was marked as “unsupported” (no longer getting security fixes, etc.) in January 2011—over five years ago. The two most modern versions that people should be using are PHP 7 and PHP 5.6.

The problem with using such an old version (aside from the obvious “using older versions may expose you to security vulnerabilities“) is that plugins may use features that were introduced in later versions. If your version of PHP doesn’t support those features, the plugin could break or just not work.

I finally had in the sense to add a notice into UBB if someone’s PHP version isn’t high enough to support the plugin.

Servers that don’t support TLSv1.1+

Automatic updates broke for a lot of my clients when I shut off TLSv1. I had to do this in order to remain PCI Compliant (now the deadline for this has been pushed back but I’m still keeping v1 shut off). But some customers were on servers that couldn’t connect to another site via TLSv1.1 or TLSv1.2. Old, outdated systems.

Sadly there’s nothing I can personally do about this one other than say, “Get a host that isn’t so shit.” (sorry πŸ˜› ) But I did add a note to my sales terms that I can’t guarantee automatic updates will always work.

5) Customer support makes all the difference

When I see people recommending the plugin to others, one of the things they often bring up is me. They talk about the level of support I offer and how I’ve helped them along the way.

People were recommending Ultimate Book Blogger long before I ever introduced an affiliate programme, and I chalk that up to the customer service I provide. It goes a long way to making customers happy. If I have a few extra minutes, I even go above and beyond my own support policy. Sometimes it takes me the same length of time to type up a custom CSS snippet for someone as it would to type out that, “Sorry but I don’t provide custom CSS code as part of my support.”

I don’t want people to expect me to write custom code for them, but if it’s only going to take me 30 seconds, then I can surprise them with a little bit of extra help.

Make it easier for people to get in touch

In addition to providing good support, you should also make it easy for people to reach out.

For the developer (me) some kind of ticket system is definitely easiest. That way I can:

  • Automatically see the customer’s purchase record.
  • See other tickets submitted by that person.
  • Ensure their license key is still in date.

But ticket systems are harder for customers.

My custom coded ticket system at the time required that people login to their account. So many people would contact me on Twitter saying they couldn’t login to their account (I’m not sure how they missed the “I forgot my password” link or the “Register New Account” button, but oh well). So they not only needed support for the plugin, they also needed support for the support system! O_O

Last year I moved to HelpScout. HelpScout is a ticketing system for the support team (me), but it looks like normal email for the customer. On my end, I can see the customer’s purchase record, see if their license key is in date, see their profile (name, email, site URL), and see all their past tickets. But replies just go to the customer’s email address, so to them, it’s just normal, convenient, easy email.

I also added a contact button directly inside the UBB admin panel. So if someone is configuring the plugin and gets stuck, they can just click a button to send in a support message.

6) Lifetime licenses aren’t sustainable

I wrote about this last year around when I was coding version 3 of Ultimate Book Blogger.

Pre-made products like Ultimate Book Blogger are cheap. $35. That’s it. $35 in exchange for a piece of software and help setting up and using that software. But when you extend that help to “forever”, it starts to actually put the developer in the red. Soon, I put in more hours of time supporting people than I actually got in return (only $35—sometimes as little as $17.50).

Usually this isn’t an issue. In most cases, customers ask for a bit of help after they first purchase, then they get it set up, and they’re done. That’s it.

Plugin updates is where we get problems.

If there’s a big overhaul to the product, then people will start having questions again. This is what happened with UBBv3. I suddenly had 700+ customers over several years who’d only ever paid me once. When I updated to v3, I got an onslaught of new support tickets that I wasn’t getting paid for. I was overwhelmed with the sheer amount of people I had to support. Sure, they paid me once, but soon the hours I was working overpowered the money that I’d once gotten.

That’s why it isn’t a sustainable business model.

7) Good documentation helps everyone

  • It helps customers help themselves. Particularly so they won’t feel lost or overwhelmed when first setting up the plugin.
  • It helps me answer support questions. Instead of typing up the same instructions each time, I can link people to a documentation article.

For a long time I didn’t have good documentation at all. Support requests have definitely gone down since I added better, more thorough docs. I’ve gotten into the habit of always creating a new documentation article when:

  • Someone asks about how to set something up and there aren’t instructions already. Instead of answering their question, I write up the ‘answer’ in a new documentation article, then link them to that article (two birds, one stone).
  • If I find more than one person asking the same question, I add it to the FAQ in the docs.

Have you ever built and sold a product before? What were some lessons you learned along the way?

Photo of Ashley
I'm a 30-something California girl living in England (I fell in love with a Brit!). My three great passions are: books, coding, and fitness. more »

Don't miss my next post!

Sign up to get my blog posts sent directly to your inbox (plus exclusive store discounts!).

You might like these


  1. Congrats! This is by far my favorite plug plugin on WordPress. I sometimes hope and wish that you’ll dabble in all the plugins I need and use on my blog. Your products and themes are by far the best. Cheers to a 1,000 more sales.

  2. I absolutely love the UBB plug-in and I have yet to discover all the features. And it’s true what they say about you – your customer support is amazeballs. You reply quickly and you get shit done. β™₯

  3. Your site is awesome. I would definitely recommend you to any of my blogger friends. As for me, well I could have used you a million time last year, and when I first got my website and hired a loser to manage it. I’ve learned lots along the way and now pay an annual hosting fee to manage my site, but there are always little glitches I come across and was wondering if you also do little help jobs with website problems if not on an annual contract?

    1. Thank you!! πŸ™‚

      Unfortunately I don’t do little jobs right now. I’m considering it for the future, but haven’t quite decided.

      1. Thanks Ashley. I’ll stay tuned here for updates. And who knows, I may leave my host and show up here eventually anyway. πŸ™‚
        While I’m here, I wonder if it’s overstepping boundaries to ask you a tech question about WordPress? I’ve been trying to no avail to change my header to the newer one my artist made of all my books. When I go to >appearance >header, add the new header (which is the correct size), and save to update image, the old one keeps appearing. Am I missing something? Any hints would be much appreciated. πŸ™‚

        1. Unfortunately I don’t think I can answer that question simply because every theme is different, so I can’t predict what the issue might be.

          I can suggest that you also try it in Appearance > Customize instead of Appearance > Header, but beyond that, the creator of the theme would be in a better position to help. πŸ™‚

  4. Thank you, Ashley, for all the work you put into your products. You’re truly a lifesaver, and I don’t know what I’d do without you!

    1. That’s a pretty accurate description. πŸ˜› Definitely some highs and lows.

      For the most part I love helping people and offering support. But the thing that can frustrate me the most is when one customer just fundamentally doesn’t understand WordPress and I get dragged into not only helping them with the product they purchased, but also helping them understand all of WordPress.

      That’s technically not within the scope of support I offer, but it’s also hard to tell people that. It feels like I’m leaving them in the dark, and then I just feel bad about that.

  5. I work in IT and I’m forever getting requests of “What’s my password?” I even had our designers make the ‘reset password’ button BRIGHT BLUE on the login screen.
    I have to respond with, “We don’t keep a record of passwords but here’s the link to reset your password.”
    People really just don’t read, it drives me nuts.
    I always look in the documentation first to see if it will answer my question before I reach out to you. Keeping it updated really helps.

    Nemo @ Young Adult At Heart recently posted: What’s Wrong With Platonic Relationships?
    1. Oh yes it’s insane! I used to have a private ticketing system for support. Each person has an account they create during checkout, then to submit a support ticket they log back into that account. But I got so many people messaging me on Twitter saying they didn’t know their password, couldn’t login, etc.

      1) There’s an “I forgot my password” link right on that page.
      2) If they seriously didn’t have an account, there was a “Register” button right next to it.

      Sometimes it’s baffling what people don’t see. πŸ˜›

      I finally moved to HelpScout, which is a ticketing system on the agent side but plain ol’ email on the client side, so people no longer have to login.

      I’m the same as you in that I always devour documentation before asking for support. Usually I can find the answer on my own (unless the docs suck πŸ˜› ).

  6. Great roundup, makes total sense. I’m not going into coding anytime soon (*snort* if ever, it’s really way out there across oceans in my non-comfort zone), but I have been thinking about e-courses. Those I will offer sooner rather than later, and have a few in the works already.

    Lifetime access? Really? It sounds nice, but I’m not sure everyone has thought through exactly what that will mean. It’s one thing if you’re in the IT industry for life, but I might quit this thing one day to pursue something entirely different. What then? Still keep outdated course material up and running?

    1. Yeah, at least many people include a clause that defines “lifetime” as the lifetime of the product rather than the lifetime of the person. That means as long as the product is still available and being sold you get support/updates/access, but if the product gets discontinued then those things may no longer be available to you.

      But still, lifetime support isn’t sustainable!

Recent Posts

    Random Posts