PayPal Missed Billing Cycles

I’ve been using s2member with PayPal Pro for years now. Recently, I’ve noticed that subscriptions are set to stop collecting after two missed billing cycles. Given that I sell monthly, quarterly and annual subs, this means users can theoretically get a full year without paying.

How do I change the “stop collecting after x missed billing cycles” to be 1 rather than 2, please? (And sincere apologies if this has been asked/answered elsewhere, or if it’s really straightforward: I couldn’t see anything in the s2member options)


I don’t think that’s the best solution.

Sadly it’s something I asked for (instant demotion when payment fails). Ideally we’d like our sites to demote users when their payments fail, right away or after a set interval with a notification to the user (24 hours is reasonable, but we should be able to set that).

The collection limit should be set to zero, so PayPal continues trying to collect every five days from everybody that owes you, instead of suspending the process.

Right now I have to do all that manually. Once I receive the “you didn’t get your payment” I demote the user manually.

When PayPal suspends the subscription I have to open their recurring profile and re-activate their account there, so PayPal continues trying to collect indefinitely. I recovered tons of users this way, otherwise you’re “soft cancelling” them if they have a problem with their card for a week, a month or a few, and that can be a considerable amount of lost revenue.

Additionally, it would be nice if s2Member reupgraded those users upon late payment. When I demote a user they are made aware they must contact me if a late payment happens so I can reupgrade them manually as well, but that’s not the best solution, of course.

I wish @clavaque has time to overhaul this part of the plugin sometime soon, since at least on my end it’s the area that is more concerning since I started using it two years ago and I am not technically qualified to build something to fix it, sadly (I should be able to learn, but my brain is fried and I could not concentrate enough to learn enough basic php to do it).

Yes best would be to demote on missed payments, then upgrade again later. Right now it’s demoting after the 3rd failure, so usually 2-4 weeks. When PayPal tries again is an algo.

Its not after 2 missed cycles. I have complained about this already 10 years ago…

1 Like

When setting up a subscription within PayPal, it is possible to define the number of missed cycles, but in s2member it is not.

It feels like this is “simply” (and I appreciate things are rarely as simple as first meets the eye) a case of an additional parameter.


If that’s the case, could I hire a developer to add this function? What unforeseen side effects am I overlooking?

No you cannot change that parameter on subscription creation. At least it used to be impossible.

Where did you see this “Demote after 0 missed billing cycles”?? Did you add that option yourself to illustrate?

And yes, it would be awesome to have this solution implemented. If a payment doesn’t go through the user should be demoted (set EOT and give us the option to choose how much do we want to give them, I usually do it manually and give them 25+ hours otherwise the message saying they’re losing access isn’t sent), receive the email saying they’re losing / lost access.

Right now I know the plugin ignores those events and @clavaque is aware of the issue and even gave me some advice on the hooks I’d be able to use to code a solution, but I don’t know php and I end up working “an hour” per day, every day, checking user by user when I receive emails from PayPal letting me know a payment was declined. My site is too small and I can’t afford hiring someone to develop a solution, sadly, and I didn’t get to learn enough to be able to code it myself just yet or hack the code (I tried to change the code directly but I could not make it work).

Another problem is the plugin creates subscriptions where there’s only 2 tries of collection after the payment fails on PayPal. I don’t want PayPal to stop trying to collect from those users ever, so I have to open PayPal and unsuspend users manually there as well.

I guess the plugin uses PayPal suspension to demote, which is wrong. The ideal solution would be to demote upon payment failure but let PayPal keep trying to collect.

It would also be nice to use PayPal’s API to try to collect manually all pending payments, since that’s something I have to do manually too (you shake the “bad subscribers tree” every now and then and you collect a couple of payments each time :laughing:). Sorry if I sound stingy but I am too small and each subscription counts.

Don’t try to collect missed payments for too long. I did that once manually and many people then did credit card chargebacks.
They are in the wrong, but chargebacks are too expensive to risk this. And with digital products, PayPal doesn’t really let you as a seller win a chargeback.

But yes S2 acts stupid here. It should demote and reactivate, at least after second missed try. First missed try is fair to give user chance to correct it.

But yeah such things should be configurable. The current mechanism is annoying.

Plus you misunderstood, demote after missed billing cycles is always 0. You have to set it to one if a user asks you to reactivate an account if for example after 2 months he updates his credit card. Missed means all tries failed and PayPal suspended the subscription. You reactivate and set it to 1.

Interesting. You should not be charged any fee when there’s a chargeback, you usually lose paypal fees and they take your money back, but when there’s no reason paypal usually settles in your favor.

I don’t have expensive subscriptions, though, maybe that’s why?

I don’t think it should even allow a first missed try since the second try only happens five days after the first. That’s way too long (20% of a month) and we should have a way to choose the desired behavior. I prefer to demote users a few hours later, but first send a notification they’re losing access within a few hours.

When users care about their subscription they get back to you in less than 8 hours, from my experience. If they don’t you’re 99% sure they won’t deal with it and you’re just letting them access your content for free meanwhile.

Once they lose access, when paypal collects later on, they don’t notify you the payment went through, but then the user usually is pretty efficient reminding you they paid and didn’t get their access restored :joy:

About that last paragraph that’s not my experience. The system acts in favor of the subscriber, not us.

Payment doesn’t go through, user continues active on your site. Paypal tries to collect only once more, only 5 days later.

Second try 5 days later, success means things continue to work, failure means only then the user is demoted on your site. PayPal stops collecting and also suspends the user profile.

The ideal behavior would be for the plugin to set EOT right on the first payment failure to a determined time frame we set up in the plugin (I like 25 hours, plus dunning message sent right away warning the user is being demoted). Paypal should continue to collect even if it’s unsuccessful 5 days later until the end of time and the user profile should NOT be suspended on PayPal.

I recovered MANY subscriptions this way (collecting for weeks or even months). Sadly I have to do all that manually. :grimacing:

Oh, and if you let them, many will churn the hell of their subscriptions making use of those extended “free” intervals. I won’t get into details but I am sure you know how they can game the system to get a sweet discount while making you work a lot by having to update their subscriptions frequently (another thing the way I work prevents).

If you sell virtual products, like a membership papyal is not accepting proof of login or similar as proof. So credit card chargebacks are lost and PayPal adds like 20 euro handling fee. They started doing so 2-3 years ago. It maybe different per country.

On the other hand I wind every single customer complaint. But credit card chargeback 1/10 PayPal is willing to drop the charge. That’s it.