Max number of monthly downloads

Hello. I don’t know if this would be the best way, but it’s the first that came to my mind.

I’m assuming that you will have a custom field in your database for downloads that is connected to your users.

Each time a user clicks a download button, you would need to write a function that checks that field per your criteria and increments OR blocks the download accordingly
ex. if user has less than 20 in the downloads field, allow download and increase count by 1

Then to reset the counters/db field on a schedule, you could write a job that queries all your members and resets the counter to 0 at the beginning of each month.