Web · Base
An ad space on your site, in one line of HTML
Advertisers rent it at a price they set themselves, and the rent is split between every site that showed it. No account, no approval queue, no minimum traffic.
Paid in USDC. A slot can hold more than an ad — see what else.
How it works
- 01
Sites host the space
One line of HTML. No account, no approval queue, no minimum traffic.
- 02
Advertisers rent it
At a price they set themselves, paying rent on their own valuation — so anyone who wants it more can always take it.
- 03
The rent splits back
Divided between every site that actually showed the ad, in proportion to what each delivered. Onchain, in USDC.
Host it and get paid in USDC.
<!-- Styling: see https://adland.space/llms.txt for the
--adland-* custom properties and ::part() hooks -->
<script src="https://cdn.jsdelivr.net/npm/@adland/embed@0.7.0/dist/adland.js" async></script>
<adland-slot slot-key="primary"></adland-slot>One script tag and one element. A single RPC call fetches the ad.
{
"version": 1,
"domain": "yoursite.com",
"payTo": "0xYourWallet…",
"nonce": "k9x2m4p7",
"issuedAt": "2026-08-27T10:00:00.000Z",
"signature": "0x…"
}Signed once with the wallet you want paying. Hosting it proves the domain is yours; the signature proves the address is.
embedadland.jsonearn USDC
Put it on a page
Four ways to embed the same space, all live on this page.
Paste it
no styling at all
primary<script src="https://cdn.jsdelivr.net/npm/@adland/embed@0.7.0/dist/adland.js" async></script>
<adland-slot slot-key="primary"></adland-slot>Theme it
24 CSS custom properties, hover it
primary<!-- same script as above -->
<adland-slot
slot-key="primary"
style="--adland-bleed: 10px;
--adland-bg: #FFE500;
--adland-fg: #000;
--adland-border: #000;
--adland-border-width: 2px;
--adland-radius: 0;
--adland-shadow: 6px 6px 0 #000;
--adland-shadow-hover: 2px 2px 0 #000;
--adland-transform-hover: translate(4px, 4px)"
></adland-slot>Style it with your own classes
render-mode=light, Tailwind reaches the card
primary<!-- same script as above -->
<adland-slot
slot-key="primary"
render-mode="light"
class="[&_.adland-card]:flex [&_.adland-card]:gap-3
[&_.adland-card]:rounded-xl [&_.adland-card]:border
[&_.adland-media]:size-12 [&_.adland-title]:font-medium"
></adland-slot>Or build the card
React, the markup is yours
primarynpm i @adland/react
import { Ad, AdImage, AdTitle } from "@adland/react";
<Ad slotKey="primary">
<AdImage className="aspect-video w-full" />
<AdTitle className="font-medium" />
</Ad>All four are live and read the same slot on Base. One eth_call each, since the name and the creative come back together. They run with consent="denied" so this page does not count as impressions against the ad. Leave it off and yours are tracked normally.