Ad network · free software

Monetize a free app
with one component.

yeld serves contextual, clearly-labeled ads inside free software. One React component, or one HTTP call, placed on each of your primary screens. You keep 70% of every click.

app/page.tsx
import { YeldAd } from "@yeld/react";

<YeldAd
  appId="app_k3j9x2m1p4q8"
  placement="sidebar"
  context={{ page: "editor" }}
/>
POST /api/v1/ad → 200
{
  "fill": true,
  "impressionId": "imp_ivf3k118724gfgph",
  "ad": {
    "advertiser": "Watchtower",
    "headline": "Know when your app goes down",
    "cta": "Start monitoring",
    "clickUrl": "https://yeld.dev/api/v1/click/imp_…"
  }
}
zero dependencies~4 KBno client secretsrenders nothing on no-fill

Install

Three ways in. All of them take a minute.

Package

Install the SDK and drop the component into a standard slot on each primary screen.

npm i @yeld/react
<YeldAd appId="app_…" />

CLI

Installs the SDK, writes config, prints the exact next step.

npx yeld init
Installing @yeld/react...
Wrote .env.local

Done. Next step — add
one unit per screen.

Coding agent

Paste one prompt. Claude Code and Cursor read /llms.txt and wire it up.

prompt
Add yeld to this app.
App ID: app_k3j9x2m1p4q8
Follow the placement rules
at yeld.dev/llms.txt

Mechanics

What happens on every request.

1 · request
Each unit POSTs your public app ID, its placement key, and any context you chose to pass, once on page load. Nothing else leaves the browser.
2 · match
yeld filters campaigns by your app's category, status, schedule, and remaining budget, then selects one weighted by CPC bid.
3 · impression
An impression row is written server-side and the creative comes back as JSON — headline, body, CTA, advertiser, clickUrl.
4 · click
The click endpoint records attribution and 302s to the stored destination. One click per impression, enforced by a unique constraint.
5 · ledger
The advertiser is charged their bid; 70% is credited to you and 30% to yeld, in the same transaction as the click.

The unit

yeld controls rendering.

Advertisers submit text and a logo — never markup, never scripts. That means no third-party JavaScript in your bundle, no layout surprises, and a unit that takes your app's fonts, colors, and radii instead of imposing its own.

  • Always labeled Sponsored, always attributed to yeld
  • Matches your design tokens — type, color, radius, and padding are public CSS variables
  • One request per unit, one unit per screen — no layout shift
  • Renders nothing when there is no matching inventory
  • No popups, interstitials, autoplay, or fake system UI

Live — served by this network

A real ad request against the production endpoint. If no campaign matches, this space stays empty — which is the correct behavior. Creative shown during this preview is sample copy written by yeld, not a live campaign.

Economics

CPC, stated plainly.

Advertiser pays

their CPC bid

Set per campaign. Charged on valid clicks only — never on impressions.

You keep

70%

Credited to your ledger the moment the click is recorded.

yeld keeps

30%

That is the whole fee. No minimums, no monthly cost, no exclusivity.

Duplicate clicks on one impression cannot be billed twice. Campaigns stop serving when their budget is spent. See the publisher details.

Privacy

Contextual only.

Targeting comes from your app's category and the context you explicitly pass. There is no behavioral profile to build, so there is nothing for your users to opt out of.

  • No fingerprinting
  • No third-party cookies
  • No cross-site profiles
  • No reading of user content or page contents
  • Anonymous session ID, used only for duplicate detection

Advertisers

Reach developers inside the tools they already opened.

Category-targeted CPC campaigns across free utilities, generators, and side projects. Set a bid and a budget, ship four lines of copy, pause whenever.

Keep it free. Make it pay.

Create an app, copy your ID, add a unit to each primary screen. Nothing to negotiate and nothing to install on your users.