10 Popular Pricing Models for Membership Sites

As you begin to build a membership or subscription business online, one of the first decisions you need to consider is pricing. More specifically, what type of pricing model do you want to use for your business?

This post aims to cover the most popular pricing models for membership-type businesses.

  1. Fixed Term Membership
  2. Recurring Subscriptions with Fixed Price per Period
  3. Front-loaded Membership Pricing
  4. Installment Plans
  5. Free or Reduced-rate Trial Periods
  6. Lifetime Membership
  7. Group Pricing / Sponsored Membership / Umbrella Plans
  8. Addon Pricing Models
  9. Utility Pricing
  10. Donations or “Pay What You Want” Membership


Remember: Price should always match the value.

Before you even begin to drool over the idea of hordes of members paying you a recurring fee each week or month, ask yourself how your membership business delivers value to its members. Is value delivered evenly over the lifetime of membership? Is the majority of value delivered in the first months of membership?

The answer to this basic question is what determines how you price your membership options. Pricing your membership or subscription options in a way that is contrary to the value delivered is a set up for failure—you do not want members to stop and ask themselves, “Hey, why am I still paying for this?” That’s a sure way to create a bad feeling and lose members.

If you’d like to read more about this topic, Jason wrote a post earlier all about this that included some case studies.

Here’s another way to think about value pricing: how much do you want to make?

Now this may seem like a silly question, the answer to which is “As much as I can possibly make!” But if you are truly honest with yourself, you should be able to set a realistic revenue target or goal. Using this revenue target, you can back into membership pricing (and possibly even refine your business model).

For example, let’s say you set a revenue target at $30,000 per month. This could be achieved via several pricing models:

  • 750 members paying you $10/week.
  • 1,000 members paying you $30/month.
  • 835 or so new members per month committed to paying you $36/year.

Which of these is most achievable given the premise of your membership site? How can you deliver value along the timeline of your membership to retain these members? Is it possible for you to grow to a member base of this size?

If you’re still thinking about pricing from this high level, you might want to read Jason’s series on pricing that starts here before diving into the details below.

If you have an idea of the type of pricing you want or otherwise just want to browse through the options below, continue reading. Here are some common pricing models we have seen used for member-based businesses.


Fixed Term Membership

In this pricing model, the membership level has a set term with expiration. Members must renew to maintain membership. We often see this pricing model used for set term of the calendar year (January 1 to December 31). This is a comment pricing model for traditional Associations and Organizations as well as benefactor groups that report membership on an annual basis and require people to “renew” that term each year.

You can do some creative things with this pricing model, such as offer a discount for early renewal, a discount for purchase a multi-year membership in advance, or even prorate membership for people who sign up mid-term.

For more reading on this model, see:


Recurring Subscriptions with Fixed Price per Period

This is a very popular model of membership pricing, where a specific price is charged “per month” or “per year” for the life of membership. Most payment gateways also allow pricing per week or custom periods like every 3 months, every 60 days, etc.

Recurring subscriptions work well for newsletter-based businesses, sites with content written by “experts” or coaches, as well as online social communities and listings sites.

The important caveat to this type of membership pricing is that you continue to deliver value each term. If your members are paying you monthly, you better be certain that there is “new stuff” (good new stuff) delivered to the member each month.

This model is very easy to set up with the base Paid Memberships Pro plugin. You would achieve this by setting an initial payment and recurring subscription of the term of your membership.


Front-loaded Membership Pricing

Jason is a fan of front-loaded pricing models—where a higher amount is charged at signup, then a lower rate is charged each term. This can be a single up front higher cost, or an installment (i.e. $100 per month for the first 3 months then $15 per month).

This is a key model to consider if your answer to when value is delivered is “mostly in the first few months” (or weeks). I see this pricing model for health and fitness sites aimed at weight loss or a software businesses with a “get started” rate then maintenance rate.

For more reading on this model, see:


Installment Plans

Installment plans are a bit like the front-loaded membership, but they do not have the ongoing recurring payment. This model is useful if you need to charge a high price but know that your customers cannot afford that large expense in one payment. I have seen this model used for executive coaching, training programs, and the sale of physical goods.

This model is very easy to set up with the base Paid Memberships Pro plugin. You would achieve this by setting an initial payment and recurring payment of the term of your membership, with a “payment limit”. You can optionally set an expiration date on membership as well. Let me break this down for a membership level that you want to charge $400 for over the course of 4 months and maintain the user’s membership for 1 total year.

  • Initial Payment: $100
  • Recurring Subscription: $100 per 1 month
  • Billing Cycle Limit: 3
  • Expires in: 1 Year

One caveat of an installment plan is that you want to lock a member in to paying for the full installment. If you’ve giving a customer a $400 physical product, and they cancel membership in the second month, you’re out a big chunk of money. See this guide for help on locking a user from changing their level during the installment period: Methods to Block Users from Logging In, Selecting or Changing Membership


Free or Reduced-rate Trial Periods

We aren’t a big fan of this pricing model, but it is one you see a lot in the wild. [Jason: I’m a fan of free trials if your goal is to get more people using your service or product. When you’re actually ready to make a profit, switching to a model that charges based on true value of your product up front is best in my opinion.]

In general, the free trial model charges a lower rate for the first few terms of membership, hoping to hook the customer into maintaining their membership after the trial ends. I have see this model used in a lot of online software and tools, but also for “subscription boxes” (get your first box – just pay shipping!), and other digital communication or financial tools.

In all of these cases, its important to remember that you must prove the worth of your full price membership during the trial period. You don’t want to price yourself so high that people aren’t able to maintain membership at the full rate, and you don’t want to deliver all the value of membership during the trial so there’s no reason for them to stay on.

If you’re a fan of the membership trial model, we strongly suggest offering a reduced rate trial instead of a completely free trial. This forces your members to be a bit committed to your product and can help insulate you from the workload created by loads of free trial members that never really intended to stick around.

For more reading on this model, see:


Lifetime Membership

You can add a “lifetime” option to almost any pricing model you select. Sometimes a reduced-price lifetime plan is offered for a limited time as an incentive for early adopters. Sometimes the lifetime plan is always available for customers who just want to pay once without worrying about recurring subscriptions.

To figure out what to charge for your lifetime plan, you would take some multiple of your monthly membership, perhaps 30x a monthly membership or 2.5x an annual membership rate. Ideally, your lifetime plans should result in the same “customer lifetime value” as someone paying per period. So having a good estimate of your renewal rates and customer lifetime value will help you to find the sweet spot.

Sometimes a higher-priced lifetime plan can be used as a decoy and will not be selected by a significant number of people, but will make your regular price look like a better deal. We’ve heard from some sites with lower-volume, higher-priced lifetime plans report that “every once in a while you get a little bonus when someone chooses the lifetime option”.

This model is very easy to set up with the base Paid Memberships Pro plugin. You would achieve this by simply setting an one-time initial payment on the membership level with no recurring subscription or expiration.


Group Pricing / Sponsored Membership / Umbrella Plans

This model is useful when you have a breakdown of individual members as well as corporate or company-type members. For this model, you would take your individual member pricing and offer a value to the parent account that is purchasing more than one membership at a time for a team of people. For example, you could offer a single membership for $125 per month and then a group license of $500 for a 5-member organization.

For more reading on this model, see:


Addon Pricing Models

In this “build your own” membership model, users may be charged a base price, then have the option to select additional membership features. These features may be added interest groups for a newsletter or blog category subscription, or a la carte features of membership, such as an annual resume review service, a consultation phone call or other “one-off” products. We have seen this model used for traditional newspapers that offer an online and optional physical printed edition.

For more reading on this model, see:


Utility Pricing

In this pricing model, users are charged based on some kind of consumption metric. You may recognize this model as used by most email marketing services that charge based on number of members in your list. Cloud hosting companies might charge based on the disk space and/or bandwidth used.

We wanted to include this pricing model even though Paid Memberships Pro doesn’t offer utility pricing in the core plugin or any of our add ons. It can be a smart model if the cost to you as a business is truly based on a member’s usage. Some gateways like Stripe and Braintree allow you to adjust a user’s subscription amount whenever you like. Others like PayPal offer changes within a certain range. With some custom coding, you could track the metric you need to calculate the monthly/annual total, generate an order for that, and then attempt to resolve that order against the customers credit card stored at the gateway.


Donations or “Pay What You Want” Membership

If you go the route of a donation-based membership, its best to enter into things with low expectations. These types of membership sites are often run by producers who would be doing their thing regardless of payment. If you’re a passionate product reviewer or write your own digital music and just want to get your stuff out there, then asking for optional donations can be a positive way to make a modest income without the pressure of a traditional membership model.

We like the “Pay What You Want” model, especially if you put some social pressure on your potential members: “Most people pay $5 per month.” Another option is to include bonuses above a certain amount to encourage higher revenue per sale.

For more reading on this model, see:


Now put on your thinking cap.

I hope this post has exposed some of the traditional and not-so-traditioanl ways you can price your new membership or subscription-based business. And don’t feel shy about changing a pricing model for an existing business—we did that here at Paid Memberships Pro when we really did some thinking about value pricing. The majority of our value is delivered in the first few months of membership, when the support customer is just getting their membership business off the ground. We offer a discounted annual renewal rate because there is ongoing value delivered via our blog posts, code recipes, and continued development to the Plus Add Ons.

Let’s keep the conversation going in the comments below.


Other Posts on Pricing

How to Set up a Data Backup Process for your WordPress Membership Site

The last thing any website owner wants to deal with is lost website data. This is particularly important for a membership site, where revenue is directly generated online. Keeping up to date backups of your website’s data is not as difficult as you may think. This post covers that often overlooked but highly important topic: data backups, but more specifically:


Your WordPress database contains every post, every comment and every link you have on your blog. If your database gets erased or corrupted, you stand to lose everything you have written. There are many reasons why this could happen and not all are things you can control. With a proper backup of your WordPress database and files, you can quickly restore things back to normal.
via WordPress.org

First, ask yourself “What is my current backup process?”

If the answer to this question is “I have no idea”, you really need this post. Most people aren’t aware of their backup process (or lack of one) until they experience a devastating loss of data. You don’t want to be in that position – so put a solid process in place now.

If you have some process in place, great job! You’re probably 90% ahead of most websites we work with. But be sure to also test recovering from a backup every once in a while to make sure that your backup is actually working.

I’m interested to learn any unique insights you have about your backup process in the comments below.


What to Back Up

Your WordPress website is powered by two key components: your site’s MySQL database and the files in your site’s web folder. Both components should be backed up and both offer unique backup options.

If you store protected files or video outside of your “web root folder” or on a third party service like Amazon S3, make sure that those files are also being backed up.

Depending on the size of your website and number of plugins installed, the database and files may be over 1GB of data. If this is the case, take a look at your data and see what information could be excluded from the regular backup process. Also, make sure that you are not including your backup archives in an automated backup (this would happen if you are storing a copy of your backup in the web root folder, and the backup process includes the entire web root folder).


Where to Back Up

We advise backing up in three or more distinct places. You can store a backup on your membership site’s web server, on a totally separate web server or cloud environment, emailed to a “backups” email account, as well as local copies saved to your computer, a local server, and physically saved to external media (DVD, external hard drive, flash drive).

wp-backup-infographic


When to Back Up

Depending on how frequently you update your site, it may be important to perform a data backup on a weekly or even daily process.

Since you are running a membership site, you are managing all of the key data that synchronizes the member subscriptions from the payment gateway. Losing this data would cause a huge headache and may require you to piece together weeks or months of data manually. No thank you!

We recommend setting up a more frequent automatic backup process (daily) as well as a weekly or monthly manual backup. Pick a day, put it on your calendar, and do it. Once the process is in place it will be a quick step in your workflow providing invaluable piece of mind.


  1. Option 1: Host Backups

    Your host is (or should be) mirroring your site across a few data centers. This is one small level of data assurance but not a replacement for a true backup plan. This only insulates you from your host losing your website data, not from data corruption, a virus or malware injection, or the administrator that accidentally deletes all or some of your site data (true story).

    Depending on your web hosting company, there may be a simple way to create a data backup, either via a web tool installed in your WordPress admin, or directly within your hosting account dashboard. These one-click backups can often be downloaded or emailed to you for the local/physical backup copy I discussed above.

    It’s important to make sure that this one-click backup is including BOTH your site files and the MySQL database for your WordPress site. I suggest exploring your host’s support library or contacting them directly to better understand your backup options.

    Here are some backup processes for commonly used WordPress hosts:
    WP Engine | SiteGround | Bluehost | Pagely


  2. Option 2: Direct File Transfer + Manual Database Backup

    This requires a bit more developer experience, but the basic concept is that you are manually downloading the web server files and creating a direct backup of the MySQL database via phpMyAdmin.

    Files Backup

    Connect to your web server and simply download the entire folder via FTP. Or, if you have SSH access, you can use the command line to create a .zip backup of the entire website files on the server. We create this .zip file and name it according to the date the backup was taken. A copy of that .zip file remains on the server in a “backups” folder, and a copy of the .zip file is downloaded locally to our computer and saved to external media.

    If your web root folder is called public_html, you could use these commands to make a backup. Note that we backup * (all files) and also list .htaccess separately. Because this is a hidden file, the zip command will ignore it unless you specify it like this. If you have any special caching or rewrite rules in your .htaccess file, you will need these to restore your site 100%.

    To download the .zip file, just navigate to the folder and file name in your web browser. (i.e. http://www.YOURDOMAIN.com/backup.zip)

    Be sure to delete the backup.zip file or move it out of the web root after you download to keep others from stumbling upon it.


    Database Backup

    Access your website’s control panel or web hosting admin. From here, you should be able to access your site’s MySQL database via phpMyAdmin. (You can alternately use the Adminer plugin by Inpsyde to access your MySQL database directly through your WordPress admin.

    Click the “Export” tab. We recommend the following settings:

    phpmyadmin_export_settings

    If you database isn’t too large, you can also use the plugin WP DB Backup for an on-demand backup of your WordPress database. The backup file created by this plugin is saved in your site’s /wp-content/ folder or you can download the backup file for a local copy (we recommend doing both). Backups of large databases can be slow no matter what method you are using, but because of the way WP DB Backup works, we’ve found it to be especially slow for very large databases. You can usually just leaving it running for a while in a background tab of your browser if you find this is the case.

    Database Backup From the Command Line

    You can use the mysqldump command to create a backup of your database from the linux command line. If you grab the database name, username, and password from your wp-config.php file, you can then use the following commands.

    I have this saved as a shell script outside of my web root folder and run the script before any update or risky change to the site.


  3. Option 3: WordPress Site Backup Services

    These third-party backup services offer many features related to file backups (themes, plugins, uploads), database backup, site cloning/migration, as well as optional spam security, automated restore points, and support should you find yourself in a data-loss pickle.

    The features vary by company and price, so I’d encourage you to explore the options below when making your decision. These are some of the most widely used options available:


  4. Bonus #4: Restoring From a Backup and Testing Recovery

    If you run a website for any number of years, the chances are you are going to have to restore from a backup at some point. Stuff happens.

    But, even if your site is running flawlessly and you never have experienced a data loss, you should still test restoring from a backup to make sure that your backup is actually working.

    To restore your site, you will need both the backup of the files and the database. Exactly how to restore your site by creating a “dev” or “staging” site will depend on your specific DNS and hosting setup, but here are the rough steps.

    1. Ideally, create a subdomain for your test site, like test.mysite.com or staging.mysite.com. If you can’t create a new subdomain, you can create a subfolder on your existing site like mysite.com/test/.
    2. Create a new database for the test site. Import your database backup.
    3. Upload the zip file of your files backup to the server and then unzip them.
    4. Edit the wp-config.php file in your test site to change the database name, username, and password and any other settings that might need to be updated.
    5. Edit your .htaccess if needed.
    6. If doing a test (vs an actual restore on the same domain) use a script like searchreplacedb2 to change instances of your domain in the database to the domain of the test site.

    Special Notes on Staging Sites with Paid Memberships Pro

    Please note that staging sites are still real websites that might interact with your customers directly or indirectly. Emails initiated on your test site will get sent to real email addresses. If you cancel a PMPro membership on the staging site, your members will get an email, and PMPro will try to cancel the subscription at the gateway and/or the user’s subscription to your mailing list at Mailchimp/etc.

    Additionally, plugins like Paid Memberships Pro perform certain actions like expirations and subscription synching every night as a “WP Cron” process. If you make an exact copy of your live site to a staging site, your staging site will also run these scripts at night. It is important to disable these services using something like our PMPro Toolkit addon or disable your staging site after testing (by deleting it or maybe adding break; to the top of your .htaccess file) to keep these scripts from running. The PMPro Toolkit addon specifically stops PMPro related scripts, but other plugins may still be running scripts of their own.

    Staging sites can also be an attack vector for malware and viruses if they are left online and not updated regularly like your main site. So be sure to either delete your staging site when you are finished with it, set up a plugin like Coming Soon Page & Maintenance Mode by SeedProd, or keep it up to date like any other WordPress site.


Now go make a backup! Then, design and initiate your backup process.

The easiest first step is to choose one of the methods above and create your first backup. Once you have done that you will get a feel for how the selected method works for you, your skill set, and your workflow. There is no one “right” answer here, just the very wrong answer of doing nothing at all.

I hope that the backup process you select on easily fits within your week-to-week (or day-to-day) business. Post a comment below if you have more to add or a questions about any of the methods outlined above.

How to enable debugging on your WordPress site.

Enable Debugging on Your WordPress SiteIs your site no longer working? Has your WordPress site been replaced with a blank white screen, the infamous White Screen of Death? Maybe you are experiencing styling issues, your footer is not loading correctly, or you are having a tough time checking out of your site. This is not unique to Paid Memberships Pro and can occur on any website, using any theme or any plugin(s). Knowing what is causing the problem can give you or a developer the relevant information needed to help fix these issues.

Whatever the reason, this article will explain how to enable debugging mode in WordPress to uncover any PHP errors or warning messages that are on your site.


Turning WP_DEBUG Mode on.

WP_DEBUG is a PHP constant (a permanent global variable) that can be used to trigger the “debug” mode throughout WordPress. It is assumed to be false by default and is usually set to true in the wp-config.php file on development copies of WordPress.”  WP DEBUG, WordPress Codex

  1. Before getting started you will need to be able to access your WordPress site files by means of an FTP Client or your website’s control panel.
  2. To turn WP_Debug mode on, navigate to your wp-config.php file (found in your WordPress install directory), edit the file using a text editor of your choice. Once the file is open, search for the following line of code define( 'WP_DEBUG', false ); and change the value from false to true. If you do not find the WP_DEBUG line of code in your wp-config.php file, you can simply add it toward the bottom of the file. It is usually placed below the table prefix, but certainly above the /* That's all, stop editing! Happy blogging. */ line.

With WP_DEBUG turned on, errors will be displayed right on your homepage, so your site may appear broken (or more broken). Copy the entire error message down to share with the support team or developer working on your site.

Fatal Error Example

To hide the errors again, change WP_DEBUG mode back to false. It is often acceptable to turn on WP_DEBUG, navigate to your site and copy the error, and finally navigate back to your wp-config.php file and turn off WP_DEBUG. When dealing with a live site, any visitors who were browsing your site would be interrupted by the error/message notification. It’s important to hide those errors again as quickly as possible or use the instructions below to send the errors to a log file that only you can see.


Turning off errors that would otherwise display on-screen.

By default, WP_DEBUG will display all errors and notification to your screen. This is not ideal in many cases as the notification/errors will replace the actual webpages of your site with the error messages. To stop errors and messages from displaying on your screen, you can add the following line of code to your wp-config.php file, just under the WP_DEBUG line: define( 'WP_DEBUG_DISPLAY', false )

With this constant set to false, errors are not displayed on screen but are still saved to your web server’s PHP error log. You can set a specific error log for WordPress errors using the steps below.


Making a Debug log file.

Along with WP_DEBUG, you can use WP_DEBUG_LOG , this will save all errors and notifications to a debug.log file that you can use as a reference of any errors/php notifications. You can also use this file to send to any developer or support engineer who is working on your site. In the event that there were no errors found, a debug.log file will not be created.

Simply add the following line of code to your wp-config.php file under the other WP_DEBUG constants: define( 'WP_DEBUG_LOG', true )

Accessing the Debug.log File

Once you have added the define( 'WP_DEBUG_DISPLAY', false ) line of code to your wp-config.php file , you will find the debug.log by navigating to your wp-content folder found in the WordPress install directory. You will need to access this part of your website by using a FTP client or through your websites control manager.

Important: Once done with your debug.log file, disable WP_DEBUG mode and delete the debug.log file from your site immediately. Not doing so may result in compromising the security of your site or exposing sensitive information to unwanted parties.

 


What it looks like all together.

Now that you have added all the lines of code to your wp-config.php file, you should have something similar to the below coding example:


WordPress Debugging – Summarized

  1. Login to your site via FTP or your host’s File Manager.
  2. Navigate to your WordPress install directory and enter it (usually public_html or www).
  3. Find the wp-config.php file and edit with a text editor of your choice. Some popular text editors to use are: Atom, Sublime 3 and PHPStorm
  4. Search the file for the following line of code: define( ‘WP_DEBUG’, false );
  5. Change this value from false to true. This will now output errors to your site by displaying them right on your homepage, so instead of your site you will see any underlying errors. To get your website back, change WP_DEBUG mode back to false.
  6. Directly below this you can enter two new lines of code to send errors to a log file:
    • define( ‘WP_DEBUG_DISPLAY’, false );
    • define( ‘WP_DEBUG_LOG’, true );
  7. Save your file and re-upload to the same directory – overwrite the file when prompted. (Do not close your FTP client just yet).
  8. Go back to your website using your browser and recreate the issue.
  9. Head back on over to your FTP client and navigate to wp-content and expand the folder, your debug.log file will be loaded into this directory if there are any PHP errors.
  10. Download the debug.log file. Feel free to send this log file onto your support engineer.
  11. For a more detailed guide on debugging in WordPress, have look at the WordPress codex.

This looks tough – I need help.

If you are uncomfortable editing your wp-config.php file or are otherwise having trouble following these instructions, reach out to your hosting company for help. You can ask them the following in a support ticket or through email:

Can you tell me how to find the PHP error log for my website at example.com and send me a list of the last 20 errors that have occurred?

Exactly how to access error logs varies depending on your host and server setup. Any good host should be able to respond to request above.

If you would like our help fixing a PMPro-related error on your site, we have a team of Support Engineers that are equipped to help you with your debugging questions. Feel free to get in touch with our team over on our Members Support Forum.

Access to Member Support Forums requires a PMPro Plus Account or higher.

View Membership Options

Use WooCommerce to Sell Memberships with Your Payment Gateway of Choice

One of the biggest requests we receive from our members and users alike is “I would like to use [insert payment gateway name]. Do you have an integration for it and if not can you develop it for me?”


Truth be told there are a myriad of payment gateways out there, and as much as we would like to have an integration for each and every gateway available, it is just not possible to do so (yet). So, now what? You desperately want to use Paid Memberships Pro but your payment gateway is not supported. You’re stuck.

Or are you?


The “Woo-karound”

If the payment gateway that you would like to use has a WooCommerce Integration developed for it, you’re in luck. One possible solution could be to use WooCommerce, our WooCommerce Integration and your payment gateway’s WooCommerce integration. This allows you to sell a PMPro Membership as a WooCommerce Product and let WooCommerce handle the checkout of your membership level using your payment gateway of choice.


Getting Setup

Below is a brief guide on how to set this up:

  1. Install and activate WooCommerce on your site. The primary WooCommerce plugin is free via the WordPress repository.
  2. Set up your chosen payment gateway in your WooCommerce Setup. You may need to purchase a premium gateway extension from WooCommerce.
  3. Install and activate our WooCommerce Integration on your site. This PMPro WooCommerce Add On is free via the WordPress repository.
  4. Set up your membership levels to be sold as Products. Have a look at the “Membership Products” section of the Add On page for more details.
  5. Let WooCommerce handle the checkout process instead of Paid Memberships Pro.

Note that using the WooCommerce Integration to sell memberships as products only requires adding Membership levels with their name and (if desired) category restrictions. None of the level pricing, page setup, or payment settings are needed. If you want to handle recurring payments using this method, you will need to use WooCommerce Subscriptions along with this integration.

This won’t work for me. Now what?

Perhaps, this workaround is not going to work for you. If that is the case maybe some of these alternatives might do the trick!

  1. Adding a New Gateway documentation (Warning: Not for the faint of heart!) – It is recommended that you are an experienced code wrangler if you decide to take this project on.
  2. Find a Developer to help. We have some experienced WordPress/Paid Memberships Pro Partner developers that you can get in touch with that will happily give you an estimate on integrating your Payment Gateway for you. Simply open up a developer request and one of our developer partners will get in touch with you.

Make the Most of Your Ad Space with Level Specific Ads Targeting

Advertisements are a classic method of monetizing your website, and ad-serving networks such as Google Adsense make it fast and easy to start displaying ads.

It’s important for a membership site to consider which ads to display for non-members, per-level or completely hidden to members for an “ad-free” experience. Read on to explore how to control ads for your PMPro-powered membership site.


Considering Ads for a Membership Site

Your site’s membership is often the most lucrative product sold through your website. That said, ads can still be a component of your revenue stream if you make smart choices about ad placement for free members and site visitors.

With the methods outlined below, you can target which ads display to which users. This unlocks a unique opportunity to target your ads for each membership level, not only to hide ads for members, but to show premium ads with exclusive partner offers to your paid members.


Ad Networks, Affiliate Ads, and Direct Ad Sales

The simplest way to insert ads is via an ad network. These services connect advertisers with sites that want to make money by displaying ads. You’ll be provided with a script or other integration method to dynamically embed third-party ads on your site. Some popular ad networks that you may be familiar with include Google Adsense, Facebook Audience Network, and Amazon a9.

Alternatives to an ad network include affiliate networks or direct ad sales. For this case, you would be obtain ads (graphics, links and promos) directly through company’s affiliate program or via a service such as ShareASale or CJ Affiliate. These methods take a bit more time to set up and manage, but generally offer a higher commission than an ad network.

Option 1: The pmpro_displayAds() Function

This PHP function checks against the “Hide Ads from Non-Members” settings under Memberships > Advanced Settings. It allows you to wrap and insert ad blocks that will load based on how you have configured the admin setting.

if(pmpro_displayAds())
{
//insert ad code here
}

Option 2: The [membership] Shortcode

If you are inserting ad blocks into posts or pages, you can simply use the shortcode to wrap your inserted content. Using this method, the ads will only be shown to the specified visitors or members.

View Shortcode Documentation

Option 3: The pmpro_hasMembershipLevel() Function

This PHP function allows you to check whether a user has any membership level or a specific membership level. You can then insert your ad blocks wrapped in the appropriate conditional check to achieve the desired result.

View Function Documentation

Option 4: Using Advanced Ads Pro

Advanced Ads Pro has just released a native integration for Paid Membership Pro. You can now target ads on your membership site in relation to the membership level of your visitors.

View Premium Plugin

Option 5: Integrating with Other Ads Plugins for WordPress

Many ads plugins for WordPress make use of shortcodes to allow you to insert the “ad block” into your content, then manage the content of the ad in a central place. In most cases you can use these shortcodes in combination with the shortcode method outlined above.

Alternately, I have seen ads plugins that offer ads widgets. You can use these plugins in combination with the hide widgets for members recipe outlined in this post.

Lastly, if your ads plugin automatically inserts ads on pages or posts, please post a topic on our support forum (Plus or Unlimited membership required) and we can help you locate available filters in your plugin to conditionally display ads based on membership status.

Setting up a Developer Account to Test Your Payment Gateway

Using Paid Memberships Pro in your selected payment gateway’s “testing/sandbox” mode allows you to test membership checkout without processing real payments. Sandbox mode requires unique credentials that vary based on the active payment gateway.

This post covers how to set up your test or sandbox account so that you can run tests on a membership checkout.


Testing your Payment Gateway.

Technically, all you need to do to start accepting payments on your site is sign up for a payment gateway and paste the appropriate API information into the Memberships > Payment Settings page in the WordPress admin of your site.

However, taking some time out to test your payment gateway first will not only give you peace of mind that the gateway is properly set up and ready to start receiving payments but it also gives you a good idea of how the gateway works and whether or not this gateway will be right for you and your members.


Setup Example: Stripe

Setting up a Stripe testing account is really quite simple. All you need to do is navigate to the Stripe Registration page, fill in the appropriate fields and click on the “Create your Stripe Account”.

Once your account is set up , you will be redirected to your Stripe Dashboard and an email will be sent to you asking you to verify your email address. Your Stripe testing account is now set up and you are (almost) ready to start testing it out on your website.

Note – in order to start using this account to accept actual payments, you will need to “Activate your account” from within the Stripe Dashboard.


Adding the test API keys to your website.

To add the relevant Stripe API keys to your website, you will need to navigate to the “API” tab in your Stripe Dashboard and copy both the “Publishable” and “Secret” API key and paste them into your Paid Memberships Pro payment gateway settings. This can be found by navigating to your WordPress Dashboard > Memberships > Payment Settings.

Note: Remember to set the payment gateway in your payment settings to Stripe and your “Gateway Environment” to “Sandbox/Testing”.

Once you have added your API keys, save your settings.


Processing a test checkout.

It is now time to do a test checkout. Log out of your website completely and proceed to purchase a membership level just as one of your potential customers would. You should eventually be redirected to your checkout page.

Fill out the checkout form as a normal user would and when you get to the “Payment Information” section, you will need to input a Stripe Testing Card number in order to process the test payment. If you do not use a Stripe testing card, you will receive a “Your card number is incorrect” error message.


Back to the Stripe Dashboard.

Once you have successfully processed the membership checkout, you will be able to navigate back to your Stripe Dashboard and see the test data as if it was an actual user who checked out of your site. Feel free to browse through the different menu options to get an overall feel for how this payment gateway works. The more you explore the gateway’s capabilities and limitations, the better idea you will have of whether or not a payment gateway will work for you.


Time to go live.

When you have done enough testing and you are now ready change over to a live environment, make sure that you change your “Gateway Environment” to “Live/Production” and complete the fields with your gateway’s appropriate information.

If you have not yet activated your Stripe account, you will need to do this before you can get your “Live” API keys. Live payments cannot be processed if your integration is still using your test API keys. Once you paste in your live API keys, save your changes.


Some useful links to get you started.

How to Respond to a Chargeback or Dispute

This post covers some methods to deal with chargebacks – when a member disputes their charge for membership.

In some cases, a chargeback is actually fraud, whether it is a stolen credit card or PayPal account login. What I’d like to talk about now is a misuse of chargebacks: when a member is grumpy or lying about payment fraud just to get their money back.


What are chargebacks and disputes?

A chargeback or payment dispute is when a customer denies the payment.

Even if you offer a refund policy, there will be some number of customers that decide to simply call their bank and initiate a dispute. This could be because of (actual) fraud, dissatisfaction with their purchase, or they are just a despicable person who got their goods and don’t want to pay for it.

Your merchant account or payment gateway will let you know that someone is disputing a payment. You will then have a window of time to respond to the dispute and “make your case” for why the chargeback is not valid. If the chargeback is not ruled in your favor, the value of the disputed transaction as well as a merchant or gateway-imposed “fee” will be deducted from your account. See Chargeback Fees by Gateway »

First, locate the user’s membership account and disputed order.

My first step when dealing with a chargeback is to locate the user’s membership information and get some background.

  1. Go to Memberships > Orders in the WordPress admin.
  2. Search for the disputed order using the gateway’s “transaction ID”, or the “Invoice ID” on the order.
  3. If you don’t have a transaction ID, you can try searching for the user by Name or Email Address (the data you get about a dispute varies by gateway).
  4. Open the user’s profile in a new tab.
  5. Open the disputed order in the current tab.

Now, be an investigator.

In most cases, a membership site is a “virtual product”. This makes disputing a chargeback a bit more difficult—how do you prove you delivered what they have purchased?

  • Search your email program to see if the user had communicated anything with you directly, either prior to purchase or after.
  • If your membership site has any engagement methods, such as a forum or comment forms, see if the user has participated in these things.
  • Do you have an email newsletter? If so, access the user’s record in the email marketing tool you use to see if they have opened your messages.

    That’s a pretty high engagement rate for someone who “hasn’t received” my product.
  • You can also use the Visits, Views and Logins Report under Memberships > Reports to present activity for the individual user. Have they been logged in and using your site?
  • Better yet, if you are using the Better Login, View, Visits Report, you will have even more data about the user’s activity on your site.

    Wow, sure looks like you have been using your membership?!

Was it actual fraud?

If your investigating makes you 99% sure it was a stolen payment method used for purchase, just accept the dispute. It stinks. You’ll pay a fee. But it was actually fraud, and you don’t really have any recourse for this case.

You can prevent some fraudulent charges using the methods outlined in this post.


It isn’t fraud – I want to fight this dispute!

If your investigating leads you to believe this person just wants their money back, you should respond to the dispute and make a case for why it isn’t a fraudulent purchase.

 
Before I begin the process of fighting a dispute, I always email the member directly. I’ll ask them to withdraw the dispute and communicate that I will refund their money [how-to].

This never works. Most often I get no reply. But occasionally, I’ll get a weird reply like “I just didn’t have enough money so I said this was fraud.” Luckily, you can use this in fighting your dispute, so even if they don’t withdraw their dispute, you’ve gotten some more ammunition to win your case.


Responding to a Dispute

The method to respond to a dispute varies by gateway, but in general you will be asked to write a statement and provide supporting documents about the purchase. In the case of a physical good, they will ask for proof of shipment (and you may even have proof of delivery depending on the shipment method).

For all other purchases (digital goods, downloads, access, subscriptions, etc.), proving that the charge was not fraudulent is a little more involved.

First, write a statement that clearly describes the situation:

This user purchased a membership that includes access to a private forum. The user participated in several discussions as well as personal email communication with me. Please refer to the included documents with proof of these interactions.

Additionally, I am including files that show all details this user entered when creating their membership. Their name and email address as communicated to me matches that on the dispute and the payment method used.


Then, take screenshots and create PDFs of EVERYTHING

The supporting documents I generally include are:

  • A PDF “print” of the user record in the WordPress dashboard.
  • A copy of the membership confirmation email I receive as admin when they made purchase.
  • Copies of any direct communication they made with me.
  • Copies of any proof of participation on my site (comments, forum replies, contact form submissions, etc.)
  • A copy of the email marketing service’s details about their email opens.
  • A copy of your refund policy, if offered, that would show they had another method to get their money back.

Now you wait.

After submitting your evidence, the payment gateway or merchant will communicate with the user’s bank to make your case. This can take anywhere from a week to two months.

I hope the dispute is sided in your favor!


In most cases, the seller will lose the dispute.

The person filing the dispute has far more protections in place than you. And in most cases they are being defended by a credit card company fully motivated to make them happy. Even when your payment gateway does their part in presenting your evidence, more often then not the seller will lose the dispute, pay the fee, and have the funds returned to the buyer.

There is some comfort in knowing that you did your best to provide honest information about the charge and to defend yourself from this type of abuse. I’m sorry you didn’t win.


What’s next?

When you lose a dispute, make sure you remove the membership level for the user. And if you are feeling particularly upset about it, you can use one of these methods to block users from logging in, selecting or changing membership.

You can even write them a really nasty email. Just don’t send it. Just go read Jason’s post on dealing with hate.

How to Process a Refund

Refunds are an unavoidable part of your membership business. Even if you clearly state that you do not offer refunds for membership, there will be people who dispute a charge via their bank or PayPal. Read this post for more information about how to design your membership site’s refund policy.

Here’s how we process refunds in order to maintain good data in our membership reports.

pmpro_refund_order


1. Locate the Member Record

If the membership is still active, you can search for the member under Memberships > Members List. I generally enter the account email address to locate the record.

If membership is cancelled (the member already cancelled their membership via the “Membership Cancel” page), the member will show up in the Members List by selecting “Old Members” from the “Show” dropdown.

pmpro_members_list-old-members


2. Edit the Member

  1. In the Members List, click the member’s username to be taken to the “Edit User” admin page.
  2. pmpro_edit_user_membership_levelScroll to the “Membership” section and change the “Current Level” to “None” (or another default “Free” level if applicable for your site).
  3. Additional settings in this section include:
    • Expires: Change this field to set a different expiration date or set to “No”.
    • Send the user an email about this change: Optionally send the “Admin Change” email to the user after updating.
    • Cancel this user’s subscription at the gateway: Checking this box will cancel the recurring portion (if applicable) with the gateway. This is important to check if your are canceling the member and there is an active subscription with your gateway!
  4. Click “Update User”.

After clicking “Update User”, the membership is updated, the member is notified (if selected) and the subscription is cancelled at the gateway (if selected). Now to actually process the refund.


3. Update the Order and Refund at the Gateway

If you are using the Member History Add On, you will see a list of all invoices for the member directly on the Edit User page. This makes the refund process a lot simpler, so I strongly suggest using this add on.

  1. Locate the Order to refund. This is the last order in the “Member History” section of the User Profile. Or, navigate to Membership > Orders and search for the user.
  2. Click the “Invoice ID” to view the Order.
  3. Scroll to “Payment Transaction ID”. This is the transaction ID you will use to look up the order in your gateway.
  4. Log in to your gateway account and search for the order. This varies based on the gateway used. Remember to check the “Gateway” field on the order if you are using the Add PayPal Express Add On in addition to another primary gateway, such as Stripe.
  5. Process the refund at the gateway. Be careful as most gateways have multiple confirmation steps to approve a refund. You may have to click “Okay” two or three times to actually process the refund.
  6. Update the Order Status. On the “Edit Order” page, update the “Status” to “Refunded”. This will ensure that your Membership Sales and Revenue reports are accurate.

What about a dispute or chargeback?

The process is fairly similar for a disputed charge. You can try to respond to cases via the gateway or resolve the dispute directly with the member.

But when these efforts fail and you are forced to accept a dispute, go through the same process above:

  • Edit the user’s membership to “None”.
  • Check the box to “Cancel this user’s subscription at the gateway” if applicable.
  • Update the order to “Refunded”.

Managing Affiliates with Paid Memberships Pro

People often ask how to track affiliates with Paid Memberships Pro. Here are a few solutions we’ve helped customers get setup with. This post covers our Lightweight Affiliate Tracking Add On as well as integration with third party affiliate platforms that we support and plugins supported by the Affiliate programs directly.


Lightweight Affiliate Tracking – Paid Memberships Pro Add On

If you have a basic affiliate program requirements and only need to manage who is referring who, try our Lightweight Affiliate Tracking Add On.

You can add Affiliates manually or automatically generate them as part of their membership level. And you must run your own reports and handle payments yourself. Otherwise, it does generate an affiliate link that when used will attach any orders to that affiliate. You can give affiliates access to view their affiliate reports using the [pmpro_affiliates_report] shortcode.

View the Add On

Paid-Memberships-Pro_512x512

PMPro Plus Add Ons for Third Party Affiliate Platforms


Post Affiliate Pro

We’ve built a plugin to integrate PMPro with Post Affiliate Pro, which is a fully featured, third party affiliate service with its own fees.

Sign up or learn more about Post Affiliate Pro.

View the Add On

Post Affiliate Pro

WP Affiliate Platform

If you want an affiliate solution that is completely integrated with WordPress, WP Affiliate Platform may be the solution for you.

Sign up or learn more about WP Affiliate Platform.

View the Add On

WP Affiliate Platform

Other Third Party Affiliate Platform Integrations


AffiliateWP

AffiliateWP is a fully featured affiliate platform that both tracks sales and offers ways to automatically send payments.

This premium plugin supports integration with Paid Memberships Pro natively. We recommend this plugin for most people who want to run affiliate programs with WordPress and Paid Memberships Pro.

Learn More About AffiliateWP

AffiliateWP

Affiliates Manager – Paid Membership Pro Integration

When members pay for membership on your site, this addon will check to see if the member was referred to your site by an affiliate. It will then give commission to the affiliate who referred the user.

Affiliates Manager offers a PMPro integration plugin to be used alongside the Affiliates Manager plugin.

Learn More About Affiliates Manager for PMPro

Affiliates Manager - Paid Membership Pro Integration

iDevAffiliate – Paid Memberships Pro Integration

iDevAffiliate includes tracking for recurring commissions during the billing cycle and automatic completion of the commissioning process when the subscription is cancelled.

The third-party platform offers native support for Paid Memberships Pro.

Learn More About iDev Affiliate

iDevAffiliate

Testing Your Membership Checkout Process in Development or Sandbox Mode with Integrated Payment Gateways

pmpro_testing-sandbox-membership-checkoutHere are instructions for running a membership checkout test for each of our payment gateway integrations.

These instructions are to be used in place of a “live” test, where you actually pay yourself then refund your transaction.

You can run test on the sandbox first, but we also recommend testing the live environment before going live. Sometimes the sandbox environment isn’t 100% the same as the live environment, either due to configuration differences or because the environments are just subtly different.


Before you do this…

Note that setting your Payment Gateway to “Sandbox/Testing” mode will apply to all visitors that access your site, so I only suggest doing this in a few cases:

In addition to the gateway-specific tests below, you can also set your Paid Memberships Pro plugin to a generic “Testing Only” mode, that will allow you to run through a membership checkout simply by completing all required fields (you don’t need to enter a valid credit card number).


Stripe

Testing a Stripe checkout simply requires you to change some settings in your membership site’s WordPress admin and to use specific testing card numbers provided by Stripe.

  1. Navigate to Memberships > Payment Settings page.
  2. Set your “Payment Gateway” to “Stripe” and set the “Gateway Environment” to “Sandbox/Testing”.
  3. Then, enter the appropriate Stripe API keys for your “Test Secret Key” and “Test Publishable Key”.

After saving the settings, log out or browse to your membership levels page in incognito mode to test checkout for a paid level. Stripe’s testing documentation page has test card numbers you can use for checkout. Use any valid future expiration date, any 3 digit CVV (or 4 digits for Amex) and the test card number below:

Number Card type
Visa 4242424242424242
MasterCard 5555555555554444
American Express 378282246310005
Discover 6011111111111117

PayPal Express, Standard or Website Payments Pro

To test a PayPal checkout, you will need to set up a PayPal Developer account. If you already have a PayPal Developer account, log in to that account via the link above before running a test checkout.

  1. Log in to your PayPal Developer account.
  2. Create Sandbox Test Accounts per PayPal’s documentation.
  3. Navigate to the Memberships > Payment Settings page of your WordPress site.
  4. Set your “Payment Gateway” to the PayPal option you would like to use.
  5. Set the “Gateway Environment” to “Sandbox/Testing”.

After saving the settings, log out or browse to your membership levels page in incognito mode to test checkout for a paid level. You must use a Sandbox Test Account as set up in your PayPal Developer account in order to run the test.

For more information, visit PayPal’s Sandbox Testing Guide.


Authorize.net

Using the Authorize.net Sandbox allows you to simulate the production environment where no actual card processing is performed. You will need to set up a sandbox account with Authorize.net and enter separate “sandbox” credentials for Authorize.net.

  1. Log in to your Authorize.net Sandbox account.
  2. Navigate to the Memberships > Payment Settings page of your WordPress site.
  3. Set your “Payment Gateway” to “Authorize.net”.
  4. Set the “Gateway Environment” to “Sandbox/Testing”.
  5. Enter your Authorize.net Sandbox account’s “Login Name” and “Transaction Key”.

After saving the settings, log out or browse to your membership levels page in incognito mode to test checkout for a paid level. Authorize.net’s testing documentation for page has test card numbers you can use for checkout. Use any valid future expiration date, any 3 digit CVV (or 4 digits for Amex) and the test card number below:

Number Card type
Visa 4111111111111111
MasterCard 5424000000000015
American Express 370000000000002
Discover 6011000000000012

For more information, visit Authorize.net’s Testing Guide.


Braintree

To test a membership checkout with Braintree as the gateway, you will need to set up a Braintree Sandbox account. This is an entirely separate environment from your production account, with unique login information, merchant ID and API keys.

  1. Log in to your Braintree Sandbox account.
  2. Navigate to the Memberships > Payment Settings page of your WordPress site.
  3. Set your “Payment Gateway” to “Braintree Payments”.
  4. Set the “Gateway Environment” to “Sandbox/Testing”.
  5. Enter your Braintree Sandbox account’s “Merchant ID”, “Public Key”, “Private Key”, and “Client-Side Encryption Key”.

After saving the settings, log out or browse to your membership levels page in incognito mode to test checkout for a paid level. Braintree’s testing documentation for the PHP SDK page has test card numbers you can use for checkout. Use any valid future expiration date, any 3 digit CVV (or 4 digits for Amex) and the test card number below:

Number Card type
Visa 4242424242424242
MasterCard 5555555555554444
American Express 378282246310005
Discover 6011111111111117

For more information, visit Braintree’s Testing Guide for the PHP SDK integration.


2Checkout

Testing your 2Checkout integration requires you to set up a 2Checkout sandbox account and use 2Checkout’s provided sandbox test credit card information.

  1. Log in to your 2Checkout Sandbox account.
  2. Navigate to the Memberships > Payment Settings page of your WordPress site.
  3. Set your “Payment Gateway” to “2Checkout”.
  4. Set the “Gateway Environment” to “Sandbox/Testing”.

After saving the settings, log out or browse to your membership levels page in incognito mode to test checkout for a paid level. 2Checkout’s Sandbox Test Data page has card numbers you can use for a test checkout. Use any valid future expiration date and either of the test cards below:

Number CVV
4000000000000002 123
4222222222222220 123

For more information, visit 2Checkout’s Hosted Checkout Testing documentation.


PayPal Payflow

The outstanding gateway in the mix here is our PayPal Payflow integration. In our experience, the only way to set up PayPal Payflow in a “test” mode is to create a totally separate/unique Payflow account and keep it in “trial” mode. PayPal offers this FAQ page on how do I test my integration with the Payflow Gateway? that would be the best starting point if you need to run test transactions for Payflow.