Monetize your

Marketplace

App

Website

Game

Community

Own the ad tech stack you actually want. Monetize better, while delivering improved site performance.

Let's Talk

Trusted by innovative brands around the world

logo klarnalogo ticketmasterlogo el corte ingleslogo edmundslogo leroy merlinlogo stravalogo imgurlogo yelplogo wetransferlogo delivery hero

Test out our APIs today

No API key needed!
orange check icon
Fast response time
orange check icon
Privacy-first
orange check icon
Fully white labeled
orange check icon
Saas pricing
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 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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
  
Ad Units

Build better ads

Actually improve UX with your ad business. Attract innovative advertisers by offering a variety of ad units that integrate seamlessly and achieve high relevancy with first-party data targeting.
Kevel Ad Formats Sponsored Listings
Sponsored listings
Blend sponsored listing ad units with existing listings for eye-catching visuals that boost sales. Sponsored ad units are a surefire way to monetize listings.
Kevel Ad Formats Native Ad
Native Ads
Native ads blend in with website content, promoting products or services subtly. The congruency between site and ads improves user experience, enhancing click-through rates.
Kevel Ad Formats Vide
Video Ads
Video ads are a highly engaging ad unit and are expected to have higher CPMs, leading to more revenue for publishers and advertisers alike.
Kevel Ad Formats DOOH
Digital Out-Of-Home Ads
Digital out-of-home ads provide high visibility and engagement in public spaces. They're interactive, targeted, and flexible, allowing real-time updates and responses to market trends.
Kevel Ad Formats Email
Email Ads
Email ad placements are seamless, non-intrusive, measurable, and easily automated, enabling consistent revenue generation with minimal effort.
Kevel Ad Formats Personalized
Display Ads
With eye-catching visuals and strategic placement in high-traffic areas, you can engage potential customers on the go and increase brand awareness like never before.
Learn More
chevron right icon
Customers

Success stories

Kevel’s APIs provide the core infrastructure for ad serving, targeting, and reporting. Don't reinvent the wheel

"With Kevel, we built a custom ad platform that drove 30% more revenue for our marketplace”

— Director of Ad Engineering, Edmunds
Case Study Image

+30%

Revenue Growth

9x

Faster launch than from scratch

Maximize revenue.
Save time. Save cost.

Quick Launch Icon
Quick launch
Launch an MVP in a couple of weeks, without hiring more engineers.
Flexible platform icon
Flexible platform
Easily add new features to your homegrown solution.
Bypass ad blockers Icon
Bypass ad blockers
Bypass ad blockers with ad server APIs.
Automation Icon
Automation
Automate your current manual processes.
Awards & Reviews

Award-winning company and tech

Kevel is rated 4.5/5 stars on 42 G2 reviews
Martech Breakthrough Award 2022
G2 High Performer Summer 2021
Bronze 2021 Stevie Winner
Inc. Best Work-places 2021
G2 High Performer Winter 2023
Globee awards gold winner 2021
G2 review
G2 Review
G2 Review
G2 Review
G2 Review
G2 Review

Get started now

Maximize revenue. Save time. Save cost.
Try Kevel Now