Campaign Manager

Last updated: Jan 31, 2017

Overview

The Campaign Manager is a relatively simple application that provides a mechanism to update the user identification (password, phone, email, and credit card info) and to create/edit/manage individual campaigns.

The Campaign Manager is available at http://youripaddress:8080/login.html. The login names are defined in the Aerospike system through the System Console

You can also login with 'root' if you know the Bidder's root login.

A campaign is the offering of one or more creatives over a certain time period, snd with specific targets. We use the term target to mean constraining rules that filter out those bid requests that match your target market. When we say creative we mean a banner ad, a video or a native ad. Additionally, you can use the Campaign Manager to review the the running status of your campaign, and to start and stop campaigns.

Edit User Info

Modify User Information

You can modify the user information once you login. You can edit the Password, the Phone field, the E-Mail and the Credit Card fields. Below you can see the fields filled out.

Save User Info

Once you have made the changes to the user fields, all you need to do to save the information is to press the Update link to the right.

Campaign Status

In order to stop or start campaigns you need to first select the Status tab, located about 1/3 of the way down the page:

After selecting the Status tab you will see the list of running and paused campaigns in the bidder.

A gray button indicates the campaign is defined in the database, but is not loaded into the bidder. A green button indicates the campaign is both defined in the database and loaded into the bidder. Stopping a campaign does not mean deleting it from the bidder, it means unloading it from the bidder. Deleting a campaign will both delete the campaign from the database and unload it from the bidder. The following is an example list:

Add Campaign

Create Campaign Name

First step is to navigate to the Add a New Campaign section, add a name and then press the + key. Doing so adds a new campaign to the list, as shown below.

Modify Attributes

Second step is to add/modify attributes of the campaign.

Press the Attributes tab. Then the attributes for the campaign will be displayed. Example:

These attributes are Ad Domain name of your advertisement, the Start Date and End Date of your campaign. You must change at least Ad Domain to match the domain of your advertisement.

Third step is to add one or more creatives to your campaign. You can add banners, videos, and native ads.

To work with the creatives, choose the Creatives tab. Then all the creatives for that campaign will be displayed. Example:

By default, the creative will not be ADX, meaning it is not a Google Adx (Double Click) based campaign. If this is an ADX creative, then select the ADX selector.

In general, you then choose what kind of Ad (Native Content, Banner Content, or Video Content) and provide the basics for what they need.

In the case of Native Ad, you will first define it's Imp ID (the creative id or impression id) that uniquely identifies the creative, the type, provide a price and choose the currency. When complete, press the Add hyperlink to the right. After you press the Add link the new creative appears in the drop down list. You complete the creative by pressing on the Editor link for that creative, and then filling out the required items.

Note, Native Content is not yet available with ADX.

Add Constraints

Fourth step is to add the constraints to your campaign's creatives. These filters will apply to all of the creatives you define within the campaign itself. To add constraints click the Constraints tab, a table of constraints will appear like this:

The required field, when checked means this entity must exist in the bid request, or the bidder will no bid. Not checked means if it is not present the test won't be performed (considered to evaluate to 'true'), but if present will be tested.

The Constraint Name refers to an item in the bid request you want to test an Operation. There are 20 operations you can perform. The Constraint Value is what you want to test the value of the Constraint Name against.

The Constraint Name is a JSON object name of whatever you are interested in of the bid request. For example, consider the JSON fragment of a bid request below:

{
	"cur": [
		"USD"
	],
	"id": "VgpV7SMBP70zFzseiG8TLQ",
	"imp": [{
		"bidfloorcur": "USD",
		"tagid": "1234",
		"banner": {
			"id": "1",
			"h": 50,
			"w": 320
		},
		"id": "1"
	}],
	"site": {
		"publisher": {
			"name": "Sample Publisher",
			"id": "3456"
		},
		"ref": "http://www.sample.com/",
		"cat": [
			"IAB25-3"
		],
		"domain": "sample.com",
		"name": "Sample Site",
		"id": "6789"
	},
	"device": {
		"connectiontype": 1,
		"carrier": "Unknown",
		"js": 1,
		"os": "Windows",
		"devicetype": 2,
		"ip": "12.23.34.45",
		"geo": {
			"country": "USA",
			"type": 2
		},
		"ua": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)"
	},
	"user": {
		"id": "VgpV7eIBBSs1iQnp6-mY-g"
	},
	"test": 0,
	"at": 2,
	"tmax": 100
}
										

If you want to bid on site.publisher.id 3456 (which is the example above). The Constraint Name field would contain site.publisher.id.

In the case of addressing an array item like imp[0].tagid, you would use imp.0.tagid. Just drop the braces.

When setting the value, if the value is a string, enclose it in double quotes. If the value is a number, don't use quotes. If the value is an array, then comma separate it and enclose the values with braces.

The Required field denotes whether this is a mandatory field. If true, then the constraint must be present in the bid request or it will not bid. If set to false, the constraint will be checked if it is present (if it resolves to false, then it will cause a no-bid). But if not present and not required, then it will not cause the bid to be rejected due to this missing constraint.

Here's an example where we set to bid imp.0.tagid != '777', device.js == 1 and user.geo.country is either USA or MEX.

Save Your Work

Saving your work is a 2 step process. First, you need to save your work to the bidder's memory and to Aerospike. To do this press the Save Changes button: . After you do this, the new campaign information is saved to memory in the bidder, and in the Aerospike server. So if you restart the bidder, the changes you made will be reloaded into the bidder.

However, to save your changes to the backup disk file database.json you must press the yellow button on the top of the screen. This will save the file /home/ubuntu/XRTB/database.json on the bidder you are logged into.

Start Campaign

After saving the new campaign to the database, you can now start the campaign. At first, the campaign will be offline. You will need to select the Status tab and then start your new campaign. Read here on how to start your new campaign

Edit Campaign

Editing a campaign requires you to select the campaign first, from the list of campaigns in the Edit Current Campaigns selections. Push the button of the campaign to be edited, and the campaign will be selected. Then, pressing any of the tabs underneath the Edit Current Campaigns list will allow you to edit the Attributes, Creatives, and Constraints of that campaign.

When complete, remember to save your work by pressing the Write DB button.

Pricing

To set the price to bid at in a creative, you need to bring up the modal editor for the creative. You have the opportunity to do an open bid, and/or to bid on one or more preferred or private auctions, depending on the parameters set by the bid request.

The pricing section of the different creative types (video, native, banner) are all the same. You can add both a Public and one or more Private/Preferred deal Id's and prices. You must have at least one price defined for your creative, otherwise it will not bid at all. Below is an example of a Public Auction price of $1.0 (CPM) and 2 Private, preferred deals and prices:

The rules for pricing are this:

  1. If the impression has a pmp.private_auction field and it 0, or has no pmp.private_auction field - This means that if the creative does not have a deal specified, or the deals specified do not match, the creative will bid using the Public Price. If no Public Price is available then there will be no bid, unless the deals in the pmp match.
  2. If the impression has a pmp.private_auction field and it is 1 - The Public Price is not used, and only those deals that match ids will be allowed to bid.
  3. If the impression has a pmp.private_auction = 1 and pmp.deal[n].wseat is not null - Only those deals that match AND where the wseat matches the seat-id of the bidder on this exchange will result in a bid.
  4. In the case where more than one deal matches with the pmp.deals array - Then the resulting bid will be with the deal with the highest price.

When creating a Deal, input the id and the price, then depress the Add link to the right of it. To delete a deal, just press the Del button to the right of it.

Useful Tip:

A price that is a negative number bids at the absolute value of the price times the bid floor. Thus, if you bid -1.2 then your bid will be at the CPM rate of 20% higher than the bid floor. If no bid floor is specified, then this creative cannot bid.

Delete Campaign

Remove From List

Go to the list of campaigns defined for this user. Then simply press the Del link at the end of the list item. Example below shows the campaigns defined for this user, pressing Del after ben:junk will mark this campaign for deletion.

Update Database

After removing the campaign from the list of campaigns for the user, the campaign is also removed the bidder. However, to save the database int he database.json file you. So you need to press the yellow Save DB button:

Campaign JSON

To view what the definition of a campaign looks like in JSON format (as it would appear in database.json) press the green Show JSON button in the "Edit Current Campaigns" section of the document. A dialog box will appear with the JSON for the campaign:

Creatives (Add/Modify)

A Campaign contains one or more creatives. To add or edit creatives select the Creatives tab. Once selected you can work with Video, Banner and Native Ads.

Video

The first step in creating the Video is to make an Imp ID, which is the creative's unique ID.

Second, assign the width W and height H of the ad.

Useful Tip:

You can use -1 for the width and height if this video will be used for all size impressions.

When you are finished, click the Add link. The following shows a filled out Video Creative:

You still have some more work to do on your creative however. Press the blue Tag button for the creative and the modal dialog box appears to allow you to finish the creative. Example:

Capping Frequency - This is not required, but you can cap the frequency at which this creative is bid to a particular IP address by filling out these fields. The Specification sets the object in the bid request you will key the capping on. The Frequency states how many times an object with this specification can bid and win on within the number of seconds specified in Timeout seconds. This example has no Frequency Capping.

Note, Capping Frequency is not available on Adx for IP addresses, as Adx does not provide the full IP address.

Then you need to set the Pricing and Deals. You must have either the Public Price specified, or at least one deal (or both) in order for your creative to be eligible to bid. For more information see the Pricing section.

Next you need to define what the protocol of VAST the creative will use. Here it is version 2. Then, you need to specify its linearity, 1 means it is in-stream, and 0 means the video overlays the page. Then, specify the length of the video in seconds

The next step in defining the creative is to provide the Video Markup. In this example it is an HTTP location. Note that the JSON of the bid uses double quotes, so if your markup contains double quotes you must HTML escape them or change them to single quotes. If you want to place the actual VAST XML creative into the window you can, and that will be served up.

Finally, you can add some additional constraints that will be used with the Campaign's attributes. See the Operators section for adding additional constraint operators.

Press Save And Closebutton to save your changes.

Video Adx (Google AdExchange)

The Video creative for Google Adx is a little different. First, no Frequency Capping is offered. Second There are additional Adx Specification fields to be filled in, and there is no Image URL and no Tracking URL. Below is an example of the Modal Dialog for Adx Video:

The other fields are described above, this will focus on the Adx Specification fields

The Click Through Url must be defined. Do not leave this blank!

Category: Identify your ad if it is one of the categories in the drop down list. Choose the category that best describes your ad. This is used by sites for blocking ads.

Then, if your ad is served by one of the Vendor Types int he drop down list, identify it.

Lastly, select all the attributes of the ad, that match the enumerated AttributesThis is multi-select, hold the shift key and press the left mouse key

Note in the constraints field this ad is restricted to Non-APP based ads - that is, only web pages.

Press Save And Close button to save your changes.

Native

TBD

Operators

The operations available in defining constraints allows you to pinpoint the target of your ad based on attributes of the Bid Request. The constraints are presented to you in the form:

You can add constraints to the Campaign itself with the Constraints tab, and additionally to the creatives in their Modal Dialog editors. Note, whether the Bidder will respond with a bid request for your creative depends on the ANDing of all the constraints together. If any constraint resolves to 'false' then the creative will not bid.

The Constraint Name refers to an item in the bid request you want to test an Operation. There are 20 operations you can perform. The Constraint Value is what you want to test the value of the Constraint Name against.

The Constraint Name is a JSON object name of whatever you are interested in, in the bid request.

If you want to bid on site.publisher.id 3456 (which is the example above). The Constraint Name field would contain site.publisher.id.

In the case of addressing an array item like imp[0].tagid, you would use imp.0.tagid. Just drop the braces.

When setting the value, if the value is a string, enclose it in double quotes. If the value is a number, don't use quotes. If the value is an array, then comma separate it and enclose the values with braces.

The Operation drop down presents you with 20 possible operations to apply to value found in the Constraint Name field:

  1. EQUALS - Defines the operation value ==. Example imp[0].banner.w == 300:
    • Constraint Value: 300
    • Operation: EQUALS
    • Constraint Name: imp.0.banner.w
  2. NOT_EQUALS - Defines operation value !=. Example device.connectiontype != 1:
    • Constraint Value: 1
    • Operation: NOT_EQUALS
    • Constraint Name: device.connectiontype
  3. MEMBER - Defines operation scalar value is a member of list defined bid request values. Example value is a member of mimes types:
    • Constraint Value: "image/jpeg"
    • Operation: MEMBER
    • Constraint Name: imp.0..banner.mimetypes
  4. NOT_MEMBER - Defines operation scalar value is a NOT member of list defined bidRequestValues. Example value is a member of mimes types
    • Constraint Value: "image/jpeg"
    • Operation: NOT_MEMBER
    • Constraint Name: imp.0.banner.mimetypes
  5. INTERSECTS -defines there is an intersection with a list defined bidRequestValues. Example value is a member of mimes types:
    • Constraint Value: ["image/jpeg", "image/gif"]
    • Operation: INTERSECTS
    • Constraint Name: imp.0.banner.mimetypes
  6. NOT_INTERSECTS - defines there is NO intersection with a list defined bid request values. Example value is NOT a member of mimes types:
    • Constraint Value: ["image/jpeg", "image/gif"]
    • Operation: NOT_INTERSECTS
    • Constraint Name: imp.0..banner.mimetypes
  7. INRANGE - defines that lat long is within a number of Km of a member of lat, lon, range objects in a list. Example 1000 km of 34.0552,118.2437
    • Constraint Value: [34.0552, 118.2437, 1000]
    • Operation: INRANGE
    • Constraint Name: device.geo
  8. NOT_INRANGE defines that lat long is NOT within a number of Km of a member of lat, lon objects in a list. Example not within 1000 km of 34.0552, 118.2437
    • Constraint Value: [34.0552, 118.2437, 1000]
    • Operation: NOT_INRANGE
    • Constraint Name: device.geo
  9. LESS_THAN - Defines operation value < bidRequestValues. Example bidfloor < .02
    • Constraint Value: .02
    • Operation: LESS_THAN
    • Constraint Name: bidfloor
  10. LESS_THAN_EQUALS - Defines operation value <= bidRequestValues. Example bidfloor <= .02:
    • Constraint Value: .02
    • Operation: LESS_THAN_EQUALS
    • Constraint Name: bidfloor
  11. GREATER_THAN - Defines operation value > bidRequestValues. Example bidfloor > .02
    • Constraint Value: .02
    • Operation: GREATER_THAN
    • Constraint Name: bidfloor
  12. GREATER_THAN_EQUALS - Defines operation value >= bidRequestValues. Example bidfloor >= .02:
    • Constraint Value: .02
    • Operation: GREATER_THAN_EQUALS
    • Constraint Name: bidfloor
  13. DOMAIN - Defines an operation where a numeric value in the bid request is in the domain defined by a user list. Example user.yob is within the range between 1960 and 1965:
    • Constraint Value: [1960, 1965]
    • Operation: DOMAIN
    • Constraint Name: user.yob
  14. NOT_DOMAIN - Defines an operation where a numeric value in the bid request is NOT in the domain defined by a user list. Example user.yob is NOT within the range between 1960 and 1965:
    • Constraint Value: [1960, 1965]
    • Operation: NOT_DOMAIN
    • Constraint Name: user.yob
  15. STRINGIN - Defines operation value must be a substring of the bodRequestValue. Example: 'google' is in the app.domain:
    • Constraint Value: "google"
    • Operation: STRINGIN
    • Constraint Name: app.domain
  16. NOT_STRINGIN - Defines operation value must be a substring of the bodRequestValue. Example: 'google' NOT in the app.domain:
    • Constraint Value: "google"
    • Operation: NOT_STRINGIN
    • Constraint Name: app.domain
  17. EXISTS - defines that an object must be present in the bid request. Example, the app object must be present:
    • Constraint Name: app
    • Operation: EXISTS
  18. NOT_EXISTS - defines that an object must NOT be present in the bid request. Example, the app object must NOT be present:
    • Constraint Name: app
    • Operation: NOT_EXISTS
  19. REGEX - The contents of the bid request item must match the regular expression (JAVA Regex) specified in the value field.
    • Constraint Value: ".*Mozilla*."
    • Operation: REGEX
    • Constraint Name: device.ua
  20. NOT REGEX - The contents of the bid request item must NOT match the regular expression specified in the value field.
    • Constraint Value: ".*Mozilla*."
    • Operation: NOT_REGEX
    • Constraint Name: device.ua

Macro Definitions

The following is a list of macro definitions you can use in your creatives:

        {ad_id}					Substituted from the campaign id.
        {app_id}				The id of the app in the bid request.
        {app_name}				The name of the app in the bid request.
        {app_bunde}				The app.bundle of the bid request.
        {adsize}				Size of the creative, hxw
        {bid_id}				Substituted from the bid's object id field.
        {bidder_ip}				Gives you the bidder ip address that handled the bid request.
        {brand}					The device brand.
        {cachebuster}				A random numnber.
        {creative_ad_height}			The height of the creative bid.
        {creative_ad_price}			The price that was bid.
        {creative_ad_width}			The creative width of the bid.
        {creative_forward_url}			The forward url (the actual markup sent on the bid.
        {creative_id}           		Substituted from campaign's creative's id.
        {dnt}					The value of device.dnt (do not track) in the bid request.
        {exchange}				The exchange where the bid came from
        {gps}					Device GPS coordinates lat,lon
        {ifa}					The value of device.ifa in the bid request.
        {ip}					The IP address of the user.
        {isp}					The ISP name if the device identifies it.
        {lat}					Latitude of the device
        {lon}					Longitude of the device
        {make}					The device make
        {model}					The device model
        {os}					The device operating system
        {osv}					The device operating system version
        {page_url}				The page url, contents of site.content.url or if undefined site.pahe, or if app: app,content.url
        {pixel_url}				The pixel fire url of this bid request
        {publisher}				The publisher from the bid request
        {redirect_url}				The redirect url used on this bid
        {site_domain}				Substituted from the bid request's site domain
	{site_id}				Substituted from the bid request's site id.
        {site_name}				Substituted from the bid request's site name.
        {timestamp}				Timestamp of the bid
        {ua}					Device user agent
        {win_url}				The win fire url of the bid response.

Note, the RTB exchange can make substitutions in the ADM field as it delivers it to the web site. The RTB exchange will reflect the ADM back on the win notification, and you can ask for the RTB exchange to also substitute fields as well. See the RTB 2.3 specification for supported macro names.

These are the macros substituted by the Exchange, not the bidder. so these will return via the RTB win notification and as the ad is delivered into the web page.


        {AUCTION_ID}        ID of the bid request; from “id” attribute.
        {AUCTION_BID_ID}    ID of the bid; from “bidid” attribute.
        {AUCTION_IMP_ID}    ID of the impression just won; from “impid” attribute.
        {AUCTION_SEAT_ID}   ID of the bidder’s seat for whom the bid was made.
        {AUCTION_AD_ID}     ID of the ad markup the bidder wishes to serve; from “adid” attribute.
        {AUCTION_PRICE}     Settlement price using the same currency and units as the bid.
        {AUCTION_CURRENCY}  The currency used in the bid (explicit or implied); for confirmation only.