Since I've seen a lot of push back when enforcing this policy, here's my rule of thumb (so I don't have to repeat it every time someone questions the policy):
If the OP would consider their question answered by a link to a product, then it's likely shopping advice and I'll close it.
If the question is about what type of tools and materials would solve a problem, then I would consider it on topic. If someone needs a "thingamajig" and just didn't know that's what they were called, or that "thingamajigs" are made for their problem, then it's on topic. If someone wants to know who makes a particular "thingamajig" and where they can find one, that's off topic. If you need a "thingamajig" that has some specific capabilities that you can't find anywhere, then it's off topic.
Common complaints on this policy include "there are old questions that are shopping questions" and "there are answers that include product links". For old questions, we don't retroactively enforce these policies. So a lot of questions were asked while the site was still determining what our scope was and would no longer be on topic if asked today. And for answers, if the product link is supporting the rest of the answer, and not an explicit product recommendation (spam), then that's allowed. My line is drawn not when answers include a product, but when questions are asking for a product.
I also frequently get asked to consider reopening a question after the OP rewords their question to not directly ask for a product, but where a link to a product would still be the best answer for them. Removing details and rephrasing things to avoid asking your actual question are the exact opposite purposes of the edit link, and so I typically ignore those requests. Very rarely do I reopen a "shop for me" question after it's been edited, since unlike ambiguous questions where added detail can save a question, or overly localized questions where they can be rephrased to apply to a greater audience, shopping questions can't be edited to be a better shopping question that would then be on topic.