Automatically Generated Free Subscription?

I have a web app based on the freemium business model, each subscription is done monthly. However, I’m not quite sure how to handle the free subscriptions.

The paid ones are simple enough. The user pays, and a subscription with a start and end date is assigned. But there’s also a free plan, and I’m not sure what to do with it. I was thinking of auto generating the free subscription each month, basically assigning it to the user without charging for it, but I don’t know the best way to proceed. I’d rather not use cron jobs because I would have to query the database regularly (like, every 5 minutes or so), and I’d also rather not use some other in-app user event, because those may not happen and the subscription won’t be generated, or if I check for ALL user interactions, it will be too heavy, with each event triggering a query to check if a new sub is needed.

The other option was to NOT have a subscription, and just use non-subscriptions as the “free version”, however, without a strict start and end date I would not be able to limit the user’s activities within the free monthly package. Ex: The user has a total of 150 things he can do per month. After that, he will be charged for any extra.

I can’t just count each month individually either (As in, check all of January, then all of February, etc.), since a user may register at the very end of one and get 150 activities, and as soon as the next month starts, he would get another 150, hence I need a start and end date to measure all of this.

I’m kinda lost, and some suggestions could help a lot.