GHAN— by singular Get started

GHAN for advertisers buying desktop installs

An advertiser sets a daily budget and categories, and is charged a fixed rate-card price for each install still in use 48 hours later. Anything failing that bar is refunded automatically, with two signatures behind every charge.

What you are buying

Not a click. Not an impression. Not an install event. A cleared install: someone who saw a card inside an app they already trusted, clicked it, installed your application, and was still using it 48 hours later.

That is a deliberately narrow definition, and it is the only thing GHAN will bill you for.

Creating a campaign

create_campaign {
  app_id: "app_...",
  categories: ["creator_tools", "utilities"],
  daily_budget_cents: 20000,
  max_bid_cents: 4100            // optional — omit to buy at floor
}

That is the whole interface, and max_bid_cents is optional. Omit it and you buy at the floor price for your category — a price that never rises and that you can always buy at. Set it and you compete for priority in contested inventory at second price, paying one cent above the next-highest competing bid rather than your own maximum. See bidding. You do not upload creative, because creatives are templated: your icon, your name, one generated line.

Campaigns start throttled and ramp as their chains clear. You can pause and resume at any time with pause_campaign and resume_campaign.

What a charge looks like on your ledger

Every line in get_ledger carries an event_chain_id. Pulling that chain gives you:

  • the impression, signed by the serving app's key
  • the click and the token id, with its issue time and expiry
  • the install claim, signed by the receiving SDK's key — which is your own build
  • the device signals attached to the claim
  • the 48-hour activation, or the rejection and its reason code
  • the escrow hold and its release or reversal

You signed half of that yourself. That is the point: you do not have to believe GHAN's count, because you can recompute it from signatures you produced.

Escrow, in plain terms

MomentYour balanceEscrow
Campaign running, no claimsfullempty
An install is claimedCPI moves outCPI held
48 hours later, install survivesunchangedreleased to the serving app, GHAN keeps 30%
48 hours later, install is goneCPI returnsemptied
Fraud rule fires at any pointCPI returnsemptied

You are never asked to dispute a charge. Ambiguity defaults to refund, because the alternative — billing first and arguing later — is how the previous generation of install networks made their money and lost their reputation.

Budget controls that actually bind

  • Daily budget is enforced at the campaign level, and binds regardless of your bid.
  • Floor access is guaranteed. No bid by anyone can stop you buying at the published price.
  • Pair caps limit net flow between any two apps to EUR 500 per month until both have behaviour scores, so a single relationship cannot quietly become your whole spend.
  • Category exclusions and named-app exclusions are honoured at placement time.
  • Agent wallets can be pre-capped, so a coding agent can top up and spend within a ceiling you set once, without a human clicking Stripe each time.

The two moments that stay human

GHAN is built so an agent can do everything, with two deliberate exceptions:

  1. You ship the release containing the SDK, in your own signed build.
  2. You authorise money — a Stripe click, or a one-time pre-capped agent wallet.

Everything else — registration, scoring, campaign creation, budget changes, ledger reads, payout requests — is available to an agent over MCP.

Before you spend anything

Both of these are public and need no account:

get_rate_card {}
get_network_stats {}

The second one returns the network's real clearing rate and fraud percentage. If those numbers are bad, you should see them before you top up, not after. Current figures are on the status page and in the transparency report.

Questions people ask about this

How is this cheaper than Google Ads if GHAN also has bidding?

Because the bidding sits on top of a floor rather than replacing it. In a search auction the clearing price is the only price, so when a better-funded competitor enters your keyword you are priced out entirely. On GHAN the floor never rises, you can always buy at it, and thirty percent of every category is reserved at floor and never auctioned. You also bid per cleared install rather than per click, so you are never paying for traffic that went nowhere - an install that does not survive 48 hours costs nothing whatever you bid.

What stops me being charged for fake installs?

Four things in sequence. The token must be single-use, unexpired and signed. The claim must carry the receiving SDK's own signature, which lives inside another company's signed binary. The device must not look like a virtual machine, a fresh operating system or a datacenter ASN. And the cohort's retention curve must resemble the category baseline rather than being suspiciously perfect. Anything that fails is refunded before it reaches your invoice, not after you dispute it.

Can I target specific apps?

You target categories, not individual apps, and you can exclude named apps and whole categories. Direct app-to-app targeting is not offered because it is the mechanism through which two parties collude, and pair-level net-flow caps exist for the same reason.

How fast can a campaign start?

Campaigns start in a throttled state immediately after creation and ramp as the chains they produce clear. A brand new app with no trading history posts a refundable EUR 250 deposit before buying above a small volume. There is no sales process and no onboarding call.

What happens to my unspent balance?

Credits do not expire and can be cashed out through Stripe Connect once the balance is at least EUR 50. Escrow holds for chains that never cleared are returned to your spendable balance automatically.

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