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.
import { YeldAd } from "@yeld/react";
<YeldAd
appId="app_k3j9x2m1p4q8"
placement="sidebar"
context={{ page: "editor" }}
/>{
"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_…"
}
}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.
<YeldAd appId="app_…" />CLI
Installs the SDK, writes config, prints the exact next step.
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.
Add yeld to this app.
App ID: app_k3j9x2m1p4q8
Follow the placement rules
at yeld.dev/llms.txtMechanics
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.