How to Tell Which Channel Actually Brought Your Waitlist Signups
A signup with no source attached cannot be repeated. The twenty minute setup, the UTM naming that does not turn into a mess, and the three reasons your best channel will look like direct traffic.
Posted by
Related reading
How to Scope Your MVP: What to Build First, and What to Cut
Scoping is a subtraction problem, not an addition one. The one-sentence test for what stays, the five things that always creep in, and why doing part of it by hand is a feature.
GEO for Indie Founders: Getting Cited by ChatGPT, Claude, and Perplexity
Generative engine optimization, without the hype. What actually gets a small product into AI answers, what llms.txt is really worth, and how to tell whether any of it is working.
How to Get Waitlist Signups From LinkedIn (Without Sounding Like LinkedIn)
LinkedIn can beat every other channel for a B2B waitlist, and it is the worst place to put your link. Why the feed buries external links, what to post instead, and how to write like a person there.

Forty signups is a nice number and a useless one. Without knowing where they came from you cannot repeat the thing that worked, stop doing the three things that did not, or tell whether the good week was your Reddit post or somebody quietly sharing you in a Slack group. The setup that fixes this takes about twenty minutes, and the interesting part is not the tooling. It is that your best channel will frequently show up as direct traffic, and knowing why stops you drawing the wrong conclusion from it.
Table of contents
The minimum setup
Two things, and neither needs to be sophisticated at this stage.
An analytics tool on the waitlist page. Any of them will do. The privacy-focused ones are a good default for a pre-launch page because they need no cookie banner, which means one less thing between a visitor and your form. What matters is that it reports visitors and referrers, which all of them do.
A tagged link for every place you post. This is the part people skip, and it is the part that actually answers the question. Referrer data alone will not, because a large share of your traffic arrives with no referrer at all, for reasons covered below.
What you are trying to end up with is a table like this, which is enough to run the next month on:
| Source | Visitors | Signups | Worth repeating? |
|---|---|---|---|
| Reddit post | 310 | 14 | Yes, and the comments were useful too |
| LinkedIn post | 90 | 11 | Yes. Small but the highest intent |
| Directory listings | 240 | 2 | No, not as a traffic source |
| Direct | 180 | 9 | Unknown, and that is the problem |
Those numbers are made up to show the shape. The pattern they illustrate is real and common: the channel with the most visitors is often not the channel with the most signups, and a small high-intent source can quietly outperform a big one.
UTM tags without the mess
A UTM tag is just query parameters on your link that your analytics reads. The only hard part is being consistent, becauseReddit and reddit become two different rows and your report turns to soup within a fortnight.
Pick lowercase, no spaces, and stick to it. Two parameters are enough for a pre-launch page: where it came from, and which specific post.
https://yoursite.com/w/your-page?utm_source=reddit&utm_campaign=sideproject-oct https://yoursite.com/w/your-page?utm_source=linkedin&utm_campaign=invoice-post https://yoursite.com/w/your-page?utm_source=hn&utm_campaign=show-hn https://yoursite.com/w/your-page?utm_source=newsletter&utm_campaign=issue-4
Two practical notes. Keep a plain text file of the links you have handed out, because in three weeks you will not remember whatcampaign=oct2 referred to. And do not tag a link you are pasting into a conversation as a human being; a tracking-laden URL in a genuine reply looks like marketing and reads as one.
Why your best channel looks like direct traffic
Every founder eventually stares at a large "direct" row and concludes that people are typing their URL from memory. Almost nobody is. Direct is where attribution goes when the referrer is stripped, and there are three common causes worth knowing because each one changes what you should conclude.
- Someone shared you privately. A link pasted into Slack, WhatsApp, or a DM usually arrives with no referrer. This is the good kind of direct traffic and it is invisible by design. If your direct row grows after a post, the post worked harder than it looks.
- An assistant recommended you. A growing share of people ask an AI which tool to use, get a name, and then visit directly, often days later. The click never carries a source. If you have been doing the work in generative engine optimization, this row is where it shows up, and it shows up late.
- The platform stripped it. In-app browsers and some link handling remove referrer information. Your tagged link survives this, which is exactly why tagging beats relying on referrers.
The practical response is not to fix it, because you cannot. It is to stop treating direct as a channel and start treating it as a delayed echo of whatever you did last. Watch whether it rises in the week after activity, rather than trying to attribute it.
Just ask them
The most accurate attribution available to a small product is a question on the signup form. "How did you hear about this?" recovers exactly the traffic that analytics cannot see, because the person answering is the only one who knows they came from a Slack group.
The trade is real and worth stating. Every question you add to a form costs you some signups, and this one costs more than most because it is about you rather than about them. Two ways to handle it:
- If you can only ask one question, ask what they use today. That tells you whether they have the problem, which matters more than knowing which post they clicked, for the reasons in why nobody is joining your waitlist.
- If you can ask two, add the source question as optional free text rather than a dropdown. Dropdowns force people into your categories and you lose the answer you did not think of, which is usually the interesting one.
Free text answers are messier to read and much more informative. "A friend who has the same problem sent it" is worth more than a row in a chart.
Turning it into a decision
Measurement that does not change what you do next week is a hobby. Three rules make it a decision.
Count in hours, not clicks. The relevant cost is your time. A directory listing that took five minutes and produced two signups is a better deal than a post that took three hours and produced eight. Rank channels by signups per hour spent and the picture usually changes.
Judge on signups, not visitors. A channel sending large numbers of people who never sign up is telling you the audience is wrong, not that you need more of it. That is the difference between a traffic problem and an audience problem.
Give a channel three attempts before deciding. One post is a coin flip. Your first attempt anywhere is also your worst, because you have not learned the room yet. Three genuine attempts, then stop or double down.
Then narrow. The founders who get to a few hundred signups usually do so from one channel they got good at, not five they dabbled in. The four worth trying are covered in the guides for Reddit, LinkedIn, Hacker News, and X.
Frequently asked questions
Do I need Google Analytics for this?
No. For a single page with one conversion, a lightweight analytics tool answers every question here with less setup and no cookie banner. Reach for something heavier when you have an app with multiple funnels, not before.
Will UTM parameters hurt my SEO?
Not if your page has a canonical tag pointing at the clean URL, which it should anyway. That tells search engines the tagged and untagged versions are the same page.
Should I use a link shortener to hide the tags?
Generally no. Shorteners are blocked outright in several of the communities most worth posting in, and they add a hop that can fail. A visible tagged link is fine in a post; the place to avoid it is a personal message.
My analytics and my signup form disagree. Which do I trust?
The form. Ad blockers and privacy settings mean analytics undercounts, sometimes substantially, while a submitted form is a fact. Use analytics for proportions and the form for totals.
How long before the numbers mean anything?
Judge a channel on a few hundred visitors from it, not on a few days. Small numbers swing wildly and it is easy to abandon something that was working on the evidence of one quiet week.
The goal is not a dashboard. It is being able to answer one question at the end of the month: which thing do I do more of? Tag your links, ask people how they found you, count your own hours honestly, and accept that a chunk of your best traffic will never be attributable. That is enough to pick the next channel with something other than a hunch.
Lighthouse builds the waitlist page and asks your question on the signup form, so the answers sit next to the emails and you can see who joined, why, and how they found you. From an indie dev, for indie devs and makers.