⚙️ How an Ad Gets Served
A publisher pastes a small embed snippet (<div> + <script src="…/embed.js?slot=…">) on their page. Each load hits serve.php, which:
- Runs fraud checks on the request (rate limit, duplicate fingerprint, bot user-agent).
- Picks one ad via a weighted-random draw among eligible candidates, restricted to the slot's format (text/image share a "text_image" slot format; audio and video are their own).
- Records the impression and applies credit (unless the request was fraud-flagged).
- Renders the creative styled to match the slot's colors, font, and corner radius, wrapped in an iframe.
Eligibility for the Weighted Draw
The advertiser's account must be active with a positive credit balance, and the ad must be active. A member's own regular ads are structurally excluded from their own slots (self-serving guard) — this can't happen even if fraud checks are bypassed.
House ads (admin-created, is_house = 1) are exempt from that self-serving guard and don't require advertiser balance — the platform covers the publisher's credit instead of debiting an advertiser. A slot owner's own house ads compete directly in that slot's normal weighted draw; other members' house ads only kick in as a fallback when zero real ads are eligible for a slot.
Each ad has a weight (default 100) that sets its odds in the draw relative to competing ads — adjustable per-ad by an admin.
See it running live
Create a slot and watch impressions, clicks, and credits update in real time.
🚀 Get Started Free
Unlimited Text Ads