A membership-based subscription website is a great way to earn income on a recurring basis. It lets you create a predictable income source for your business and avoid getting caught in the feast and famine cycle of freelancing and project work. But as great as these websites are, when you sell anything online, you’re forced to navigate the world of subscription taxes.
In this guide, we share some basic information about subscription taxes, then explain how to calculate taxes for PMPro-powered businesses, including:
- A basic exploration of subscription tax and its challenges.
- An overview of the built-in tax tools in Paid Memberships Pro.
- The Add Ons and Payment Gateway option available to handle taxes for you.
- Finally, how to set up a custom tax structure using PMPro’s built-in tax filter.
Continue reading to learn about our automated and custom tax handling strategies, including how to leverage the pmpro_tax
filter hook and our VAT Add On for EU compliance.
Subscription Tax and Billing
Membership sites that use subscription billing face unique challenges when charging sales tax.
For starters, sales tax rules for a variety of businesses — including software and SaaS companies, membership sites, online course creators, and clubs — vary significantly by state.
On top of that, most tax rules are vague when it comes to subscriptions. Unlike a tangible good that has clear taxation laws, digital products do not have a physical good exchanging hands.
To mitigate that, the Department of Revenue in many states has modernized the definition of sales of tangible personal property to include software, courses, and club memberships. This led to a reclassification of remotely accessed software and software subscription services as taxable products.
Challenges with Subscription Tax
The challenge of “is this even a taxable subscription” isn’t the only complexity with subscription taxes.
You also have to consider where the sale took place, to charge the appropriate sales tax amount. Then, you have to consider whether you do enough business in that location to have established an economic nexus. An economic nexus is established when you make enough sales in a particular location to meet required minimums. Once you do, you’re obligated to register, collect, and remit sales tax.
The threshold differs by location. The most popular threshold is $100,000 in sales or 200 separate transactions within a calendar year period.
But it doesn’t stop there. If your business operates globally, you have to consider foreign tax regulations. For example, taxpayers in Europe have the VAT tax while customers in Australia have GST.
As you can see, sales tax information and management for subscription-based websites can get complicated pretty quickly. Once you’ve established that you are going to collect taxes, keep reading this guide to understand how to handle taxes with Paid Memberships Pro.
Built-in Taxes with PMPro
The tax fields in the Memberships > Payment Settings admin page allow you to easily setup taxes for a specific state in the United States. Here’s how it works:
- You define the state and tax rate within payment settings.
- Customers from that state pay a flat percentage rate at checkout if they have a billing address in that state.
For example, if you wanted to charge all PA customers 6%, you would set the tax state to PA and the tax rate to .06.
This approach to taxes is very limited and may not meet all the requirements you believe you need.
Other Options For Taxes in Paid Memberships Pro
Depending on your requirements and goals, here are a few other methods that PMPro supports to calculate and charge tax at checkout:
Stripe Tax for Automated Tax Handling
Businesses using Stripe Checkout can let Stripe Tax handle tax collection. Stripe Tax integrates directly with Stripe Checkout to automate the calculation of sales tax, VAT, and GST during the payment process. This integration removes the need for custom code to calculate taxes: Stripe handles the complexities of tax rates and jurisdictions for you.
Benefits of Using Stripe Tax:
- Automated Tax Calculation: Stripe Tax calculates the correct tax amount to charge based on the customer’s location, item sold, and current tax rates.
- Simplified Tax Compliance: Stripe Tax helps ensure compliance with local tax laws. The system automatically applies the correct rates and keeps up with changes in tax legislation.
Ease of Filing and Remitting Taxes: By integrating with Stripe Tax, businesses can streamline the process of filing and remitting taxes, reducing administrative burdens.
Simplifying VAT Compliance: PMPro VAT Add On
For businesses catering to customers within the European Union, managing Value-Added Tax (VAT) compliance is essential. The PMPro VAT Add On calculates and applies VAT according to the latest standards set by the European Commission.
Implementing Australian GST in Your Membership Site
For membership sites that operate in Australia, we have a companion guide on the Australian Goods and Services Tax (GST). This guide explains how to apply the 10% GST rate to your membership site.
Using Code to Set Up a Custom Tax Structure
If the no-code methods above don’t meet your needs, what can you do? PMPro includes a pmpro_tax filter hook that can add custom tax amounts to orders with PMPro.
The rest of this guide explains what the pmpro_tax
filter hook does and how to set it up to handle a custom tax structure.
Understanding Filter Hooks in WordPress
Filter hooks in WordPress allow developers to modify data before it’s used by WordPress or sent to the browser. They’re essential for customizing how content is displayed or processed.
To use a filter hook, you use the WordPress add_filter()
function, specifying the hook’s name and a function that manipulates the data. A filter hook gives developers a way to safely modify your site, without altering core plugin files.
You can see all the filter hooks in WordPress and Paid Memberships Pro here.
About the Code Recipe
The code recipe below uses the pmpro_tax
filter hook to apply region-specific taxes during the Membership Checkout process. The code performs a series of checks to apply the correct tax rate. The rate will be based on the user’s self-identified region or their billing address.
1. User Region Self-Identified at Checkout: The code adds a checkbox so users can confirm they belong to a specific region. This step is what applies the correct regional tax rate, so that users are taxed appropriately based on their location.
2. Billing Address Verification for Tax Application: Instead of a checkbox, you can cross-reference the billing address against a specific country or region. If the billing address matches the taxable region, it triggers the code to apply the corresponding tax rate. This ensures that taxes are accurately applied even if the user does not self-identify their region through the checkbox.
3. Conditional Tax Rate Application: The value of this recipe is that it conditionally applies a specific tax rate at checkout. It does this by checking two conditions:
- whether the user has self-identified as being from a certain region via the checkbox or,
- whether their billing address aligns with the targeted region.
If either condition is satisfied, the tax rate will apply to the order.
4. Updating Level Cost Text to Reflect Tax Information: Maintain transparency with your users by using the code recipe below. This code updates the level cost text on the checkout page. The message explains the tax being applied, so users are fully informed about the total charge before completing their purchase.
The Code Recipe
We have another recipe that showcases how to use the pmpro_tax hook here. This recipe is useful for sites that only want to charge tax on certain membership levels. You could also extend this code to charge a different tax rate for several states.
Adding the Recipe to Your Website
You can add this recipe to your site by creating a custom plugin or using the Code Snippets plugin available for free in the WordPress repository. Read this companion article for step-by-step directions on either method.
Conclusion
Paid Memberships Pro offers many approaches to handle taxes in your online membership business. For some sites, using a third-party tool like Stripe Tax is the right path.
For others, a custom tax structure defined using the pmpro_tax
filter hook is the right path. This hook is central to allowing region-specific taxes.
These tools are designed to help you and your tax advisors make the best choice for handling taxes in your business.
FAQs About Taxes with PMPro
Subscription tax refers to the sales tax applied to membership fees for subscription-based websites. It varies by state, country, and type of digital product or service offered.
PMPro allows you to set a flat tax rate for a specific state in the United States. You define the state and tax rate in the Memberships > Payment Settings admin page, and customers from that state are charged the specified tax rate at checkout.
The built-in tax feature is limited to flat percentage rates for specific states and may not meet all complex tax requirements, such as varying rates for different regions or types of products.
pmpro_tax
filter hook? The pmpro_tax
filter hook allows you to apply custom tax rates based on user region or billing address. You can add custom code to your site using the hook to conditionally apply specific tax rates during the Membership Checkout process.
Free Course: Membership Site Development—The Basics
Develop a deeper understanding of membership site development in this beginner-level course. Learn how to make your site work better, save yourself time and money, and improve your site's performance.