In the article below, we will take a closer look at the peculiarities of creating SSP/Feed ad inventory.
The SSP/Feed ad inventory allows publishers to send ad requests from their servers.
When a user opens a new page of a site or application, the SSP system sends a request to the platform. It contains information about the user, the type of advertisement, and its placement. Request formats look different. Here is just one example:
http://saf3stplace.com/ssp/feed
?token=cf3bf0985e5f0bcf82328c32430d58ba4a0197a8
&ua=Mozilla%2F5.0%20%28Macintosh%3B%20Intel%20Mac%20OS%20X%2010_13_5%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F67.0.3396.87%20Safari%2F537.36
&ip=78.140.149.211
&count=12
&type=banner
As soon as the platform receives the request, it sends the offer to the ad impression as a response. It might look like this:
[
{
"bid": 0.000015,
"adm": "<iframe src=\"http://kaasdad.com/rtb/s/AAAvXl5FlAAAXRgCAE5MMwASAI2OUG0A\" width=\"100%\" height=\"100%\" frameborder=\"0\" scrolling=\"no\" style=\"border: none;\" seamless></iframe>",
"ttl": 360,
"creative_id": "372ea08cab"
}
]
Responses may vary. Below we will consider the possible options.
SSP allows owners of advertising platforms to bid in real time, choosing the most advantageous offers from advertisers. Advertisers, in turn, gain access to large publishers and a large amount of traffic.
Creation of Ad Inventory #
Before creating an ad inventory, make sure that you already have a publisher account. He can independently register an account via the main page of the affiliate program website, or you register it via the Salematics platform.
Click on the Create button to create a new ad inventory.
Block Administration #
Select the appropriate publisher. Specify its ID or name in the search field with the same name. The platform will fill in the line Affiliate program automatically because the publisher will already be tied to one of the programs.
The platform checks traffic quality by default. You can use it to enable and disable the test landing page. If you are sure that the publisher sends high-quality traffic only, untick the box.
Each new ad inventory has Active status by default. If an ad inventory violates the rules, then after its creation, it can be rejected. The ad inventory will be blocked, and the publisher will not be able to send traffic to it. You can also select the status Deleted. In this case, the system will completely delete the ad inventory. This action can’t be undone.
Go to the Information block, select Ssp/Feed, and click the Select and Continue button.
New settings will appear in the Administration block. Let’s work with them.
Select the template based on which the system will generate UTM Source from the Utm source drop-down list:
- Unified for platform. Select this option if the ad inventory is located on one domain.
- Depends on domain. Select this option if the same ad inventory is placed on a few domains. Make sure that domain names are being passed. You can check it in the Filters — Domains block after the ad inventory will start to receive traffic.
- Depends on S1.
- Depends on S2.
- Depends on S1 and S2.
You can set the type to Unified for platform. However, we recommend that you agree with the publisher to pass the parameters S1 and S2. Below we will tell you more about these parameters.
As soon as you make sure that the publisher passed the parameters, check the new, appropriate template in Utm source.
Using the Enable the trader bot option, you can dynamically change the rate that the platform passes as a response for SSP. This functionality allows you to increase revenue by reducing the real bid for an ad impression. Let’s take a closer look at this setting, using a specific example.
Suppose that an advertiser is ready to pay $1 for an ad impression. You set 70% RevShare for the publisher. This means that he will receive $0.7 in response to an ad request.
If you enable the trader bot setting, the bid that passes to the publisher will gradually decrease. In this case, the bid in the next response will be lower than $0.7. As an response for SSP, the platform will select minimum bid with which you win at SSP 80% of auctions.
At the same time, the maximum bid value cannot exceed the advertiser’s bid multiplied by the publisher’s RevShare. In this case, the bid will not be more than $0.7.
Please note: find out what type of auction is used by SSP. If you use second-price auction working with SSP, then disable trader bot.
You can specify the share of payout for the ad inventory in the field Revshare from advertiser bid.
Please note: if the publisher starts to work, using the second price auction, you can set payout for it up to 1, which means 100%. This will increase the share of auction winnings for ad impressions because the bid that will be passed to the publisher will increase. Besides, it will not have an additional commission. Nevertheless, you will continue to receive revenue from ad impressions because if you win the auction, you will have to make a payment in the amount of the second bid.
Choose the protocol in the drop-down list with the same name. The ad request and response format will use it. The list of protocols is constantly expanding. Let’s look at the most popular types:
- BDA Feed is the protocol of the Salematics platform. It supports working with the following types of advertisements: Banner, Directlink, Push, Vast, Teaser, and Text Ad.
- OpenRTB is an open protocol created by the IAB company. You can use Banner, Directlink, Push, Vast, and Teaser.
For example, we select the BDA Feed protocol. We will take a closer look at the OpenRTB later.
Use the BDA Feed protocol when the publisher does not have specific requirements for the format of requests and responses. If the publisher needs a certain type of protocol, select it from the list. If you didn’t find a certain type of protocol, contact our manager, who is assigned to you, with the corresponding request.
Select the type of advertising that the publisher requests from the proposed RTB platform type list.
The daily buyback limit allows you to set the maximum amount of traffic that the ad inventory can buy out per day. It is in USD (United States dollar).
In the Payment type, you can note the event, for which the publisher will get a commission. There are several payment methods available for RTB platform types. You can set a specific method, depending on the agreement with the publisher.
QPS is the number of queries per second. We do not recommend specify QPS more than 60 for new ad inventories. You can change the previously specified value after the test of ad inventories.
In the Timeout (ms.) field, you need to specify the time in milliseconds. This is the time for which the platform will respond to a request from the publisher. The platform processes all requests for 400 ms by default. Some publishers don’t want to wait that long, so you can set a limit manually. This is necessary when the publisher does not pass the Timeout value in the request.
When working with SSP/Feed ad inventories, you have to deal with a large number of requests that do not bring significant income. Use dynamic QPS to reduce the burden on the platform.
The setting allows you to automatically reduce the number of calls to DSPs and processed requests from SSPs that do not bring sufficient profit.
Traffic that comes from the SSPs and is sent to the DSPs is divided into clusters. The platform calculates ROI of 1 million requests for each cluster. Clusters are based on:
- ad inventory, country, and UTM Source;
- ad inventory and country;
- ad inventory;
- country.
If the estimated income from 1 million requests in the group is less than $0.25, QPS will be limited to 1000 requests per day.
If you tick the Enable auto QPS box, you will be able to configure the automatic change of QPS.
In the line Ping time (in ms.), you set the average time delay between sending and receiving a request. The platform automatically sets the 30 ms value. Using the functionality, the request time is reduced. For example, a publisher sends a request with a timeout of 200 ms. The average ping time is 50 ms. Therefore, only 150 ms remains to respond to the publisher’s request. The setting is useful when there is the following problem: publishers sent a request to advertisers but they didn’t wait for a response.
The List of priority campaigns allows you to influence what kind of advertising will be displayed on the ad inventory. Suppose you want users to see mobile offers on an APK website first, and then everything else. In this case, you can specify the ID of advertising campaigns that will be in priority.
Click on the No ID field to add campaign IDs. Specify a list of IDs (comma-separated) and click Save and continue.
IAB categories is a required setting. Indicate one or a few categories to which the campaign belongs. We recommend selecting no more than 10 categories. IAB categories are required for more precise targeting.
If you can not determine a category, set the IAB24 – Uncategorized or IAB1 – Arts & Entertainment, because they have a very broad definition. If the campaign contains sexually explicit material, select IAB25-3 – Pornography. In this case, only adult sites will display the campaign.
Block Information #
The next section is Information. First, specify the appropriate name of the ad inventory in the corresponding field.
Do not change the Type column, because you specified it earlier.
Now let’s move to Traffic types. Here you can select the type of traffic that you want to receive. You can see the following options in the drop-down list:
- All devices;
- Mobile only;
- Desktop only.
If you select All devices, both mobile and desktop users will see ads. If you select Mobile only, only mobile users will see ads.
Block Filters #
In the section Language matching, you can specify the preferred browser language. Let’s say a person is in the UK and uses a browser in English. The language is regular. If under the same conditions, the browser language is Russian, then this is an irregular language. If you want to target only the British, the setting will allow you to avoid, for example, tourists, travelers, or foreigners.
Also, the block Filters contains several settings: Browsers, Devices, GEO, Languages, Ref. domains, Application IDs, Application Names, Campaign IAB. IP, Campaign IDs, ISP, Carrier, Vendor, Device Names, S1 parameter, S2 parameter, and UTM Source. With their help, you can, for example, specify a list of appropriate browsers, domains, or devices from which traffic will or will not be received. When this ad inventory begins to work, you will be able to analyze its quality in this section. You can learn more about this process in the article Quality control of publisher’s ad inventories using the Quality tab (coming soon).
Let’s take a closer look at the special parameters S1 and S2 that are passed with a click. When working with SSP/feed ad inventories, we recommend that publishers substitute in the S1 parameter the ID/name of the ad inventory or application where the promotion is displayed. If the ad inventory sends requests on behalf of several publishers, the parameter S2 must contain the publisher ID.
The database receives this information and sends it to the advertiser for further work. Filtering by the parameters S1 and S2 can be set in the future.
Another parameter is UTM Source. It is a hash sum of values: domain + S1 + S2. It can be used for the advanced setting of white/blacklists. You can set the conditions for UTM Source in the Administration block.
Block Filters for traffic sources #
Let’s move to the JSTDS filters. you can find them in the Filters for traffic sources block. With their help, you can block low-quality requests for an ad impression. More information about filters you can find in the article Setup JSTDS filters in campaigns. The process of their setup on ad inventories will be similar.
Please keep in mind that filters are especially effective when working with SSPs. If the ad inventory sends a request that did not pass the filter, the platform will return a response code of 204 and will not provide advertising.
Please note: when creating an SSP/Feed ad inventory with the type Directlink, the platform automatically installs JSTDS filters. If you want, you can change the filtering settings.
Block Optimization and rules #
You can set rules for filtering UTM Source and ISP in Optimization and Rules. Creating conditions allows you to more flexibly configure publisher ad inventories and filter sources that do not meet quality criteria.
You can read more about the rules in the article How to set up automated rules in campaign. There you will find examples of setting up automatic rules for campaigns. The process of creating conditions for ad inventories is similar.
Block Integration #
The last block contains the Postback URL and Trafficback fields. Skip them because you do not need them from the SSP/Feed ad inventory.
As soon as you inserted all the necessary information, click the Create button.
BDA Feed Protocol Connection #
Now go to the Connection section. It contains a Feed, examples of request, and Feed Documentation.
There are specific requirements for sending a request for each type of promotional material. You can read the rules in the following documents:
- Push — http://mediaoaktree.com/docs/feedpush.pdf.
- Banner — http://mediaoaktree.com/docs/feed_banner.pdf.
- Teaser — http://mediaoaktree.com/docs/feed_native_ad.pdf.
- Text Ad — http://mediaoaktree.com/docs/feed_text_ad.pdf.
- Video (Vast) — http://mediaoaktree.com/docs/feed_video.pdf.
- Directlink — http://mediaoaktree.com/docs/feed.pdf.
Let’s look at sending requests for the banner impression.
First of all, you will need a link to the Feed, which you received after creating the ad inventory:
http://safe.ghosttown-24.com/ssp/feed?token=569884bb89e63820a948179d3891fac739b1cdb5&type=banner
To request an ad impression, you have to add the required parameters to the link:
- ua is User Agent. He will see promo material;
- ip is User IP;
- count is the number of ad units in response to a request;
- type is a type of promo. In our case, it is a Banner;
- w is the width of the container to insert banner;
- h is the height of the container to insert banner.
The response to the request comes in JSON format by default. If you want a response in XML format, add the format = xml parameter to the request.
When working with large volumes of traffic, it is important to pass additional information about its sources. There are parameters on the platform for that:
- S1 is a site ID;
- S2 is a publisher ID.
The final request will look like this:
http://safe.ghosttown-24.com/ssp/feed?token=569884bb89e63820a948179d3891fac739b1cdb5&ua=Mozilla%2F5.0%20%28Macintosh%3B%20Intel%20Mac%20OS%20X%2010_13_5%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F67.0.3396.87%20Safari%2F537.36
&ip=200.0.200.1
&count=2
&format=xml
&type=banner
&w=300
&h=250
&s1=3423424
&s2=44554
You will get this as a response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<item>
<bid>1e-05</bid>
<adm><img src="http://kaasdad.com/rtb/p/p/AN_7gV5xlwAAXRgCAEFSMwASAA3xtbMA" style="display: block !important;width: 1px !important;height: 1px !important;" /><iframe src="http://kaasdad.com/rtb/s/AN_7gV5xlwAAXRgCAEFSMwASAA3xtbMA" width="100%" height="100%" frameborder="0" scrolling="no" style="border: none;" seamless></iframe></adm>
<ttl>360</ttl>
<creative_id>372ea08cab</creative_id>
</item>
<item>
<bid>1e-05</bid>
<adm><img src="http://kaasdad.com/rtb/p/p/AN_7gV5xlwAAXRgCAEFSMwASAGr5SiQA" style="display: block !important;width: 1px !important;height: 1px !important;" /><iframe src="http://kaasdad.com/rtb/s/AN_7gV5xlwAAXRgCAEFSMwASAGr5SiQA" width="100%" height="100%" frameborder="0" scrolling="no" style="border: none;" seamless></iframe></adm>
<ttl>360</ttl>
<creative_id>372ea08cab</creative_id>
</item>
</response>
OpenRTB Protocol Connection #
It is possible to work on the platform using the OpenRTB protocol with version 2.5. You can read about the features of the version in the official documentation. IAB.
Select OpenRTB from the Protocol drop-down list located in the ad inventory settings.
Select the appropriate format of promotional material in the list RTB platform type.
As soon as you inserted all the necessary information, click the Create button.
Now go to the Connection section. Here you can find a link to the Feed. You need to use this to send POST requests.
Below you can see a sample of requests for OpenRTB protocol types.:
OpenRTB — Directlink
{
"id": "5e5fa72015a1761be08e0ad3",
"imp": [
{
"id": "0fe150919e19544ec667a924cd776228faa5741b",
"instl": 1,
"secure": 1
}
],
"site": {
"id": "5d8e0b6861d6e264f23569a8",
"name": "Popunder",
"domain": "kaya.com",
"cat": [
"IAB25"
],
"page": "https://kay.com/kay/",
"publisher": {
"id": "5d8e0afa61d6e26523233be5"
}
},
"device": {
"ua": "Mozilla/5.0 (Linux; Android 9; vivo 1901) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
"geo": {
"country": "PH"
},
"ip": "110.54.192.229",
"devicetype": 4,
"os": "Android",
"language": "en-us"
},
"user": {
"id": "5d568e4a9560f0d691ec61d7500c02cb"
},
"at": 1,
"cur": [
"USD"
]
}
«OpenRTB» — «Banner»
{
"id": "fyrgcifdknkrom5prg8",
"allimps": 1,
"imp": [
{
"id": "1",
"banner": {
"format": [
{
"w": 970,
"h": 250
}
],
"w": 970,
"h": 250,
"pos": 0,
"topframe": 1,
"battr": []
},
"secure": 1,
"tagid": "ksitl06",
"ext": {
"wseat": []
}
}
],
"site": {
"id": "u52lea",
"name": "ka 300x250 бэкфилл",
"domain": "https://www.kinoa.info",
"page": "https://www.kinoa.info/articles/rezko-postarevshaya-lyaysan-utyasheva-ispugala-poklonnikov-odutlovatym-licom/?yrwinfo=1583326365223531-903408995941251710300067-vla1-0355",
"cat": [
null
],
"sectioncat": [
null
],
"publisher": {
"id": "9",
"name": "https://www.kinoa.info"
}
},
"device": {
"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 OPR/66.0.3515.115",
"geo": {
"lat": 37.9787,
"lon": -0.6822,
"type": 2,
"country": "ES",
"region": "VC",
"city": "Torrevieja"
},
"dnt": 0,
"lmt": 0,
"ip": "31.44.159.188",
"devicetype": 2,
"os": "Windows",
"osv": "10",
"h": 900,
"w": 1440,
"pxratio": 1,
"js": 1,
"language": "ru-RU",
"connectiontype": 1
},
"user": {
"buyeruid": "5bvv7ls8-vwij-tf6s-95qo-01p3gvftm3x",
"id": "37e8lwah1825o70noe7xba3oijyk6t"
},
"at": 1,
"tmax": 300,
"wseat": [],
"cur": [
"RUB",
"USD"
],
"bcat": [],
"badv": []
}
OpenRTB — Push
{
"id": "AG6vX15peQAAAAAAAElOAgApAEsJ3Y4A",
"imp": [
{
"id": "AG6vX15peQAADyUCAElOAgApAOlfEqUA",
"native": {
"request": "{\"native\":{\"ver\":\"1.1\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":25}},{\"id\":2,\"required\":1,\"data\":{\"type\":2,\"len\":255}},{\"id\":3,\"data\":{\"type\":11,\"len\":255}},{\"id\":4,\"img\":{\"type\":1,\"wmin\":50,\"hmin\":50}},{\"id\":5,\"img\":{\"type\":3,\"wmin\":450,\"hmin\":450}}]}}",
"ver": "1.1"
},
"bidfloor": 0.01,
"bidfloorcur": "USD",
"secure": 0,
"ext": {
"click_id": "AG6vX15peQAADyUCAElOAgApAOlfEqUA",
"short_click_id": "aXkAAA8lAgBJTgIAKQA",
"pr_id": 140559,
"promo_type": "push",
"pr_type_id": 130,
"cover_rate": 1
}
}
],
"site": {
"id": "31081",
"name": "messange.win",
"domain": "messange.win",
"cat": [
"IAB1",
"IAB24"
],
"publisher": {
"id": "66313"
},
"page": "https://messange.win/service-worker.js"
},
"device": {
"ua": "Mozilla/5.0 (Linux; Android 9; Redmi Note 7 Pro Build/PKQ1.181203.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36",
"geo": {
"lat": 28.91,
"lon": 76.4767,
"type": 2,
"ipservice": 3,
"country": "IN"
},
"ip": "157.36.118.253",
"devicetype": 4,
"os": "Android",
"language": "en",
"carrier": "Jio"
},
"user": {
"id": "dcbd22b2227d381082819274d905e529da044434",
"ext": {
"subscribed_at": 1576932253,
"subscription_id": 7700596
}
},
"at": 1,
"tmax": 1500,
"cur": [
"USD"
],
"ext": {
"wm_id": 66313,
"pl_id": 31081,
"os_id": 2,
"lang": "en-US",
"lang_id": 12,
"pl_type_id": 102,
"city_id": 10552071,
"br_id": 41,
"isp": "Jio",
"utm_source": "3c35e625e29c72b0",
"a_pr_id": 0
}
}
OpenRTB — Teaser
{
"id": "AFOIXV5ydgAAAAAAAEZSKAASAKYHJPIA",
"imp": [
{
"id": "AFOIXV5ydgAAsCUCAEZSKAASAAF3oh0A",
"native": {
"request": "{\"native\":{\"ver\":\"1.1\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":25}},{\"id\":2,\"required\":1,\"data\":{\"type\":2,\"len\":255}},{\"id\":3,\"data\":{\"type\":11,\"len\":255}},{\"id\":4,\"required\":1,\"img\":{\"type\":3,\"wmin\":50,\"hmin\":50}}]}}",
"ver": "1.1"
},
"bidfloor": 0.01,
"bidfloorcur": "USD",
"secure": 1,
"ext": {
"click_id": "AFOIXV5ydgAAsCUCAEZSKAASAAF3oh0A",
"short_click_id": "cnYAALAlAgBGUigAEgA",
"pr_id": 140720,
"promo_type": "teaser",
"pr_type_id": 107,
"cover_rate": 1
}
}
],
"site": {
"id": "30322",
"name": "film.tv",
"domain": "film.tv",
"cat": [
"IAB1",
"IAB24"
],
"publisher": {
"id": "65603"
},
"keywords": "New video",
"page": "https://film.tv/ano/2018/page/5/",
"search": "New Video - Page 5 out of 27 - film.tv"
},
"device": {
"ua": "Mozilla/5.0 (Linux; Android 7.0; Moto C Plus) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.99 Mobile Safari/537.36",
"geo": {
"lat": 48.865,
"lon": 2.3377,
"type": 2,
"ipservice": 3,
"country": "FR"
},
"ip": "83.137.2.243",
"devicetype": 4,
"os": "Android",
"osv": "7.0",
"language": "es",
"carrier": "Lycatel Distribution Uk Limited"
},
"user": {
"id": "da1c174c46f070904d930e4104fb0dc760c219e5"
},
"at": 1,
"tmax": 876,
"cur": [
"USD"
]
}
Checking request logs #
Request logs are available in the settings of the ad inventory, where you can find the last 10 requests for each HTTP response code. They are in the section with the same name.
The platform shows the following response codes:
- 200 shows that the request was successful. You can see the request and response in this block.
- 204 indicates that the request was successful, but the server couldn’t pick an ad for it, or an error occurred. The code is used when working with the OpenRTB connection protocol.
- 302 code is not relevant for SSP / Feed ad inventories.
- 400 indicates that the server could not determine the request due to invalid syntax, or the request doesn’t have the required parameters. The cause of the error you can find in the response body.
- 404 means that the server returns the code and the response body with the message not found if the advertisement for XML-feed is not picked. The situation is similar to the code 204 for OpenRTB.
- 429 is the response status code. It indicates that the user has sent too many requests in a specified time interval. Code may occur when the QPS field contains a value that is lower than the number of requests sent by the publisher. In this case, ask the publisher to reduce the number of requests. You can also agree with the assigned manager to increase the channel capacity for your affiliate program.
Let’s summarize the material:
- When you set up the ad inventory, you can use the BDA Feed, or OpenRTB protocol. You can connect using a different protocol by writing to an assigned manager.
- We do not recommend specifying a QPS value above 60 for all new ad inventories.
- If possible, ask publishers to pass the parameters S1 and S2. If the publisher began to pass them, select the appropriate option from the Utm source drop-down list.
- Once the ad inventory launches, check its operability using the Request Logs section and the Requests tab. This tab is located under the Optimization link in the Filters block.