Are there any documented best practices for in-app SaaS upgrade prompts?

I have a SaaS web app with 3 different plans. Each plan increases access to certain features or a large quantity of a particular feature. We'll call them A, B and C with C being the highest level, most expensive plan.

Currently if you are signed up for plan A you may see a location in the application that says "Upgrade your account to get access to XYZ feature" (because plan A doesn't include that feature). Clicking on that prompt takes you to the plan management view where you can see the features vs plans and upgrade if you wish.

What I'm wondering is whether the prompts on the lower plans are overwhelming the user's experience calling out things to them that they don't have access to, and wondering if there are any best practices on how to handle this?

For example if I remove the prompts completely, the user may not know that the next level plan has a feature they need and want; perhaps they cancel because of that.

Should the prompts be removed and replaced with email marketing telling the user about what they are missing out on?

Whats the best way to handle?