BidderΒΆ

The Bidder engine is the key component of the RTB4FREE platform. It interfaces directly with the SSP exchanges using OpenRTB protocols or proprietary protocols, if necessary, such as Google AdX or OpenX.

The bidder is is a Java version 1.8, and supports OpenRTB version 2.5. The source code with program description can be found here: https://github.com/benmfaul/XRTB

The Bidder features include:

  • OpenRTB 2.5 Compliant.
  • Supports many SSPs.
  • Supports SSL.
  • Supports GZIP Compressed Bids.
  • Simplified standalone Bidder Management.

The Bidder can operate as a stand-alone system. Campaigns and Exchange interfaces can be defined in its configuration files - see the github source or the demo instructions on this site for detail on how to set up these files.

A sample configuration file, stored at Campaigns/payday.json.

{
  "NOfraud" : {
    "type" : "forensiq",
    "threshhold" : 0,
    "ck" : "none",
    "endpoint" : "",
    "bidOnError" : false,
    "db" : "local/GeoIP2-ISP.mmdb",
    "watchlist" : [ "Hetzner", "Amazon web services", "Linode", "Digital Ocean", "Vultr" ]
  },
  "app" : {
    "indexPage": "$INDEXPAGE",
    "concurrency" : "3",
    "threads": "2000",
    "stopped" : false,
    "deadmanswitch": "$ACCOUNTING",
    "ttl" : 300,
    "pixel-tracking-url" : "$EXTERNAL/pixel",
    "winurl" : "$EXTERNAL/rtb/win",
    "redirect-url" : "$EXTERNAL/redirect",
    "vasturl" : "$EXTERNAL/vast",
    "eventurl" : "$EXTERNAL/track",
    "postbackurl" : "$EXTERNAL/postback",
    "adminPort" : "$ADMINPORT",
    "adminSSL" : false,
    "password" : "startrekisbetterthanstarwars",
    "zeromq" : {
      "bidchannel" : "kafka://[$BROKERLIST]&topic=bids",
      "winchannel" : "kafka://[$BROKERLIST]&topic=wins",
      "requests" : "kafka://[$BROKERLIST]&topic=requests",
      "clicks" : "kafka://[$BROKERLIST]&topic=clicks",
      "pixels" : "kafka://[$BROKERLIST]&topic=pixels",
      "videoevents": "kafka://[$BROKERLIST]&topic=videoevents",
      "postbackevents": "kafka://[$BROKERLIST]&topic=postbackevents",
      "status" : "kafka://[$BROKERLIST]&topic=status",
      "reasons" : "kafka://[$BROKERLIST]&topic=reasons",

      "commands": "tcp://$PUBSUB:6001&commands",
      "responses": "tcp://$PUBSUB:6000&responses",
      "xfrport": "6002",
      "frequencygoverner": "$FREQGOV",

      "requeststrategy" : "$REQUESTSTRATEGY"
    },

    "template" : {
      "default" : "{creative_forward_url}",
      "exchange" : {
        "adx" : "",
        "mobclix" : "",
        "nexage" : "",
        "smartyads" : "{creative_forward_url}",
        "atomx" : "{creative_forward_url}",
        "adventurefeeds" : "{creative_forward_url}",
        "gotham" : "{creative_forward_url}",
        "epomx" : "{creative_forward_url}",
        "citenko" : "{creative_forward_url}",
        "kadam" : "{creative_forward_url}",
        "taggify" : "{creative_forward_url}",
        "cappture" : "cappture/{creative_forward_url}",
        "republer" : "{creative_forward_url}",
        "admedia" : "{creative_forward_url}",
        "ssphwy" : "{creative_forward_url}",
        "privatex" : "",
        "smaato" : "richMediaBeacon='%%smaato_ct_url%%'; script='{creative_forward_url}'; clickurl='{redirect_url}/exchange={pub}/{ad_id}/creative_id={creative_id}/price=${AUCTION_PRICE}/lat={lat}/lon={lon}/bid_id={bid_id}?url={creative_forward_url}'; imageurl='{creative_image_url}'; pixelurl='{pixel_url}/exchange={pub}/ad_id={ad_id}/creative_id={creative_id}/{bid_id}/price=${AUCTION_PRICE}/lat={lat}/lon={lon}/bid_id={bid_id}';",
        "smaato-builtin" : "{creative_forward_url}",
        "pubmatic" : "{creative_forward_url}"
      }
    },
    "campaigns" : [ "" ]
  },
  "seats" : [ {
    "name" : "google",
    "id" : "google-id",
    "bid" : "/rtb/bids/google=com.jacamars.dsp.rtb.exchanges.google.OpenRTB",
    "extension" : {
      "e_key" : "$GOOGLE_EKEY",
      "i_key" : "$GOOGLE_IKEY"
    }
  }, {
    "name" : "openx",
    "id" : "openx-id",
    "bid" : "/rtb/bids/openx=com.jacamars.dsp.rtb.exchanges.openx.OpenX",
    "extension" : {
      "e_key" : "$OPENX_EKEY",
      "i_key" : "$OPENX_IKEY"
    }
  }, {
    "name" : "appnexus",
    "id" : "test-appnexus-id",
    "bid" : "/rtb/bids/appnexus=com.jacamars.dsp.rtb.exchanges.appnexus.Appnexus"
  }, {
    "name" : "adx",
    "id" : "adx-seat-id",
    "bid" : "/rtb/bids/adx=com.jacamars.dsp.rtb.exchanges.adx.DoubleClick",
    "extension" : {
      "e_key" : "$ADX_EKEY",
      "i_key" : "$ADX_IKEY"
    }
  }, {
    "name" : "c1xus",
    "id" : "c1xus",
    "bid" : "/rtb/bids/c1xus=com.jacamars.dsp.rtb.exchanges.C1XUS&usesPiggyBackWins"
  }, {
    "name" : "stroer",
    "id" : "stroer-id",
    "bid" : "/rtb/bids/stroer=com.jacamars.dsp.rtb.exchanges.Stroer"
  }, {
    "name" : "waardx",
    "id" : "waardx-id",
    "bid" : "/rtb/bids/waardx=com.jacamars.dsp.rtb.exchanges.Generic&!usesEncodedAdm"
  }, {
    "name" : "index",
    "id" : "index-id",
    "bid" : "/rtb/bids/index=com.jacamars.dsp.rtb.exchanges.Generic"
  }, {
    "name" : "intango",
    "id" : "intango-id",
    "bid" : "/rtb/bids/intango=com.jacamars.dsp.rtb.exchanges.Generic"
  }, {
    "name" : "vdopia",
    "id" : "vdopia-id",
    "bid" : "/rtb/bids/vdopia=com.jacamars.dsp.rtb.exchanges.Generic"
  }, {
    "name" : "vertamedia",
    "id" : "vertamedia-id",
    "bid" : "/rtb/bids/vertamedia=com.jacamars.dsp.rtb.exchanges.Generic&!usesEncodedAdm&usesPiggyBackWins"
  }, {
    "name" : "ventuno",
    "id" : "ventuno-id",
    "bid" : "/rtb/bids/ventuno=com.jacamars.dsp.rtb.exchanges.Generic"
  }, {
    "name" : "medianexusnetwork",
    "id" : "mnn-id",
    "bid" : "/rtb/bids/medianexusnetwork=com.jacamars.dsp.rtb.exchanges.Generic"
  }, {
    "name" : "wideorbit",
    "id" : "wideorbit-id",
    "bid" : "/rtb/bids/wideorbit=com.jacamars.dsp.rtb.exchanges.Generic"
  }, {
    "name" : "smartadserver",
    "id" : "smartadserver-id",
    "bid" : "/rtb/bids/smartadserver=com.jacamars.dsp.rtb.exchanges.Generic"
  }, {
    "name" : "c1x",
    "id" : "c1x",
    "bid" : "/rtb/bids/c1x=com.jacamars.dsp.rtb.exchanges.C1X&usesPiggyBackWins"
  }, {
    "name" : "axonix",
    "id" : "axonix-id",
    "bid" : "/rtb/bids/axonix=com.jacamars.dsp.rtb.exchanges.Generic"
  }, {
    "name" : "adventurefeeds",
    "id" : "adventurefeedid",
    "bid" : "/rtb/bids/adventurefeeds=com.jacamars.dsp.rtb.exchanges.Adventurefeeds"
  }, {
    "name" : "adprudence",
    "id" : "adprudenceid",
    "bid" : "/rtb/bids/adprudence=com.jacamars.dsp.rtb.exchanges.Adprudence"
  }, {
    "name" : "citenko",
    "id" : "citenkoid",
    "bid" : "/rtb/bids/citenko=com.jacamars.dsp.rtb.exchanges.Citenko"
  }, {
    "name" : "kadam",
    "id" : "kadamid",
    "bid" : "/rtb/bids/kadam=com.jacamars.dsp.rtb.exchanges.Kadam"
  }, {
    "name" : "gotham",
    "id" : "gothamid",
    "bid" : "/rtb/bids/gotham=com.jacamars.dsp.rtb.exchanges.Gotham"
  }, {
    "name" : "atomx",
    "id" : "atomxseatid",
    "bid" : "/rtb/bids/atomx=com.jacamars.dsp.rtb.exchanges.Atomx"
  }, {
    "name" : "smartyads",
    "id" : "smartypants",
    "bid" : "/rtb/bids/smartyads=com.jacamars.dsp.rtb.exchanges.Smartyads"
  }, {
    "name" : "nexage",
    "id" : "99999999",
    "bid" : "/rtb/bids/nexage=com.jacamars.dsp.rtb.exchanges.Nexage"
  }, {
    "name" : "privatex",
    "id" : "5555555",
    "bid" : "/rtb/bids/privatex=com.jacamars.dsp.rtb.exchanges.Privatex"
  }, {
    "name" : "fyber",
    "id" : "seat1",
    "bid" : "/rtb/bids/fyber=com.jacamars.dsp.rtb.exchanges.Fyber"
  }, {
    "name" : "smaato-builtin",
    "id" : "seat1",
    "bid" : "/rtb/bids/smaato-builtin=com.jacamars.dsp.rtb.exchanges.Smaato"
  }, {
    "name" : "smaato",
    "id" : "seat1",
    "bid" : "/rtb/bids/smaato=com.jacamars.dsp.rtb.exchanges.Smaato"
  }, {
    "name" : "epomx",
    "id" : "seat1",
    "bid" : "/rtb/bids/epomx=com.jacamars.dsp.rtb.exchanges.Epomx"
  }, {
    "name" : "cappture",
    "id" : "capptureseatid",
    "bid" : "/rtb/bids/cappture=com.jacamars.dsp.rtb.exchanges.Cappture"
  }, {
    "name" : "taggify",
    "id" : "taggifyid",
    "bid" : "/rtb/bids/taggify=com.jacamars.dsp.rtb.exchanges.Taggify"
  }, {
    "name" : "republer",
    "id" : "republerid",
    "bid" : "/rtb/bids/republer=com.jacamars.dsp.rtb.exchanges.Republer"
  }, {
    "name" : "admedia",
    "id" : "admediaid",
    "bid" : "/rtb/bids/admedia=com.jacamars.dsp.rtb.exchanges.AdMedia"
  }, {
    "name" : "ssphwy",
    "id" : "ssphwyid",
    "bid" : "/rtb/bids/ssphwy=com.jacamars.dsp.rtb.exchanges.SSPHwy"
  }, {
    "name" : "pubmatic",
    "id" : "pubmaticid",
    "bid" : "/rtb/bids/pubmatic=com.jacamars.dsp.rtb.exchanges.Pubmatic"
  }, {
    "name" : "xapads",
    "id" : "xapads-id",
    "bid" : "/rtb/bids/xapads=com.jacamars.dsp.rtb.exchanges.Generic&!usesEncodedAdm"
  }, {
    "name" : "admedia",
    "id" : "admedia-id",
    "bid" : "/rtb/bids/admedia=com.jacamars.dsp.rtb.exchanges.Generic&!usesEncodedAdm"
  }],
  "NOs3" : {
    "access_key_id" : "$S3ACCESSKEY",
    "secret_access_key" : "S3SECRETKEY",
    "region" : "S3REGION",
    "bucket" : "S3BUCKET",
    "NOproxyprotocol" : "http",
    "NOproxyhost" : "edgecache.kdc3-dt",
    "NOproxyport" : 9000
  },
  "lists" : [ {
    "filename" : "data/adxgeo.csv",
    "name" : "@ISO2-3",
    "type" : "com.jacamars.dsp.rtb.tools.IsoTwo2Iso3"
  }, {
    "filename" : "data/METHBOT.txt",
    "name" : "@CIDR",
    "type" : "CidrMap"
  }, {
    "filename" : "data/adxgeo.csv",
    "name" : "@ADXGEO",
    "type" : "com.jacamars.dsp.rtb.exchanges.adx.AdxGeoCodes"
  }, {
    "filename" : "data/zip_codes_states.csv",
    "name" : "@ZIPCODES",
    "type" : "com.jacamars.dsp.rtb.tools.LookingGlass"
  } ]
}