The first time you put real money behind your product, the temptation is to spread it across platforms, audiences, and offers so you "see what works." That is how 100 dollars becomes nothing, fast, and you conclude ads do not work for your product when what you actually did was run ten underfunded experiments at once.
A 100-dollar budget is research money. The goal is not reach or scale. It is to buy one clear answer about whether one specific message reaches one specific person at a price you can stand.
The wrong first instinct
Most solo builders copy a brand campaign they saw: a polished video, a broad audience, awareness goals. Then they watch a dashboard fill with impressions, likes, and video plays, and call it learning. It is not. Those metrics tell you people scrolled past your thing. They do not tell you whether anyone would pay for it.
A 100-dollar budget is research money. You are running an experiment with one variable and one measurable outcome. If you cannot tell, at the end, which single choice moved the number, you spent the money on noise.
One audience, one platform, one offer
Before you spend, write three sentences on paper. If you cannot, you are not ready to spend.
The audience is one person, described by behavior, not by demographic. Not "developers 25 to 40." Instead: "a solo developer who has shipped one paid product and is now stuck on deploy." Behavioral audiences cost less and convert better because the ad matches a real situation, not a loose profile.
The platform is the one where that person already looks for solutions. For developer tools, that is often X or Reddit, sometimes Hacker News sponsorship, sometimes a newsletter. For consumer mobile apps, it might be TikTok or Instagram. Pick one. Running two platforms on 100 dollars splits the budget below the threshold where any signal forms.
The offer is one thing the ad asks the reader to do. Click to a landing page. Install the app. Read a post. Not "learn more and maybe also sign up and also follow." One action, one URL, one outcome you can count.
Set the budget so a winner can show
A common failure is capping a campaign so low that no variant gets enough impressions to differentiate. If you split 100 dollars across four ad variants on one audience, each variant gets roughly 25 dollars. On most platforms that is under the threshold where the algorithm can even tell which creative is working.
A better split: two creatives, one audience, 50 dollars each. Or one creative, two audiences, 50 dollars each. Two variables total, not four. You are not optimizing at this stage. You are screening.
Set a daily cap so the spend stretches across enough days to see variance. Five dollars a day for 20 days reads real behavior. Fifty dollars in one afternoon reads one Tuesday.
What to measure, and what to ignore
Ignore impressions, reach, and video completion in the first 100 dollars. They will be high and they will mean nothing. Measure one thing: the cost to get one person to do the one action you picked.
If the offer is "install the app," measure cost per install. If the offer is "visit the landing page and sign up," measure cost per signup. The platform will report clicks and impressions for free; the conversion event is what you pay to learn about, so set it up before you spend.
This is where most solo builders lose the signal. They run the ad, see a click count, and never wire the conversion event. Without the conversion, 100 dollars tells you nothing you can act on.
A conversion event is straightforward to wire. For a web product, add a conversion endpoint that logs the UTM parameters the visitor carried, then query it against your payment table to compute real cost per acquisition:
// POST /api/conversion - called after signup or purchase
func handleConversion(w http.ResponseWriter, r *http.Request) {
var body struct {
Event string `json:"event"` // "signup" or "purchase"
Amount int64 `json:"amount_cent"` // optional, for purchases
}
json.NewDecoder(r.Body).Decode(&body)
// Read UTM params from the cookies the landing page set.
cookie, _ := r.Cookie("utm_source")
source := ""
if cookie != nil {
source = cookie.Value
}
db.LogConversion(Conversion{
Event: body.Event,
Source: source,
Campaign: cookieValue(r, "utm_campaign"),
CreatedAt: time.Now(),
})
w.WriteHeader(http.StatusOK)
}
The query that tells you your real cost to acquire:
SELECT
source,
campaign,
COUNT(*) FILTER (WHERE event = 'purchase') AS paying_customers,
COALESCE(SUM(amount_cent) FILTER (WHERE event = 'purchase'), 0) / 100 AS gross_revenue
FROM conversions
WHERE created_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY source, campaign;
Divide your ad spend per campaign by the paying-customer count, and you have your own cost per acquisition. No platform black box. No estimated conversions that do not match your database.
Kill losers fast, but not too fast
A first campaign teaches you the shape of patience. If you kill a variant after one day of no conversions, you are reading noise. If you let a variant run for the full 20 days before judging it, you are wasting the other half of the budget.
A reasonable rule: let each variant run until it has spent about 20 percent of its budget, or about 10 dollars, before you judge. If it has zero conversions at 10 dollars, pause it and put the rest into the surviving variant. If it has one conversion, the cost-per-conversion is already 10 dollars and you can decide whether that is a price you would pay at scale.
The mistake to avoid is falling in love with a creative you made. The data is not commenting on your taste. It is reporting whether the message reached the person you described. Kill the variant that does not work and move on.
The one answer you bought
At the end of 100 dollars, you should be able to fill in one sentence:
"I can get one [signup or install] from one [specific audience] on [one platform] for about [N dollars], and I would or would not pay that at scale."
That is the answer. If the number is a price you would pay and the signups or installs are real people who stuck around, you have a campaign worth scaling. If the number is too high or the users churned, you bought the knowledge that this message to this audience on this platform does not work yet, and you change one variable next time.
Either answer is worth 100 dollars. Spending it on ten things at once buys no answer at all.
What comes next
This is a first-budget playbook. It does not cover retargeting, lookalike audiences, lifetime value, creative iteration at scale, or the moment you move from "is this worth scaling" to "how do I scale." Those come after you have the one answer the first 100 dollars buys. If you cannot fill in the sentence above, you are not ready for the next budget.
For the full path from first ad to a product that retains the customers those ads bring, The Handbook covers the build, deploy, and operate stages end to end.
Field reports
Log in to submit a field report.
Loading reports…