Open app

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.

AD
Live on this page. Whoever holds the space right now is paying for it.

How it works

  1. 01

    Sites host the space

    One line of HTML. No account, no approval queue, no minimum traffic.

  2. 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.

  3. 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.

1Add the embed
<!-- 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.

2Serve /.well-known/adland.json
{
  "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

primary
npm 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.