Monetize your

Marketplace

App

Website

Game

Community

Don’t dream of a better ad tech stack: own one. Drive higher revenue with faster site performance and scalable growth.
Learn More

Trusted by innovative brands around the world

Klarna Logo
Ticketmaster Logo
El Corte Ingles Logo
Edmunds Logo
Leroy Merlin Logo
Strava Logo
Imgur Logo
Yelp Logo
Wetransfer Logo
Chairish Logo

Test out our APIs today

No API key needed!
Fast response time
Privacy-first
Fully white labeled
Saas pricing
Learn More
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

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
Success Stories Edmunds

+30%

Revenue Growth

9x

Faster launch than from scratch

Maximize revenue.
Save time. Save cost.

Quick launch
Launch an MVP in a couple of weeks, without hiring more engineers.
Flexible platform
Easily add new features to your homegrown solution.
Bypass ad blockers
Bypass ad blockers with ad server APIs.
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

Get started now

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