Introducing
The Retail Media CloudTM
Built for Retailers, Marketplaces, and eCommerce
Powered by the Kevel Ad Server and Kevel Audience for launching targeted, attributable, customizable ad formats. Stand out to advertisers with your owned, differentiated, custom retail media network.
OUTCOMES
Why Retailers Build on The Cloud
Make our tech your own. The Retail Media CloudTM provides all the resources you need to launch your custom retail media program.
Your ads, your way
API-first means you maintain total control of what ads appear on your site and to which audiences.
Fast track your ad stack
Get to market faster with products that integrate seamlessly into your current stack.
Revenue that stays in your pocket
We don’t punish you for growth–with SaaS pricing, you pay for tech, without a tax on your performance.
Soc 1 and 2 compliant
Industry-leading data compliance means top-of-line data security.
Don’t forfeit your data to use it
We never learn from your data or force our own data modeling on your unique network.
Bring your own ML models
You know your customers best. Use your own data confidently and securely.
AD UNITS
Build beyond traditional ad formats
Ditch the awkward white space. Create fast-loading, server-side ad units custom-built for your site and your shoppers.
Sponsored Listings
Native Banner Companion
Video Sponsored Shelf
Email Banner
Digital In-Store
8598
different ad units powered by Kevel (and counting)
<
50
ms
average p95 latency
0
ads blocked
import adzerk_decision_sdk
# Demo network, site, and ad type IDs; find your own via the Kevel UI!
client = adzerk_decision_sdk.Client(23, site_id=667480)
request = {
"placements": [{"adTypes": [5]}],
"user": {"key": "abc"},
"keywords": ["keyword1", "keyword2"],
}
response = client.decisions.get(request)
print(response)
<!DOCTYPE >
<html>
<head>
<title>Kevel Decision API - JavaScript Request</title>
<script type="text/javascript" src="https://unpkg.com/@adzerk/decision-sdk/dist/adzerk-decision-sdk.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
requestNativeAd = function() {
// Demo network, site, and ad type IDs; find your own via the Kevel UI!
let client = new AdzerkDecisionSdk.Client({
networkId: 23,
siteId: 667480
});
let request = {
placements: [{
adTypes: [5]
}]
};
client.decisions.get(request).then(response => {
let decision = response.decisions.div0[0];
// Inject ad contents into page
$("#div0").replaceWith(decision.contents[0].body);
$("#response").text(JSON.stringify(response));
$("#clickUrl").text(decision.clickUrl);
// Record the impression
client.pixels.fire({
url: decision.impressionUrl
});
}).catch(error => {
console.log("ERROR!", error.toString());
});
};
</script>
</head>
<body>
<h1>Kevel Native Ad Request</h1>
<p>Press the button to make an ad request, record the impression, and display both the internal JSON and HTML payload of the response. The response includes data like Impression URL, Click URL, Campaign ID, Metadata, and more. (Note: May not work if you're using an ad blocker).</p>
<button type="button" onclick="requestNativeAd()">Request Ad</button>
<hr />
<h4>Image:</h4>
<div id="div0">
<code>(Nothing yet; please click the button!)</code>
</div>
<h4>JSON Response:</h4>
<code id="response">(Nothing yet; please click the button!)</code>
<h4>Click URL:</h4>
<code id="clickUrl">(Nothing yet; please click the button!)</code>
</body>
</html>
package com.adzerk.examples;
import java.util.*;
import com.adzerk.sdk.*;
import com.adzerk.sdk.generated.ApiException;
import com.adzerk.sdk.generated.model.*;
import com.adzerk.sdk.model.DecisionResponse;
public class FetchAds {
public static void main(String[] args) throws ApiException {
// Demo network, site, and ad type IDs; find your own via the Kevel UI!
Client client = new Client(new ClientOptions(23).siteId(667480));
Placement placement = new Placement().adTypes(Arrays.asList(5));
User user = new User().key("abc");
DecisionRequest request = new DecisionRequest()
.placements(Arrays.asList(placement))
.keywords(Arrays.asList("keyword1", "keyword2"))
.user(user);
DecisionResponse response = client.decisions().get(request);
System.out.println(response.toString());
}
}
import { Client } from "@adzerk/decision-sdk";
// Demo network, site, and ad type IDs; find your own via the Kevel UI!
let client = new Client({ networkId: 23, siteId: 667480 });
let request = {
placements: [{ adTypes: [5] }],
user: { key: "abc" },
keywords: ["keyword1", "keyword2"]
};
client.decisions.get(request).then(response => {
console.dir(response, { depth: null });
});
require "adzerk_decision_sdk"
# Demo network, site, and ad type IDs; find your own via the Kevel UI!
client = AdzerkDecisionSdk::Client.new(network_id: 23, site_id: 667480)
request = {
placements: [{ adTypes: [5] }],
user: { key: "abc" },
keywords: ["keyword1", "keyword2"],
}
pp client.decisions.get(request)
(ns example-ad-request
(:import (com.adzerk.sdk Client ClientOptions)
(com.adzerk.sdk.generated.model DecisionRequest Placement User)))
(defn -main []
; Demo network, site, and ad type IDs; find your own via the Kevel UI!
(let [client (Client. (doto (ClientOptions. (int 23)) (.siteId (int 667480))))
request (doto (DecisionRequest.)
(.placements [(doto (Placement.) (.adTypes [5]))])
(.keywords ["keyword1" "keyword2"])
(.user (doto (User.) (.key "abc"))))
response (-> client (.decisions) (.get request))]
(println response)))
curl -H 'Content-Type:application/json' \
-X POST \
-d '{"placements":[{
"divName":"div1",
"networkId":23,
"siteId":667480,
"adTypes":[5]}],
"user":{"key":"abc"}}' \
\
https://e-23.adzerk.net/api/v2
Ready to get started?
Talk to one of our experts today. Learn how The Retail Media CloudTM can supercharge your retail media network or review our documention.