Paid Memberships Pro works great with Stripe and it is our most recommended gateway when the option is available. In the Stripe dashboard, you will notice that they have a way to create “Products” and “Coupons” that can be applied to customers and customer subscriptions. These are really useful features, but PMPro doesn’t use them how you might expect.

Continue reading to understand more about how we integrate with Stripe Products, Trials, and Coupons.

First, we don’t integrate with Stripe coupons at all.

The “Discount Codes” that you can create in your PMPro site under Memberships > Settings are only managed in the WP/PMPro side of things. We do not mirror the discount codes in Stripe. Instead, when a user checks out on your site using a discount code, we adjust the pricing before sending the charge or subscription request to Stripe. Refer to this documentation for more help setting up a discount code in PMPro.

How We Integrate with Stripe Products

Every time someone checks out on your site, we create a brand new product (formerly called a “plan” in Stripe). We adjust the pricing of the plan based on the price the member should pay at checkout. This includes any price adjustments for discount codes, other Add Ons, or custom code. We pass the custom product (plan) to the Stripe API to set up a subscription. Once that is done, we delete the plan we created. This doesn’t delete the subscription for the customer, but it does keep all of these custom one-time-use plans from littering up your Stripe dashboard. We used to delete the plan after it was created but as of version 2.1 of PMPro we are no longer deleting the plan.

Why does PMPro create custom “Products” in Stripe?

Creating the product through the API gives us greater flexibility over the price and other settings of a subscription. This method also allows our Add Ons and custom code to adjust the subscription pricing at checkout, which many membership sites need to do.

This approach also makes the code more similar to how we handle subscriptions in other gateways, which allows us to avoid a certain amount of custom code just to support the Stripe API.

The downside to this approach is that you cannot take advantage of some of the advanced reporting Stripe has for Products and Coupons. You can’t glance in Stripe and see how many people signed up for your “Gold Level” product because to Stripe it looks like everyone gets their own plan. Hopefully the PMPro reports make up for this.

About “Trials” in Stripe

For each subscription, you may see that customer is labeled as “trialing” until their next payment date. The “trial” status in Stripe just means that their first subscription payment has not been billed yet.

When your Paid Memberships Pro checkout processes a payment through Stripe for a recurring membership, you will see a one-time payment and a new subscription. The subscription will be labeled “trialing” until the next (first) date the subscription process. This allows you to charge a specific amount at checkout and also create the recurring payment.

For more information about our Stripe integration, please read the gateway documentation page here.

Tagged . Bookmark the . Last updated: . Titled

Comments (69)

I’m using Pmpro plugin by selecting stripe as payment gateway. but I did not find how can I save customer cards detail so that next time he does not need to fill the all fields. Please suggest..

Hello, the customer’s account details are saved in Stripe and not on your site. A workaround would be to set your membership levels as recurring, then the user wouldn’t have to fill out the checkout form when they renew.

We do not currently offer SEPA payments, however the new way we integrate with Stripe will make adding this as an additional payment option more straightforward. Thank you for your interest in this gateway.

1. How does PMP handle recurring subscriptions with Stripe in terms of renewals? Does the renewal happen on the WP side, or the Stripe side? I want it to happen on the Stripe side, to take advantage of their features like renewal reminders. Also, I have an inherent distrust of renewals being fully reliable on the WP side.

2. In PMP, is it possible to setup a feature where I can set a USD cost for one item, a CAD cost for another, a GBP rate for another, a AUD, and NZD cost for yet others? I don’t want there to be a switch to switch prices. I want separate pages for each of these, as I’m catering to different markets, and the prices would not exact match over anyway. (I will use some type of plugin to show the AUD page only in Australia, the USD page only in the US, the CAD page only in Canada.

Thank you for your help!

Hi there, if the credit card payment fails on a subscription membership, do the notifications about payment/billing failure come from system or Stripe or both?


We had levels configured with some initial + recurrent prices. no problem so far.

Yesturday, we had to change the prices of all our levels so we did it from the admin.

But it seems that all the existing stripe subsriptions have not been changed ?

Is it normal ? how to change the old stripe subsriptions to match the new level’s prices ??


Hi Manu,

This is normal, only future signups will be placed on the new pricing. There is no real quick and easy way to change existing subscriptions to the new price but if you get in touch with us on the Member Support Forums we can have a look at this for you.

We have a lot of customers where prices are not correct since this level’s prices update.
Our buisness is actually broken.

Actually we’re not premium so we’ll have to pay to rget in touch with the support

“get in touch with us on the Member Support Forums we can have a look at this for you”

Does this means the support will find a way to update all the Stripe subscriptions ??
It’s not even possible to change an active subscription manually in Stripe ! the only way to do this is to use the Stripe API.

We are eventually ok to pay your premium pmpro plan if you confirm that support can handle this automatically with some php wordpress + stripe API php code ?

Thx in advance for your answer

Hi Manu,

Thanks for additional information.

You mentioned “We have a lot of customers where prices are not correct since this level’s prices update.
Our business is actually broken.”

Existing members price/subscription should not have been affected when you changed the membership price of the level. Only new signups should be charged the new price of the level and all older members should have just continued to be charged the original price until its time for the membership expires and they need to renew it. Since this seems like it is not the case, our support engineers will need to take a closer look in order to see what could be causing this.

Regarding the request to change the price of the membership subscription and add all members to the new price, I believe our support engineers may have a script that can potentially do change over members to a new membership price. However, it is important to keep in mind that we always try to help our members where we can with writing up custom code gists and implementing them but if this customization work falls outside of our support scope, we will recommend getting in touch with a developer.

So specifically in your case, should you decide to sign up, our support engineers will gladly take a look and see what needs to be done to help you with this issue and your request to change members over to the new membership pricing but if the work included falls outside of our support scope, they will recommend that you reach out to a developer. In this case, you can either reach out to a developer and continue to be a Plus member or take us up on our 30 Day, full money back guarantee.

Hope this makes sense. Let me know if you have any further questions.

Hi there. I have created a yearly membership level and (to my knowledge) set it up correctly on PMP. However, a payment came through for this to our Stripe account, but there it doesn’t say anything about the fact that it should expire at the end of one year, or that it should request a recurring payment after each year. Do I have to create the plans separately on Stripe? And how can I sync the membership on PMP and Stripe? Surely I don’t have to go to Stripe each time a payment comes through, and assign the new member to the appropriate plan on Stripe manually?

I have a regular membership fee of $150 but I want to set up a discount code for first 3 years where members pay $75 for the first 3 years and regular price of $150 after that. So I set up a recurring subscription with an initial payment of $75 with billing amount of $75 with billing cycle limit of 2.

So my question is, what happens after 2 billing cycles (or 3 years in total) are completed?

Does their membership expire? Do they automatically get charged $150 (which was my intention)? Or they don’t get charged anything and continue to be members.

I guess I just want clarity what “billing cycle limit” means?

Is there a better way to achieve what I wanted to achieve?

Can you please tell me if a recurring discount code will last the life of the membership or is it just for the second payment? The wording in the backend is a bit unclear. What I need to achieve is a regular price on the front end of $30/month with a discount code that will make the first and every subsequent recurring charge $15/month until the customer decides to cancel. Thank you.

The pricing on a discount code completely overrides the membership level’s pricing. So if you set a code to $30 initial payment and $15 per month they user will be charged $15/mo ongoing.

Thank you for your reply! It sounds like it does what I need, but I’d like to make sure I’m completely clear if that’s ok.

Membership level 1 $30/mth
Membership level 2 $300/yr
Discount 1 = $15/mth initial and recurring
Discount 2 = $150/yr initial and recurring

So, customer 1 selects Membership level 1 and using discount 1 will only ever get charged $15/mth for as long as they want until they cancel.

And customer 2 selects Membership level 2 and uses discount 2 so they will only ever get charged $150/yr now and forever until they cancel.

Customer 3 selects Membership level 1 with no discount so they get charged $30/mth now and forever until they cancel.

Customer 4 selects Membership level 2 with no discount so they get charged $300/yr now and forever until they cancel.

Is that all correct? Thanks for your patience. 🙂

Yes this is all correct – the user can enter the discount code on the checkout page or you can send direct links including the discount code in the format checkoutpageurl/?level=LEVELID&discount_code=CODEHERE

Oh my goodness, I didn’t know that! Thank you so much for your reply and confirming things for me. Super excited to get this live, we’re so close

For some reason PMPro changed all my client subscriptions and reoccurring payments to not paying on the 10th this month. Now I cant change this back so I’m creating new subscriptions on stripe. Is there a way to change it back for the clients from the PMPro side of things?

Unfortunately this isn’t an error I have seen before. We would need to help you troubleshoot and resolve as part of our members support. If you would like assistance with your issue please consider a support membership.

In the new Stripe dashboard, you click on the “Webhooks” link in the left sidebar menu. Then click the “Settings” link. Then click “+ Add Endpoint”. Paste in the URL. Make sure to choose live/test based on what you need and make sure to add one for live after you’re done testing.

Hi, could anybody tell me if your stripe addon can handle only credit card payments or all the new payment services like, giropay and SEPA direct debit, too?

Hi, I have a problem. I set up a website with woocommerce, pmpro for woocommerce and pmpro. It was supposed to charge a membership fee and $5 dollars monthly after that. It does everything but it does not charge the $5 monthly. I am using stripe with montly subscription. It does not give me any errors. It just not charging the $5 monthly. Can u help?

If your members are checking out on the WooCommerce checkout page, you’ll need a WC addon like WC Subscriptions to handle recurring orders.

If you have users checkout with the PMPro checkout page, then recurring should work.

Hi Jason, Am I understand this thread correctly in that Stripe integration with Paid Memberships Pro allows recurring payments? When I select Billing Cycle Limit to ensure a customer only gets billed 2 more times after the initial payment I get a message that says “Stripe integration currently does not support billing limits”. If I set an Membership Expiration date my thought is it will terminate the membership at that date. I’m just looking to collect 2 additional payments after the initial payment.

Correct. There are a couple of ways to do billing limits like this with Stripe. If you post to the member forums and mention that I sent you from this comment, we’ll help you to get something working on your site. Roughly a couple methods are:

(1) Use code like this ( to put members into a “Paid” level with the same access but no subscription after their membership expires. You’ll want to check that they have 3 paid orders first in case they cancelled early. You might want to also edit or adjust the expiration email to just say their subscription is paid in full and their membership will remain.

(2) Hook into pmpro_order_added to check if a user has X paid orders and then cancel their subscription. Make sure that if you have code running on the pmpro_stripe_subscription_deleted hook that it checks if the user’s membership should be cancelled or not.

Hey Jason, when we set up a “subscription” in PMPro do they just automatically get billed on the reoccuring subscription through stripe? Since we are setting this up for the first time we want to make sure we are communicating to our users correctly.

Yes. If your level has a billing amount (e.g. $x per 1 month) and DOESN’T have an expiration date, then users will be billed automatically by Stripe each month. Stripe sends a message to the webhook then, that will create an order in PMPro and send users an email about the order.

PMPro stats are almost all way off and incorrect so not having Stripe plans really sucks. There is no place to get accurate number of paying users, MRR, churn, etc. especially since we use PayPal as well.

We’re aware of the bad numbers and it’s something we’re working on. What are the most important numbers you need? How are your levels setup? Then we can keep you in mind to make sure the reports work best for you.

Thanks for replying Kimberly. Would be great to have all of the Memberships Stats showing correct values. The Visits, Views and Logins and Sales and Revenue are less important, we have those stats elsewhere. If we just used Stripe, we would get complete stats with Baremetrics or another Stripe SaaS dashboard but there isn’t one that supports PayPal so I am relying on the PMPro stats to show correct combined stats.

We only have one version of Paid Memberships Pro.

1. Activate Paid Memberships Pro.

2. (Configure it, etc)

3. Go to Memberships –> Discount Codes to add a discount code for your memberships.

Similar to Stripe, it does not integrate with any “coupons” on the PayPal side. All of the computation and tracking is done on the WP side.

If you’d like to get on a call to go over what changes you’d like, we can probably do that and get them done as part of a little help here project:

If you want the popup style Stripe checkout, we can’t do that. Although I’ve heard of people doing that with PMPro. I haven’t personally done it and am not sure how long it would take. Not sure if that is what you meant.

Jason, normally yes I would say, ok let your software do all the great work of keeping track of and billing people and reminding people when their card has expired etc.. for subscriptions, but… for a few reasons we would like to use the stripe code directly, and therefore the “subscriptions” would live in Stripe vs living in our/your wordpress. Is this possible?

Great program. I want to have a professional level membership with membership costs but be able to (1) offer a discount code that wipes the entire cost from the level; (2) have a second discount code or even a third and fourth level discount that steps the membership costs down to another discount level. What is the best way to arrange this? I set up an initial professional membership and charged my on card to see if it worked. It shows the charge is pending, but hasn’t clear yet. (Believe it will, but at full cost.) Thanks for your anticipated answer.

You can add the discount codes via Memberships –> Discount Codes in the dashboard. Then direct your members to the checkout page the level. The discount codes page in the dashboard shows links to the checkout page with &discount_code=XXX in it that applies the discount codes. So you members can checkout at those links to get the new prices.

If I missed something, please post to the member forums and we can follow up.

Is there anyway to get the more typical Stripe popup when one goes to buy, allowing the user to fill out there info in the popup as opposed to using the payment fields from PMPro Membership?

It should be possible with some development, but I haven’t looked into it. My guess is it would be hard to do if you were using any other addons/custom code that adjusted the membership price/etc. But if you had simple $x/month type levels you wouldn’t have to worry about that.

first great product. I wanted to be clear on the way subscription plans work between PMP and Stripe. If I create a subscription plan in the stripe dashboard, that is recurring, PMP has no way to pass the plan name/id so that it maps the customer to the plan? If there is a way, do I need to add the plan info to the hidden fields in the form info that gets passed to stripe? Thanks In Advance

PMPro doesn’t use the plans in the Stripe dashboard. It creates new plans on the fly for each checkout, adds them to the customer as a subscription, and then deletes the plan (so it doesn’t litter up the list of plans in Stripe).

Is it possible to create memberships into a website with PMPro from another worpdress installation? A kind of API or plugin to connect both websites?


We’ve done this custom for another client. I’ll see if I can get some of that code onto GitHub. Ultimate, it would have to be custom coded for the two sites that are integrating and there are a lot of connection points where things can go wrong obviously.

The basic way we did it before was to use a custom built “single sign on” (SSO) — this is the code I’d like to open source — plugin that would allow people to login/register for site B using the user/pass from site A. We then used the PMPro XMLRPC API methods to get the user’s level and sync levels across sites.

Thank you very much for such detailed reply. 🙂

We are considering to just keep everythin on one site and simplify everything, but it is great to be able to study the possibilities for the future.

We will have a look to that code for sure. Thanks again.

Hi Jason,

Does PMPro work well with recurring payments on Stripe? Unfortunately, I cannot get it to work and I get a message saying that billing limits cannot be setup and recurring payments won’t work.

Thanks for your time,

Billing limits are not supported by Stripe (i.e. bill $10 per month for 6 months). Sometimes using an expiration date on the membership level can do what you need. Recurring payments are supported. If you are getting an error around recurring payments, please post to our member forums.

Can you be more clear on how someone could set this up? There is very little documentation available about recurring memberships with stripe.

In PMPro, you would just check the “recurring” option on the edit level page. Then set the amount and period. This post is more technical about how we integrate, but for most users you should just be able to let PMPro do it’s thing… and maybe just realize that the “plans” and “coupons” features on the Stripe side aren’t used the same way as if you created a membership directly in Stripe.

” Sometimes using an expiration date on the membership level can do what you need. ” how do you do that? what if i want to set 6 months .. how do i set todays date + 6 months?

I am not seeing recurring payments at all… if I set an expiration date the account does get cancelled…if I set it without one and

(checked) Check if this level has a recurring subscription payment.

then the user is billed once and gets infinite access without further payments…

I have been testing for days using the Daily option and always the same…

the web hook is configured on Stripe and it is in testing mode. Please advise.

Can you share a screenshot of your level’s pricing setup via email? You can send it as an attachment to We may be able to figure out the issue when viewing that screenshot. If you would like our support in resolving this issue for your site please join as a Plus member and open a support ticket.

Leave a Reply

For faster support related to issues on your specific site please open a ticket in our members support area.

Your email address will not be published. Required fields are marked *