The only RTB platform with built-in budget control, frequency capping,
and conversion tracking. All on Cloudflare's global edge network.
Complete bidding platform with spend control, fraud prevention, and ROI tracking built in
70ms median, 147ms P95 response times on Cloudflare's global network. Your bids arrive first while competitors are still loading.
Set daily and monthly spend limits per campaign. When you hit the cap, we return $0 bids automatically. Never overspend again.
Limit exposure per traffic source. Cap impressions, clicks, or bid amounts per domain per day. Stop runaway sources.
Every click gets a unique ID. We verify first-click before charging. Same visitor clicks 10 times? You pay once.
Track ROI with server-to-server postbacks. We calculate profit automatically: payout minus your bid cost. Know what's working.
Multiple bid rules per campaign with country, OS, and browser targeting. Different bids for different traffic segments.
Boost or reduce bids for specific domains. Handle 100k+ domains per list with O(1) lookup speed. Share lists across campaigns.
Track requests, clicks, spend, and conversions in real-time. Visual dashboards with charts and exportable reports.
Automate everything. Manage domains, check stats, trigger postbacks. Two-key security keeps your management operations private.
Real-time analytics and controls built right in
From request to response in under 150 milliseconds - with full protection
Parse geo, OS, browser, source
Return $0 if limit exceeded
Return $0 if source capped
Rules + lists + modifiers
Generate unique UUID
Bid + tracking URL
| RTB Domains | Legacy Systems | DIY Solution | |
|---|---|---|---|
| Response Time | 70ms median | 200-300ms | 500ms+ |
| Budget Control | Built-in | Manual/None | Complex |
| Frequency Caps | Per-source | None | Complex |
| Click Dedup | Automatic | Manual | None |
| Conversion Tracking | Native | Third-party | None |
| Domain Lists | 100k+ domains | 10k limit | 1k limit |
| Setup Time | 30 minutes | 1-2 weeks | 4-8 weeks |
| Global Edge | 300+ locations | 5-10 regions | Single region |
# Get a bid for a visitor
curl -X GET "https://api.rtbdomains.com/bids/?\
api=YOUR_API_KEY&\
cc=us&\
ua=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20Win64%3B%20x64)&\
src=example.com"
# Response
{
"country": "us",
"src": "example.com",
"os": "windows",
"browser": "chrome",
"bid": 0.225,
"url": "https://api.rtbdomains.com/click/..."
}
# Manage domain lists (requires management key)
curl -X POST "https://api.rtbdomains.com/api/v1/lists/1/domains?api_key=YOUR_MGMT_KEY" \
-H "Content-Type: application/json" \
-d '{"domains": ["example.com", "test.com"]}'
<?php
class RTBDomains {
private $apiKey;
private $mgmtKey;
private $baseUrl = 'https://api.rtbdomains.com';
public function __construct($apiKey, $mgmtKey = null) {
$this->apiKey = $apiKey;
$this->mgmtKey = $mgmtKey;
}
public function getBid($country, $userAgent, $source) {
$params = [
'api' => $this->apiKey,
'cc' => $country,
'ua' => $userAgent,
'src' => $source
];
$url = $this->baseUrl . '/bids/?' . http_build_query($params);
$response = file_get_contents($url);
return json_decode($response, true);
}
public function addDomains($listId, $domains) {
if (!$this->mgmtKey) {
throw new Exception('Management key required');
}
$url = $this->baseUrl . "/api/v1/lists/$listId/domains?api_key=" . $this->mgmtKey;
$options = [
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode(['domains' => $domains])
]
];
$context = stream_context_create($options);
return file_get_contents($url, false, $context);
}
}
// Usage
$rtb = new RTBDomains('YOUR_API_KEY', 'YOUR_MGMT_KEY');
$bid = $rtb->getBid('us', $_SERVER['HTTP_USER_AGENT'], 'example.com');
echo "Bid: $" . $bid['bid'];
import requests
from urllib.parse import urlencode
class RTBDomains:
def __init__(self, api_key, mgmt_key=None):
self.api_key = api_key
self.mgmt_key = mgmt_key
self.base_url = 'https://api.rtbdomains.com'
def get_bid(self, country, user_agent, source):
"""Get bid for a visitor"""
params = {
'api': self.api_key,
'cc': country,
'ua': user_agent,
'src': source
}
response = requests.get(f'{self.base_url}/bids/', params=params)
return response.json()
def add_domains(self, list_id, domains):
"""Add domains to a list (requires management key)"""
if not self.mgmt_key:
raise ValueError('Management key required')
url = f'{self.base_url}/api/v1/lists/{list_id}/domains'
params = {'api_key': self.mgmt_key}
data = {'domains': domains}
response = requests.post(url, params=params, json=data)
return response.json()
def get_stats(self, days=7):
"""Get campaign statistics"""
url = f'{self.base_url}/api/v1/stats'
params = {'api_key': self.api_key, 'days': days}
response = requests.get(url, params=params)
return response.json()
# Usage
rtb = RTBDomains('YOUR_API_KEY', 'YOUR_MGMT_KEY')
# Get bid
bid_response = rtb.get_bid('us', user_agent_string, 'example.com')
print(f"Bid: ${bid_response['bid']}")
# Add domains to list
rtb.add_domains(1, ['example.com', 'test.com'])
const axios = require('axios');
class RTBDomains {
constructor(apiKey, mgmtKey = null) {
this.apiKey = apiKey;
this.mgmtKey = mgmtKey;
this.baseUrl = 'https://api.rtbdomains.com';
}
async getBid(country, userAgent, source) {
const params = new URLSearchParams({
api: this.apiKey,
cc: country,
ua: userAgent,
src: source
});
const response = await axios.get(`${this.baseUrl}/bids/?${params}`);
return response.data;
}
async addDomains(listId, domains) {
if (!this.mgmtKey) {
throw new Error('Management key required');
}
const url = `${this.baseUrl}/api/v1/lists/${listId}/domains`;
const params = { api_key: this.mgmtKey };
const response = await axios.post(url, { domains }, { params });
return response.data;
}
async getStats(days = 7) {
const params = {
api_key: this.apiKey,
days
};
const response = await axios.get(`${this.baseUrl}/api/v1/stats`, { params });
return response.data;
}
}
// Usage with Express.js
app.get('/bid', async (req, res) => {
const rtb = new RTBDomains(process.env.RTB_API_KEY);
const bid = await rtb.getBid(
req.query.country,
req.headers['user-agent'],
req.query.source
);
res.json(bid);
});
// Manage domains
const rtb = new RTBDomains(process.env.RTB_API_KEY, process.env.RTB_MGMT_KEY);
await rtb.addDomains(1, ['example.com', 'test.com']);
All processing happens on Cloudflare's edge. No database queries in the hot path.
Built for speed on Cloudflare's global infrastructure
Across all edge locations
Per request guarantee
Per list supported
Cloudflare network
Security that actually works. Two-key system, signed click URLs, and automatic deduplication protect your budget without slowing you down.
Your bidding key is safe to share with traffic sources. Your management key stays private for domain list changes. Traffic sources can't manipulate their own bid modifiers.
Every click URL is cryptographically signed (HMAC-SHA256). URLs expire after 5 minutes. Tampering attempts automatically fail - no fake clicks, no replay attacks.
Atomic verification at the edge ensures you only pay for first clicks. Same user clicks 50 times? You're charged once. Works automatically - no configuration needed.
Budget caps stop overspend instantly. Frequency caps limit per-source exposure. Real-time enforcement via distributed state - no batching delays.
Powering traffic arbitrage operations worldwide
Monetize parked domains with intelligent bidding and real-time optimization.
Maximize margins with precise bid control and performance tracking.
Optimize traffic routing with advanced targeting and analytics.
Trusted by Leading Traffic Professionals
How traffic professionals are using RTB Domains
"We were losing $200/day to duplicate clicks before RTB Domains. The Click ID system stopped it cold - first month ROI was 340%. The budget caps let me sleep at night knowing I won't wake up to a $50k bill."
"Frequency capping changed everything. I was burning budget on sources that clicked 50+ times per day with zero conversions. Now I cap at 10 clicks and my conversion rate tripled. Should have had this years ago."
"The postback system means I can finally show clients real ROI, not just click counts. Profit per source, time to convert, everything. They stopped asking for reports - they just check the dashboard themselves."
Stories represent typical use cases. Individual results vary based on traffic quality and configuration.
Choose the plan that fits your traffic volume
All plans include 14-day free trial • No setup fees • Cancel anytime
Quick answers about features and setup
/postback?click_id={id}&payout=5.00&api_key={mgmt_key}. We automatically calculate profit (payout minus your bid cost) and show it in the dashboard. You can see profit per source, time-to-convert, and overall ROI.
Ready to start optimizing your traffic arbitrage operations?
< 24 hours for sales inquiries
< 4 hours for support (Professional+)
Your data is encrypted and never shared.