Smart Bidding.
Real Results.
Total Control.

The only RTB platform with built-in budget control, frequency capping,
and conversion tracking. All on Cloudflare's global edge network.

70ms
Median Response
$0
Duplicate Clicks
100%
Budget Control
ROI Tracking
147ms
P95 Latency
100k+
Domains Per List
30 min
Setup Time
30 Day
Attribution Window

Everything You Need. Nothing You Don't.

Complete bidding platform with spend control, fraud prevention, and ROI tracking built in

Lightning Performance

70ms median, 147ms P95 response times on Cloudflare's global network. Your bids arrive first while competitors are still loading.

  • 300+ edge locations worldwide
  • Zero cold starts
  • Automatic failover

Budget Control NEW

Set daily and monthly spend limits per campaign. When you hit the cap, we return $0 bids automatically. Never overspend again.

  • Real-time spend tracking
  • Automatic midnight reset
  • Zero-latency enforcement

Frequency Capping NEW

Limit exposure per traffic source. Cap impressions, clicks, or bid amounts per domain per day. Stop runaway sources.

  • Impression limits
  • Click limits
  • Spend limits per source

Click Deduplication NEW

Every click gets a unique ID. We verify first-click before charging. Same visitor clicks 10 times? You pay once.

  • Atomic first-click check
  • 30-day attribution window
  • Zero duplicate charges

Conversion Tracking NEW

Track ROI with server-to-server postbacks. We calculate profit automatically: payout minus your bid cost. Know what's working.

  • Automatic profit calculation
  • Per-source ROI reporting
  • Custom data passthrough

Advanced Targeting

Multiple bid rules per campaign with country, OS, and browser targeting. Different bids for different traffic segments.

  • Country-level targeting
  • OS & browser detection
  • Unlimited rules per campaign

Domain List Modifiers

Boost or reduce bids for specific domains. Handle 100k+ domains per list with O(1) lookup speed. Share lists across campaigns.

  • 100k+ domains per list
  • Pattern matching rules
  • Bulk API operations

Real-Time Analytics

Track requests, clicks, spend, and conversions in real-time. Visual dashboards with charts and exportable reports.

  • Request vs click tracking
  • Geographic breakdowns
  • Source attribution

Full REST API

Automate everything. Manage domains, check stats, trigger postbacks. Two-key security keeps your management operations private.

  • Bidding key (public)
  • Management key (private)
  • Complete documentation

See Everything at a Glance

Real-time analytics and controls built right in

Analytics Dashboard
Today's Performance Live
24.3k
Requests
892
Clicks
$142.50
Revenue
Hourly request volume - Last 10 hours
Campaign Controls
Daily Budget Active
$68.20 spent $100.00 limit
Frequency Cap 10 clicks/domain/day
Capped Sources
23
Saved
$142
Quick Actions
Add Rule Edit Lists Sync KV Export

How It Works

From request to response in under 150 milliseconds - with full protection

1

Request

Parse geo, OS, browser, source

2

Budget Check

Return $0 if limit exceeded

3

Freq Cap

Return $0 if source capped

4

Calculate

Rules + lists + modifiers

5

Click ID

Generate unique UUID

6

Response

Bid + tracking URL

When Someone Clicks:

Click
Visitor clicks URL
Dedup Check
First click only
Track Spend
Update budget
Redirect
To destination

RTB Domains vs Alternatives

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

Integration Examples

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

Performance That Matters

Built for speed on Cloudflare's global infrastructure

147ms
P95 Latency

Across all edge locations

2-3
Max KV Ops

Per request guarantee

100k+
Domains

Per list supported

300+
Global POPs

Cloudflare network

Built-In Fraud Protection

Security that actually works. Two-key system, signed click URLs, and automatic deduplication protect your budget without slowing you down.

Two-Key Security System

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.

Signed Click URLs

Every click URL is cryptographically signed (HMAC-SHA256). URLs expire after 5 minutes. Tampering attempts automatically fail - no fake clicks, no replay attacks.

First-Click Deduplication

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.

Spend Controls

Budget caps stop overspend instantly. Frequency caps limit per-source exposure. Real-time enforcement via distributed state - no batching delays.

How We Protect Your Budget
  • HMAC-SHA256 signatures on every click URL
  • 5-minute URL expiry prevents replay attacks
  • First-click deduplication via Durable Objects
  • Budget enforcement at zero latency
  • Input validation blocks injection attacks
  • CSRF protection on all dashboard actions
  • bcrypt password hashing (cost factor 12)

Trusted by RTB Professionals

Powering traffic arbitrage operations worldwide

Domain Parking

Monetize parked domains with intelligent bidding and real-time optimization.

Display Arbitrage

Maximize margins with precise bid control and performance tracking.

Redirect Optimization

Optimize traffic routing with advanced targeting and analytics.

Trusted by Leading Traffic Professionals

Real Problems, Real Solutions

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

JM
J.M. Domain Portfolio Manager (12k+ domains)

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

SK
S.K. Display Arbitrage (2M+ req/day)

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

RT
R.T. Performance Marketing Agency

Stories represent typical use cases. Individual results vary based on traffic quality and configuration.

Simple, Transparent Pricing

Choose the plan that fits your traffic volume

Starter

$499 /mo
10M requests/month
  • 10 campaigns
  • 50 domain lists
  • 100k total domains
  • Real-time analytics
  • Email support
  • 14-day free trial
Start Free Trial
Most Popular

Professional

$4,999 /mo
100M requests/month
  • Unlimited campaigns
  • Unlimited domain lists
  • Unlimited domains
  • Real-time analytics
  • Priority support
  • Multi-user accounts
  • 99.9% uptime SLA
Get Started

Enterprise

$Custom
1B+ requests/month
  • Everything in Professional
  • Dedicated account manager
  • Custom SLA guarantees
  • White-label options
  • 24/7 phone support
  • Custom integrations
Contact Sales

All plans include 14-day free trial • No setup fees • Cancel anytime

Frequently Asked Questions

Quick answers about features and setup

Set daily and/or monthly spend caps per campaign. When you hit the limit, we automatically return $0 bids - your traffic keeps flowing, you just stop spending. Limits reset at midnight UTC. The dashboard shows real-time spend vs. limit so you always know where you stand. You can change limits anytime and they take effect immediately.

Limit exposure per traffic source. You can cap impressions, clicks, or total bid amounts per domain per day. Example: "Max 10 clicks per source per day" stops a single domain from burning your budget. When a source hits its cap, we return $0 bids for that source only - other sources continue normally.

Every bid gets a unique Click ID (UUID). When someone clicks your tracking URL, we check if that Click ID was already counted. If yes, we skip the charge and still redirect the user. Same visitor clicks 50 times? You pay once. This happens automatically - no configuration needed. The 30-day attribution window means conversions can still be tracked even if clicks happened weeks ago.

Pass the click_id to your offer, then send us a postback when it converts. Your postback URL looks like: /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.

Security. Your bidding key is safe to share with traffic sources - it only returns bids. Your management key controls domain lists, stats, and postbacks - keep it private. This prevents traffic sources from manipulating their own bid modifiers by adding themselves to boost lists or removing competitors.

70ms median, 147ms P95. We're built on Cloudflare Workers - your request hits the nearest of 300+ edge locations worldwide. No cold starts, no database round-trips for hot data. Budget and frequency cap checks use KV cache, so they add near-zero latency. Your bids arrive before competitors.

30 minutes or less. Create account, set up a campaign, configure targeting rules, upload domains. The API is backward compatible with most existing systems - often you just change the endpoint URL. Domain lists can be uploaded via dashboard or API (CSV, JSON, or line-delimited text).

Traffic keeps flowing with $0 bids. You never overspend. When the limit resets at midnight (or when you increase it), normal bidding resumes automatically. The dashboard shows exactly how much was blocked and when. No manual restart needed.

Get in Touch

Ready to start optimizing your traffic arbitrage operations?

Email
contact@rtbdomains.com

We'll respond within 24 hours

Response Time

< 24 hours for sales inquiries
< 4 hours for support (Professional+)

Security & Privacy

Your data is encrypted and never shared.

Send Us a Message

Protected by end-to-end encryption with zero-knowledge architecture