Generally, as soon as possible.
One of the top mistakes I/we made in the early days was launching only with a free version, and not adding a paid version for about 90 days.
It was a mistake because the feedback we got from the market was terrible. Free users give you wildly different feedback than paid users. Our free users wanted a ton of new features that, in the end, our paid users did not care about.
It was also a mistake because free didn’t turn out to be a real marketing strategy for us. In B2B software at least, rarely do you end up with as many free users as you think you’ll get. You also generally have to be quite viral for free to really scale in SaaS. Most apps aren’t that viral.
If your app ultimately is going to be free at a massive scale, and you are hoping to defer monetization until later, then this can make sense. This is more like a B2C play. This can work well in marketplaces, where initially taking a piece of the transaction may discourage liquidity in the marketplace.
But generally, for a “normal” B2B app, waiting to charge just defers the time when you learn what customers will actually be willing to pay for.