If you hadn’t heard, I recently launched my long-awaited product on youth pitching training, named The Dynamic Pitcher.
Planning, writing, and laying out all the book and video materials was a huge undertaking as I’m sure you can probably guess, but a non-trivial amount of work went into the technical side of simply selling it. It was a fun experience (though one I’ll probably outsource next time) and I learned a ton, so I figured I’d do a quick write-up of how The Dynamic Pitcher sells through my online shop.
Long-Form Sales Copy
First and foremost, I have what most consider a long and annoying sales pitch:
I used to look at these long-form copy pages and think: “Who the hell likes these things?” I sat down for lunch with my Internet marketing friend Andy Wilson, who basically told me what it would mean for my bottom line if I didn’t use this style of promotion, and it wasn’t pretty. I validated his theories by doing a fair bit of research, and if I knew how much work it would have been (and how poorly I probably marketed the product), I would have just paid Andy the ridiculously low sum of money he requested to handle it for me. However, I like to do things at least once to learn the size and scope of things, and besides, the pleasure of finding things out is not yet something that has been chased from my soul.
These long-form sales copy letters tend to run on OptimizePress, which is a paid WordPress plugin. I have version 1.x and they are currently on 2.x with a responsive templating system, but the 1.x versions have unlimited licensing – and currently, IMO, better layout options and back-end solutions, though I’m sure this will change in the near future.
Unfortunately none of the copy is written for you – that’s entirely of my doing. Going around the Internet, you can see some examples from your industry that presumably work well, and from those frameworks, you can construct your own fairly easily using the templating tools in OptimizePress – but that’s for someone like me who has many, many years of WordPress editing experience as well as WordPress coding experience.
Purchasing the Product – The Driveline Baseball Shop
The Driveline Baseball Online Shop runs on WordPress + WooCommerce, which is a free WP plugin. WooCommerce has decent community support and is fairly extensible if you know how to develop for WP using hooks and functions, but it’s not very friendly if you’re relatively new to the business.
I also use a Stripe plugin to process credit cards; Stripe is incredibly developer friendly but – say it with me – not all that helpful for people who aren’t tech-savvy. A one-stop solution for said people could be Square Marketplace; I use their dongle on my iPad/Android devices to process credit cards in-person and they have their own online shopping cart that looks pretty darn useful.
The WooCommerce + Stripe Plugin combination handles all the credit card validation and email sending of invoices, and when someone buys a physical product, I get an email as well as a back-end system of orders that is more or less usable (not great but not worth screwing with at my scale – the biggest complaint is shipping costs and shipping labels; both hard problems to solve). I go through those orders, print out packing slips, and send almost everything through USPS Priority Mail now that they have bubble mailers in stock and offer $50 in free insurance. I print and pay for labels and postage online to save a few extra bucks (but mostly headaches at the post office) and use some self-sticking labels that fit in my printer that I got on Amazon (buy the cheapest ones, they work, I promise). I also use the flat rate packaging; almost entirely bubble mailers and medium boxes for larger orders – it’s far cheaper than USPS Priority Mail non-flat rate, UPS, and FedEx. There is literally 0 reasonable competition here now that insurance is free.
However, when someone buys a virtual product (like The Dynamic Pitcher), I had to write some code that created a user account on the membership site which grants them access to eBooks, videos, and streaming information. I wrote a createaccount.php file on my server that basically takes query strings via GET and calls wp_create_user() with that information. To ping createaccount.php, I modified the thankyou.php file in WooCommerce (not the best practice, I know). This file is called when a user completes a successful checkout and provides the page with a list of order information. If the order contains The Dynamic Pitcher that was successfully paid for, I then cURL the createaccount.php file with the relevant GET options (email, username, password) and create an account on the paid membership site.
On the membership site, I installed a WP plugin that allows people to login using their email address instead of a username to avoid username collisions (giving them a de facto WP username of ‘user’ + a lot of random digits).
Here’s some example code that I added to the thankyou.php page (product_id = ‘999’ would be for The Dynamic Pitcher).
$email = $order->billing_email;
$ordArray = $order->get_items();
foreach ($ordArray as $key => $value)
if ($value["product_id"] == '999')
$ch = curl_init();
$rndusername = [random user name generator code goes here];
curl_setopt($ch, CURLOPT_URL, "http://www.accountserver.com/createaccount.php?user=".urlencode($rndusername).
curl_setopt($ch, CURLOPT_HEADER, 0);
Of course, createaccount.php returns nothing to the browser but has some error handling to fire off events/emails in case of issues.
The back-end of The Dynamic Pitcher is a membership-based site that gives clients access to eBook + video downloads, streaming information, and other paid information. OptimizePress also handles this side of the business… sort of.
Actually running a membership site is not simple. First of all, the shop logic above was fairly complicated! Secondly, managing users isn’t trivial. We’re using WordPress for this, but there exist more robust (read: expensive) options that work a bit better.
Given a one-time pass to access the membership page, WordPress + OptimizePress works fairly well. For a monthly recurring billing membership, I’m not sure I’d use this system, though it could be developed using those tools + the Stripe subscription plugin (or hand-coded stuff around it).
Products – eBook, Videos, Stuff
The Dynamic Pitcher eBooks were straightforward enough – I used Microsoft Word plus a template from 48HourBooks (when I thought it was going to be a self-published print version that wasn’t going to be on CreateSpace) and simply saved them to PDF.
I created MOBI/Kindle versions using tools to convert from PDF to MOBI format, which didn’t work perfectly, but weren’t bad considering 99.99% of eBook authors are too lazy to even do that and just ship off PDF files.
Videos were shot using a Sony Handycam 1080p camcorder which stored files in an asinine MTS format, which was really stupid. I downconverted them to DVD quality format using Freemake Video Converter and also used that program to cut the files – works really well!
The videos and eBooks were stored in three locations for redundancy purposes and different streaming purposes. They are:
- Amazon S3 – Used as the secondary download server (bandwidth costs $$$) but primary streaming server (fast, fast, fast – worth the price)
- Digital Ocean – Used as the primary download server (high monthly bandwidth on a mostly idle server) and will be the failover for the streaming server. Awesome VPSes using SSDs that are very inexpensive! (Sign up using my affiliate link if you are interested – I get a few bucks in credit that helps me keep the servers paid for.)
- Site5 – My current hosting provider that I’ve been with for 6 years now, not meant for hosting files but is a last-resort option
All of my WP sites are hosted on Site5, which is an awesome shared/VPS/cloud hosting provider. I’ve been with them forever and I’ll never leave them – their support is top-notch. Though the monthly prices for shared hosting aren’t rock-bottom and are probably slightly higher than average, the support and the custom skin of cPanel is totally worth it. I’m on a grandfathered plan that has tons of options, free SSL, free dedicated IP, and stuff that isn’t available for anyone else, so I’m sticking with them for a long time. Still, if you need managed VPS solutions, I’d strongly advise looking at them. (For unmanaged VPS, go with Digital Ocean or Linode.)
What Did I Learn?
That writing a book, shooting videos, and editing all that crap is just the tip of the iceberg! Selling stuff online with a membership portal is actually pretty damn complicated and I have NO idea how anyone would get started at a reasonable cost if they weren’t already a good coder. Though there are turnkey solutions for this kind of stuff, they’re all expensive and they all pretty much suck. Square Marketplace is the best bet, but that doesn’t solve the membership/virtual product stuff that well.
As far as marketing and long-form sales copy goes… I’ll definitely be outsourcing this to Andy Wilson in the future if I can afford it. (I have no idea how to get in touch with him unless you’re his friend, but I’m sure he’ll sound off in the comments if he is open for business.) While I’m pleased with my A/B test copies and how it all turned out, I’m sure I made plenty of mistakes and I know I didn’t do drip marketing all that well through my MailChimp account, and I need to collect leads better through my free weighted baseball eBook offering using autoresponders, and, and, and…
Normally I downplay my level of effort and have a lot of modesty (mainly because sitting in front of a damn computer isn’t that much work compared to backbreaking landscaping work; try it sometime if you don’t believe me), but this was a monumental effort that I don’t think most people can really appreciate without a solid writeup, so consider this one of my few shameless brags of the year – especially when you consider all I covered in this post was the tech side of it and not the business, video, baseball, or writing side of it…