LinkedIn Outbound That Doesn't Read Like Spam
Reference something real before you ever mention what you sell

Research Before You Write a Single Word
60-90 seconds of profile reading buys you a 10x better reply rate
Before sending anything, spend a minute on the prospect's profile looking for one of three things: a post they published in the last 30 days, a recent job change or promotion, or a company announcement (funding, launch, hire). Any one of these gives you a genuine, specific reason to reach out today rather than any other day.
Skip prospects where you can't find any of the three. It's tempting to message everyone on your list, but a message with nothing specific to reference falls back into generic-template territory no matter how it's worded. A smaller list of well-researched messages consistently outperforms a larger list of generic ones.
Keep a simple running note (even a spreadsheet column) of what you found for each prospect. It becomes the opening line of your message and, if they don't reply the first time, gives you a natural, non-repetitive reason to follow up two weeks later.
LinkedIn Opener Writer
Act as my outbound copywriter. Here's what I found on this prospect's profile: [paste the specific post, role change, or company announcement you found]. Here's what I do: [one sentence about your product/service and who it's for]. Write me 3 opening messages for a LinkedIn connection request or DM, each using this structure: (1) one sentence referencing what I found, specific enough that it couldn't be copy-pasted to anyone else, (2) one sentence bridging naturally to why I'm reaching out, without pitching, and (3) a low-commitment question instead of a meeting ask. Keep each version under 50 words, conversational, and free of sales language like "I help companies like yours" or "circle back."