Understanding Pricing of Placements and Placement Groups

Monday, December 20, 2010 |

The humble placement is the workhorse of DoubleClick for Advertisers ad slotting, each representing a single space on a publisher’s website. However, certain types of media buys, such as homepage take-overs in which every slot on a single page is purchased, warrant the use of an additional structure - the placement group - combining multiple placements together.

For those of you performing these types of media buys, pricing is set for placements using a hierarchy. While placements are each set with their own pricing information, they can later be grouped together into placement groups, each of which has its own pricing information. Whether you're dealing with a package or a roadblock group type, placements always inherit the pricing data set for their placement group. Through the API it is still possible to request information for individual placements after they have been placed into a group and what is shown may not be what you’d expected. The following snippet of code will print out some information about a placement, demonstrating what happens to a placement’s pricing schedule when it becomes part of a placement group:


// Get placement.
Placement placement = placementService.getPlacement(placementId);
// Set up date formatter to make dates human-readable.
SimpleDateFormat sdf = new SimpleDateFormat("d MMM yyyy");
// Display placement name, placement group, and pricing info.
System.out.println("Placement with name \"" + placement.getName()
+ "\", part of placement group \"" + placement.getPlacementGroupId()
+ "\", was found.");
PricingSchedule pricingSchedule = placement.getPricingSchedule();
System.out.println("The pricing schedule runs from "
+ sdf.format(pricingSchedule.getStartDate().getTime()) + " to "
+ sdf.format(pricingSchedule.getEndDate().getTime()) + ".");
PricingPeriod[] pricingPeriods = pricingSchedule.getPricingPeriods();
for (PricingPeriod result : pricingPeriods) {
System.out.println("This pricing period runs from "
+ sdf.format(result.getStartDate().getTime())
+ " to " + sdf.format(result.getEndDate().getTime())
+ " with the rate of " + result.getRateOrCost()
+ " for " + result.getUnits() + " units.");
}

For my example placement, this block of code outputs the following:

Placement with name "Bob's Website's 400x600", part of placement group "0", was found.
The pricing schedule runs from 1 Dec 2010 to 24 Dec 2010.
This pricing period runs from 1 Dec 2010 to 24 Dec 2010 with the rate of 1.5 for 10000 units.


This is a straightforward placement with a simple pricing schedule. With a placement group Id number of 0, it isn’t part of a group and is currently using the pricing data displayed above. Now, what will happen if this placement is added to a placement group with different pricing information, including changes in start date, end date, units, and rate of cost? Only one thing changes:

Placement with name "Bob's Website's 400x600", part of placement group "123456", was found.
The pricing schedule runs from 1 Dec 2010 to 24 Dec 2010.
This pricing period runs from 1 Dec 2010 to 24 Dec 2010 with the rate of 1.5 for 10000 units.


The original pricing schedule and pricing period are still returned - they aren’t changed to match the placement group’s. Instead, the placement's own data is merely superseded for as long as it remains part of the placement group. The rule of thumb is simple: if a placement comes back with a placement group Id number other than “0”, the pricing information attached to it isn’t guaranteed to be in use. To view the actual pricing information being used for that placement, request the data associated with the placement group.

While you have to watch out for this one potential road bump, you can leverage the fact that you can remove a placement from its group and automatically reuse any preexisting pricing data. You can always view and modify the pricing information that will be used in this event by examining the individual placement.

Pricing is a very important element of trafficking settings, wouldn’t you say? We’re always available on the forum to answer any questions you may have.

- Joseph DiLallo, the DFA API Team