Servitory is an ad server for publishers who want to keep campaigns in their own hands. Who shows up, when, to whom, and on which device — you always decide.
Manage sites, positions, and campaigns from a simple admin. Instantly see how many ad calls, impressions, and viewable impressions there were.
Total ad calls
1 284 500
Impressions
891 200
Viewable
634 400
Campaigns
Auction simulator
No npm, no bundler. Just add one script tag and insert positions wherever you need.
Add the script to <head>
One line loads the entire Servitory director for your site.
Insert positions into the page
Each ad position is just a <div> with a data attribute. Place it anywhere in your HTML.
Done
Ads load asynchronously. No layout shift, no render blocking.
Async loading
Non-blocking render
Device pre-filter
No unnecessary ad calls
Frequency capping
Via localStorage
Consent-aware
CMP integration
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Můj web</title>
<!-- Servitory: jeden řádek -->
<script src="https://cdn.servitory.com/director/
abc123.js" async></script>
</head>
<body>
<header>...</header>
<!-- Reklamní pozice — jen div s id -->
<div id="pos-leaderboard"></div>
<main>...</main>
<!-- Druhá pozice kdekoliv na stránce -->
<div id="pos-sidebar"></div>
</body>
</html>Campaigns are divided into 7 tiers. Higher tier always wins — within a tier, weighted random rotation applies. Full control over priority and display frequency.
Position: Main banner
3 campaigns activeTier S wins. Remaining tiers await passback or no-fill.
Campaign targeting settings
Device
Positions with device targeting are filtered in the browser — no unnecessary ad call
Traffic source
Detection from UTM parameters and referrer, 30 min cookie
Tier
Impression cap
Each campaign has its own targeting — device type, traffic source, and impression limits. Positions not matching the device are filtered in the browser — no unnecessary server request.
If a campaign has no fill, the system automatically moves to the next one. AdSense unfilled is handled automatically; any campaign can call passback manually via window.__TAD.passback().
Passback waterfall
Simple, fast, and reliable ad server. No third-party cookies, no per-impression fees.
Async JS snippet. No iframe, no dependency — the script loads itself and automatically discovers positions on the page.
Batched fire-and-forget tracking. Viewable per IAB MRC (50% area / 2s). Flush every 5s and on page hide.
Daily, weekly, or lifetime limit. Frequency capping per user via localStorage without third-party cookies.
Positions with device targeting are filtered directly in the browser — no unnecessary ad call before the request is even sent.
Start and end date. Campaign activates and deactivates automatically according to the calendar.
16 standard IAB sizes. Ready-made templates: banner, native, video, Performax, Sklik, and more.
Monte Carlo simulation (10,000 rounds) to estimate each campaign's win rate in the tier. Live HTTP test with latency measurement.
Lazy loading with adjustable offset. The ad loads just before entering the viewport.
TCF2, Google FundingChoices, or custom CMP. Automatic ad refresh when user changes consent.
Header bidding via Prebid.js connected to Google Ad Manager. Programmatic auction complements direct campaigns.
Latency p50/p95/p99, ad calls, impressions, and viewable per window (1/5/60 min). Auto-refresh every 10s.
Three steps from registration to displayed ad.
Enter the domain, configure CMP, and create ad positions with standard IAB dimensions.
Insert HTML banners, configure tiers, weights, caps, targeting, and scheduling.
Copy the embed code and add it to your site. Ads will appear immediately.
Start for free. Pay as you grow.
Free
0 Kč
free forever
Pro
1 990 Kč
per month
Scale
14 900 Kč
per month
Enterprise
Na míru
individual contract
Ad call limit = a notification, not an ad outage. Upgrade anytime without interruption.
Servitory is currently in closed beta. Request access — we'll get back to you as soon as possible.
Request access →