GHAN— by singular Get started

User acquisition for a one-time-licence desktop app

A one-time-licence desktop app should acquire users through channels whose price is not set by an auction — content, communities, directories and cross-promotion — because at under roughly EUR 40 of lifetime value per customer, subscription competitors can profitably outbid you by an order of magnitude on the same keyword.

The short answer

Channels whose price is not set by an auction, in this order:

  1. The two or three articles only you could write. Not listicles — the specific technical problem you solved. These still produce installs in year two.
  2. The communities your users already read. Answer questions for weeks before you mention your product once.
  3. Directories. An afternoon of work, permanent backlinks, and the listicles that AI assistants read when answering "what are the options for X".
  4. Cross-promotion, once you have an audience worth trading.

Paid search enters the list only above roughly EUR 40 of lifetime value per customer.

Why the economics are different from SaaS

One-time licenceMonthly subscription
PriceEUR 29, onceEUR 29 / month
Gross lifetime value~EUR 29~EUR 350 at 12 months
Affordable CAC at 30% margin~EUR 9~EUR 105
Clicks per customer at 3% CVR3333
Affordable cost per clickEUR 0.27EUR 3.18

Both bid on the same keyword. One can pay nearly twelve times more.

The auction is not broken and it is not unfair. An auction is a mechanism for discovering who values something most; it discovered. The consequence is that every channel priced by bidding is structurally closed to you, and no amount of creative work reopens it.

There is a second, quieter problem. Most teams compare channels on cost per install, when the number that corresponds to revenue is cost per retained user. For desktop apps those differ by a factor of two to four, and recomputing usually reorders your channels. How to measure it.

The channels, in order, honestly

Content and SEO. Works. Takes about eighteen months, and is increasingly mediated by AI answers rather than blue links — which changes what ranking means without shortening the eighteen months. Still the highest-return thing a small team can do.

Communities. Works once. You launch, you spike, and then you learn a spike is not a channel. Communities reward novelty, and your app is novel for one week of its life. Treat launches as a way to find your first hundred real users, not as acquisition.

Directories. Product Hunt, AlternativeTo, SaaSHub, Slant, the relevant awesome-lists. Free, an afternoon, and they compound — these are the pages an AI assistant reads when someone asks for alternatives to a competitor.

Affiliates and deal sites. They work, and they price your product at 40–70% off permanently. The commission is the visible cost; the price anchor is the one that compounds. Once "[your app] coupon" is a search result with answers, your effective price is the discounted one forever.

Curated bundles. The only browsable shelf desktop software has. You hand over the customer relationship for it, which for a delightful-but-unsearchable utility is often the right trade and for a primary purchase is usually not.

Cross-promotion. The only paid channel whose price does not move when a funded competitor arrives, because you can pay in attention rather than cash.

Monetising a free desktop app without display ads

Display advertising inside a desktop app is usually a bad trade: it makes the product feel like a website, and desktop CPMs do not cover the damage. Three alternatives:

  • Paid upgrade. The free tier must be good enough to retain and limited enough to convert. Most free tiers fail on the first.
  • Cross-promotion. Earn per referred install that survives 48 hours — 70% of the rate card in cash, or 84% of it in value as network credits you spend on your own growth. An app that serves as much as it buys never touches a card.
  • A support or commercial licence for the small share of users who need one.

The difference between cross-promotion and display advertising is what is being shown and when: a templated card recommending another notarised, malware-scanned desktop application, at a moment your own code chose, after installation — never inside an installer, and never a banner.

Where GHAN fits

GHAN prices installs from a published floor — EUR 12–18 utilities and consumer, EUR 20–30 creator tools, EUR 35–50 prosumer and B2B, per install still in use 48 hours later. The floor never rises and anyone can always buy at it; bidding above it buys priority when a category is contested.

The part that matters for a one-time-licence app: you can pay in inventory instead of money. Serving placements earns credits at 84% of CPI in value. Your acquisition budget stops being a cash constraint and becomes a function of the audience you already have.

What GHAN cannot do for you: create demand, or help at all if you have no users yet. The vetting gate requires a domain at least six months old, which rules out week-one launches deliberately.

How the attribution works

Single-use token issued at click, signed, 15-minute expiry, delivered via a protocol handler and a handoff file. The receiving app countersigns with its own ed25519 key. Two independent signatures before anything is billable, one of them produced inside your own signed binary. Money clears only at 48 hours of real use. No fingerprinting, no probabilistic fallback.

Which means you do not have to believe the install count — you can recompute it. Mechanics.

Measuring without inventing numbers

MetricFormulaWhy
Install-to-activefirst-success ÷ installsCatches onboarding failure
48-hour in-use ratesessions in h24–48 ÷ installsThe honest CPI denominator
Cost per retained userchannel spend ÷ 48h-retainedThe number tied to revenue
Refund rate by channelrefunds ÷ sales, per sourceDeal sites look different here
Payback periodCAC ÷ gross margin per customerFor one-time licences this is immediate or never

Run cost per retained user across every channel on identical definitions. It is ten minutes of work and it frequently inverts the ranking.

If you ship Electron, Tauri or native

Electron, Tauri and Node are supported by @ghan/sdk in v1. Native Swift and C# are not yet, and the status page says so. Register the ghan:// protocol handler in the next release whether or not you integrate immediately — retrofitting it later means waiting for another release cycle. Integration guide.

Questions people ask about this

What is the best acquisition channel for a one-time-license desktop app?

The one whose price is not set by an auction. In order - the two or three articles only you could write, the communities your users already read, directories for backlinks, and cross-promotion once you have an audience worth trading. Paid search becomes viable above roughly EUR 40 of lifetime value per customer and is closed to you below it, not because your ads are bad but because a subscription product bidding on the same keyword can afford about twelve times what you can.

How do I monetise a free desktop app without ads?

Three routes that do not involve display advertising. A paid upgrade with a genuinely useful free tier, where the free tier has to be good enough to keep people and limited enough to convert. Cross-promotion, where you earn per install you refer that survives 48 hours and can take the earnings as cash or as credits toward your own growth. Or a support or commercial licence for the small number of users who need it. Display advertising inside a desktop app is usually a bad trade - it makes the product feel like a website and the CPMs do not justify the damage.

Why can't a one-time-licence app compete on Google Ads?

Because an auction prices a click by what it is worth to the bidder who values it most, and in nearly every software category that is a subscription product with an order of magnitude more lifetime value per customer. A EUR 29 one-time licence can afford about EUR 0.27 a click at a 30 percent margin and a 3 percent conversion rate. A EUR 29 per month product with twelve-month retention can afford about EUR 3.18 for the identical click. No amount of creative testing closes a twelve-fold gap, because the gap is in the revenue model rather than the advertising.

Is cross-promotion safer than install bundling?

Yes, and the difference is structural rather than a matter of care. Installer bundling places an offer inside a flow whose purpose is to be clicked through, which makes accidental acceptance the most profitable outcome and is why antivirus vendors classify the behaviour as a potentially unwanted program. Post-install cross-promotion shows a card inside the running application at a moment the application chose, with nothing pre-selected and a separate installer the person has to complete themselves. The detection that killed the previous generation attached to the SDK, not to individual offers, which is why the distinction matters even if you would have behaved well.

Should I just switch to a subscription?

Only if the product genuinely keeps changing. Subscription pricing for a finished utility is not a pricing decision, it is a promise to keep shipping - and if you will not, you have sold an obligation you cannot meet and the reviews will say so within a year. If there is a server you pay for monthly, there is a subscription you should charge monthly. If there is not, a one-time licence with paid major upgrades is more honest and usually more durable.

How does deterministic install attribution work?

A click issues a single-use token, signed, expiring after 15 minutes and bound to the campaign and the referring app. It reaches the installed application through a custom protocol handler and a local handoff file, and on first run that application countersigns the claim with its own ed25519 key, generated on the machine and never transmitted. Two independent signatures are required before anything is billable. There is no fingerprinting and no probabilistic fallback - an install that cannot prove itself is simply not attributed.

Can a coding agent integrate GHAN?

Yes, and it is the intended path. Every write capability ships as an MCP tool before a dashboard screen, so an agent can read the public rate card, register the app, act on machine-readable gate failures, fetch the integration guide from a tool call, wire the SDK and open a reviewable PR. Two things stay human - shipping the release and setting the spending ceiling.

Machine-readable versions of this page: markdown · llms.txt · llms-full.txt · OpenAPI · AI catalog