RTB (Real-Time Bidding) for Calls
How real-time bidding works for pay-per-call campaigns in Lead Distro AI, and how to set it up. Send each inbound call to the highest bidder, either your own buyers bidding on rules you set, or external routers like Retreaver and Ringba bidding live. Step by step, in plain English.
Call Tracking is in beta, and RTB is the most advanced part of it. If you don't see Calls in your sidebar, or you don't see Real-Time Bidding or Add Dynamic Routing where this guide says to look, email support@leaddistro.ai and we'll switch it on for your account.
This guide explains what RTB (Real-Time Bidding) means for phone calls and walks you through setting it up. If you're brand new to call campaigns, read Call Tracking Setup first, then come back here to add bidding.
What is RTB, in plain English?
With a normal ring tree, you decide the order calls ring: buyer #1 first, then #2, then #3. RTB flips that around. Instead of a fixed order, every call is a tiny auction. The moment a call comes in, each buyer offers a price for it, and the call goes to whoever bids the most. The highest bidder wins the call, the same idea as ping-post for lead data, but for a live phone call.
Why use it? Because the value of a call changes call by call. A call from a buyer's best zip code, at their busiest hour, is worth more to them than a random call at midnight. RTB lets each buyer pay what a call is actually worth to them right now, so you earn more on your good calls instead of billing one flat price for everything.
Simple rule to remember: Ring Tree = fixed order you choose. RTB = the highest bid wins each call.
Two ways to run RTB
Lead Distro AI gives you two flavors of RTB. You can use either one on its own, or both together in the same campaign.
| Built-in RTB | Dynamic Routing (external) | |
|---|---|---|
| Who bids | Your own buyers, already in the app | Outside networks like Retreaver, Ringba, or any webhook router |
| How the bid is decided | A base bid plus rules you set for each buyer (zip, time of day, and so on) | The outside router replies with a live price for that exact call |
| Speed | Instant, nothing leaves Lead Distro AI | We send a quick request to the router and wait for its reply (a fraction of a second) |
| Best for | Selling your own calls to buyers you manage | Plugging into a call marketplace or an existing Retreaver/Ringba setup |
| Where you set it up | Pick Real-Time Bidding when you create the campaign | Click Add Dynamic Routing on the Call Flow tab |
The rest of this guide covers each one. Do Part 1 for your own buyers, Part 2 to connect an outside router, or both.
How an RTB call flows
Here is the whole journey in one line: a caller dials your tracking number, we optionally grab the caller's zip, every buyer (yours and any outside routers) bids on the call at the same time, the highest bidder wins, the call connects to that buyer, and if it lasts past your minimum length it counts as a billable call.
- Call arrives on one of your tracking numbers.
- We gather signals about the call: the caller's number, their area and zip, and the line type. For outside routers you can ask the caller to punch in their zip, or use the zip the phone network provides with no prompt.
- Everyone bids at once. Your own buyers compute a bid from their base price and rules. Any outside routers get a fast request and reply with their own price. A router that is slow or offline simply doesn't bid, so a bad connection never drops the call.
- Highest bid wins. All the bids are ranked top to bottom and the call rings the winner. If the winner doesn't answer, we move down to the next highest bid.
- The call connects and is billed the winning bid, once it passes the minimum duration you set.
Part 1: Built-in RTB (your own buyers bid)
This is the simplest way to start. Your buyers are already in Lead Distro AI, and you let them compete for each call instead of ringing them in a fixed order.
- Step 1: Create a Calls campaign. In the sidebar open Campaigns, click Create Campaign, and choose Calls as the type.
- Step 2: Choose the routing method. In the "How are buyers matched?" dropdown, pick Real-Time Bidding instead of Static Ring Tree. (You can switch an existing calls campaign over later too.)
- Step 3: Name it and create it. Give the campaign a name and vertical, then click Create Campaign.
- Step 4: Add your buyers. On the campaign's Call Flow tab, click Add Target and pick a buyer, just like a ring tree. Add as many as you want to compete.
- Step 5: Set each buyer's bid. In the buyer's Edit Target window, set a base bid (the price they'll pay for a normal call) plus optional rules that raise or limit their bid. Also set the minimum duration and forwarding phone as usual.
- Step 6: Go live. Activate the campaign, put your tracking number on your traffic, and calls now go to the highest bidder automatically.
With built-in RTB the winning buyer is billed their bid from their prepaid wallet, exactly like a normal call. Make sure each buyer's wallet has a balance. See Wallet & Top-Ups.
Part 2: Dynamic Routing (connect an outside router)
Dynamic Routing lets an outside network bid on your calls in real time. It's built to plug straight into Retreaver, Ringba, or any router that speaks a simple web request. When a call comes in, we send the router the caller's details, it replies with a price and a number (or SIP address) to send the call to, and we connect it.
You add a router on the campaign's Call Flow tab by clicking Add Dynamic Routing. Here is what each part of that window does.
Start from a preset
At the top of the window are three preset buttons: Retreaver, Ringba, and Generic webhook. Click the one that matches your router and it fills in almost everything for you (the request style and the fields to read back from the reply). Start here, then just paste in your endpoint and any auth token.
The fields
| Field | What to put in it |
|---|---|
| Router name | A name for this connection, shown in your reports and call trail. For example "Retreaver - Auto Accident". |
| ZIP source | How we get the caller's zip to send to the router. Choose Ask the caller (they punch it in), Use carrier ZIP (no prompt) (silent, from the phone network), or Ask, fall back to carrier ZIP. |
| Endpoint URL | The web address the router gave you for live bids. Pick POST or GET next to it (the preset sets this for you: Ringba uses GET, most others POST). |
| ZIP prompt | The message the caller hears when you ask for their zip, for example "Please enter your 5 digit ZIP code." Only shown if you chose to ask the caller. |
| Auth token / Auth header | Optional. If your router needs an API key or bearer token (your "RTB key"), paste it here and set the header name it should be sent under (usually Authorization). See "What is an RTB Key?" below for a step by step. |
| Request fields | The details we send the router about each call. The preset fills these in. Each row maps the router's field name to a caller detail (caller number, zip, state, line type, and so on) or a fixed value. |
| Response fields | How we read the router's reply. These are the paths to the price, the number to dial, an optional SIP address, the qualifying duration, and the bid ID. The preset fills these in for you. |
| Floor price ($) | A backup price billed if the router accepts a call but doesn't send back a specific bid amount. |
| Priority | Where this router sits when bids tie. Lower rings first. Outside routers usually go ahead of your own buyers. |
| Timeout (ms) | How long we wait for the router to answer before giving up and moving on. Default is 1500 (1.5 seconds). Keep it short so callers aren't left waiting. |
Not sure the connection works? Click Test ping at the bottom. It sends the router one sample call and shows you whether the router answered, whether it accepted, and the price and number it returned. Fix any red result before you save.
When it looks right, click Save target. The router now takes part in every auction on this campaign.
Accepted, or accept-on-bid?
Some routers (like Retreaver) send back a clear yes or no on each call, plus a price. Others (like Ringba) don't send a separate yes/no, they just send a price: any price above zero means they want the call. Lead Distro AI handles both. If you started from a preset, this is already set correctly, so you don't have to think about it.
Outside routers settle payment on their own side, so a Dynamic Routing call does not draw down a Lead Distro AI wallet. You still pay the normal per-minute call time and monthly number rental.
What is an "RTB Key"? (and where you enter it)
If you're coming from Retreaver or Ringba, you've probably heard the term "RTB Key" or "RTB token." In plain English, it's just a password. When two systems talk to each other about live call bids, the key proves it's really you and not a stranger. Nothing more complicated than that.
In Lead Distro AI, you use this key inside the Add Dynamic Routing window you set up in Part 2. It's the Auth token field. You paste your router's key there so we can prove who we are each time we ask that router for a bid.
An RTB key can point in two directions, and Lead Distro AI does both. Connecting out to a router you already have, like Retreaver or Ringba, is what you set up above in Part 2 (the Auth token). Issuing your own key so an outside partner can send calls in to your campaign is the next section.
Setting up your RTB key (auth token)
- Step 1: Get the key from your router. Log in to Retreaver or Ringba and copy your API key or RTB token from their settings. This is the string you'll paste into Lead Distro AI.
- Step 2: Open Add Dynamic Routing. On your calls campaign, go to the Call Flow tab and click Add Dynamic Routing.
- Step 3: Pick your preset. Click Retreaver, Ringba, or Generic webhook at the top so most of the fields fill in for you.
- Step 4: Paste your endpoint, then your key. Paste the router's endpoint URL, then paste your key into the Auth token field. Set the Auth header name it should be sent under. This is almost always
Authorization, and the value usually looks likeBearer your-key-here. - Step 5: Test it. Click Test ping. This sends the router one sample call and shows whether it answered and accepted. If anything comes back red, fix it before moving on.
- Step 6: Save. Click Save target. Your router now bids on every call for this campaign, using your key each time.
If Test ping comes back with "unauthorized" or a 401 error, the key or the header name is wrong. Recopy the key from your router (watch for extra spaces), and double check whether the router wants it under Authorization or a custom header name.
Issuing your own RTB key to a traffic partner
This is the reverse direction. Instead of you connecting out to a router, you generate a key and hand it to an outside traffic partner (a publisher) so they can send calls into your campaign. When one of their callers is ready, their system asks yours for a live bid, your buyers compete in the same auction, and you hand back a price and a phone number for their caller to dial. This is the same idea as Retreaver's "RTB Key" or Ringba's inbound ring tree.
Inbound RTB Keys is in beta. You'll find it as the Inbound RTB Keys card on the Call Flow tab of a Calls campaign. If you don't see it there, email support@leaddistro.ai and we'll switch it on for your account.
- Step 1: Open your Calls campaign and go to the Call Flow tab. Scroll to the Inbound RTB Keys card and click New Key.
- Step 2: Name the key. Use something that says who it's for, like "Acme Media - Auto". This only shows up in your own list.
- Step 3: Set the number to hand back. Enter an Inbound number, a tracking number that routes into this campaign, or a SIP address. This is what the partner's caller will dial once you accept their bid.
- Step 4: Set the hold time and options. TTL is how long you hold the bid and number open for their caller (60 seconds is a good default). Leave Timeout as is. Add a Tag prefix (like
pub_) if you want the partner's extra info kept separate from your own fields. - Step 5 (optional): Flip the toggles. "Route only to reserved buyer" rings just the winning buyer on the real call. "Return DBA" sends the buyer's business name back to the partner. The defaults are fine for most setups.
- Step 6: Create the key. Click Create key. You'll see a POST URL and a secret token. Copy both now, the token is shown only once. If you lose it, delete the key and make a new one.
- Step 7: Give the partner the details. Send the partner the POST URL and the token. They send the token in a header called
x-rtb-keyon each bid request. - Step 8: Test it. Back on the card, click the flask icon next to your key. It runs a pretend bid request and tells you whether a partner would get a bid right now, and for how much. Fix anything before you go live.
Here is what the partner sends and gets back, so you can pass it along to their tech team.
curl -X POST https://www.leaddistro.ai/api/v1/call-rtb \
-H "x-rtb-key: rtb_your_secret_token" \
-H "Content-Type: application/json" \
-d '{ "caller_number": "+13055551234", "tags": { "state": "FL", "zip": "33101" } }'
# Response when a buyer bids:
# {
# "accepted": true,
# "bid": 12.50,
# "number": "+13055559999",
# "reservation_id": "...",
# "expires_in": 60
# }
# The partner then sends their caller to the returned number before it expires.Pass the caller's state and zip as tags (shown above). Your buyers' bid rules use them, so a partner that shares location usually gets a higher, more accurate bid. If the partner sends no bid-worthy call, they simply get accepted: false and route it elsewhere, nothing is charged.
Mixing your buyers and outside routers
You don't have to choose one or the other. On an RTB calls campaign you can have your own buyers AND one or more outside routers, and they all compete in the same auction. Every bid, from a buyer or a router, lines up in one list and the highest bid wins. A $12 bid from an outside router beats an $11 bid from one of your buyers, and the other way around.
- One combined auction. All bids are ranked together, highest first, on every single call.
- Always a fallback. If no outside router bids (they're slow, offline, or pass), your own buyers still compete, so the call is never lost.
- Full record. Every call's log shows who bid, how much, and who won, so you can see exactly why a call went where it did.
When to use RTB instead of a Ring Tree
| Use a Ring Tree when | Use RTB when |
|---|---|
| You want a set order (send to my best buyer first, then overflow) | You want the market to decide, top dollar wins each call |
| Buyers all pay a similar flat price | Buyers value calls differently by area, hour, or source |
| You manage a small, fixed set of buyers | You're plugging into a call marketplace or network |
| Simplicity matters most | Maximizing revenue per call matters most |
Frequently Asked Questions
What's the difference between built-in RTB and Dynamic Routing?
Do I need a Retreaver or Ringba account to use RTB?
What happens if an outside router is slow or down?
How is an RTB call billed?
Can I collect the caller's zip for better bids?
Does RTB support SIP, not just phone numbers?
Can I switch an existing calls campaign to RTB?
What's an RTB key and do I need one?
Can I give a partner a key to send me calls?
Is my RTB key token safe to share?
Related Articles
If you have any questions, send us an email at support@leaddistro.ai