A Demand Gen line item serves ad groups and ads in multiple formats across
Google's most impactful surfaces, including YouTube, Discover, Gmail, and the
Google Display Network. Demand Gen line items, like other types of line items,
are managed using LineItem resources and operate based on set
budget, bid strategy, and targeting. There are also settings specific to Demand
Gen line items available in the demandGenSettings field.
Demand Gen line items have child resources called ad groups. Ad groups provide another level of control under the individual line item.
Choose configurations
Before creating a Demand Gen line item, review and decide on relevant settings.
For Demand Gen line items:
lineItemTypemust be set toLINE_ITEM_TYPE_DEMAND_GEN.bidStrategymust be set using theBiddingStrategyobject'sdemandGenBidfield.budgetmust be set to a fixed amount at the line item level and can't be inherited from the parent insertion order.demandGenSettingsis used to set configurations specific to Demand Gen line items. ThegeoLanguageTargetingEnabledfield of theDemandGenSettingsobject controls whether location and language targeting is set at the line item level or to individual ad groups. This field can't be updated after line item creation. Set the field totrueif you prefer configuring this targeting at the line item level.creativeIdsshouldn't be set. Assets are directly assigned and configured in the AdGroupAd resources.
The following fields are required for Demand Gen line items and operate the same as they would in other types of line items:
The LineItem resource also has many optional fields which may be
set. Read the reference documentation for more information.
Create a line item
Here's how to create a Demand Gen line item with the following settings:
- An inherited flight and a budget of $100.
- A partner revenue model of 0.1% of total media cost.
- A bid strategy that optimizes towards an average cost of $10 per conversion.
The preference for assigning location and language targeting directly to ad groups under the line item.
Java
// Provide the ID of the parent advertiser. long advertiserId = advertiser-id // Provide the ID of the parent insertion order. long insertionOrderId = insertion-order-id // Provide the display name of the line item. String displayName = display-name // Provide the Floodlight activity ID to use for conversion tracking. long floodlightActivityId = floodlight-activity-id; // Provide whether the line item will serve EU political ads. String containsEuPoliticalAds = contains-eu-political-ads // Create the line item structure. LineItem lineItem = new LineItem() .setInsertionOrderId(insertionOrderId) .setDisplayName(displayName) .setLineItemType("LINE_ITEM_TYPE_DEMAND_GEN") .setEntityStatus("ENTITY_STATUS_DRAFT") .setContainsEuPoliticalAds(containsEuPoliticalAds); // Create and set the line item flight. LineItemFlight lineItemFlight = new LineItemFlight() .setFlightDateType("LINE_ITEM_FLIGHT_DATE_TYPE_INHERITED"); lineItem.setFlight(lineItemFlight); // Create and set the line item budget. LineItemBudget lineItemBudget = new LineItemBudget() .setBudgetAllocationType("LINE_ITEM_BUDGET_ALLOCATION_TYPE_FIXED") .setMaxAmount(100000000L); lineItem.setBudget(lineItemBudget); // Create and set the pacing setting. Pacing pacing = new Pacing() .setPacingPeriod("PACING_PERIOD_FLIGHT") .setPacingType("PACING_TYPE_EVEN") .setDailyMaxMicros(10_000L); lineItem.setPacing(pacing); // Create and set the partner revenue model. PartnerRevenueModel partnerRevenueModel = new PartnerRevenueModel() .setMarkupType( "PARTNER_REVENUE_MODEL_MARKUP_TYPE_TOTAL_MEDIA_COST_MARKUP") .setMarkupAmount(100L); lineItem.setPartnerRevenueModel(partnerRevenueModel); // Create and set the bidding strategy. BiddingStrategy biddingStrategy = new BiddingStrategy() .setDemandGenBid( new DemandGenBiddingStrategy() .setType("DEMAND_GEN_BIDDING_STRATEGY_TYPE_TARGET_CPA") .setValue(10000000L)); lineItem.setBidStrategy(biddingStrategy); // Create the conversion counting configuration. ConversionCountingConfig conversionCountingConfig = new ConversionCountingConfig() .setPostViewCountPercentageMillis(100000L); // Create and set the configuration for the floodlight activity used in // conversion tracking. TrackingFloodlightActivityConfig trackingFloodlightActivityConfig = new TrackingFloodlightActivityConfig() .setFloodlightActivityId(floodlightActivityId) .setPostClickLookbackWindowDays(90) .setPostViewLookbackWindowDays(90); conversionCountingConfig.setFloodlightActivityConfigs( ImmutableList.of(trackingFloodlightActivityConfig)); // Set the conversion counting configuration. lineItem.setConversionCounting(conversionCountingConfig); // Create and set Demand Gen settings. DemandGenSettings demandGenSettings = new DemandGenSettings().setGeoLanguageTargetingEnabled(false); lineItem.setDemandGenSettings(demandGenSettings); // Configure the create request. LineItems.Create request = service.advertisers().lineItems().create(advertiserId, lineItem); // Create the line item. LineItem response = request.execute(); // Display the new line item. System.out.printf( "Demand Gen line item %s was created.", response.getName());
Python
# Provide the ID of the parent advertiser. advertiser_id = advertiser-id # Provide the ID of the parent insertion order. insertion_order_id = insertion-order-id # Provide the display name of the line item. display_name = display-video # Provide the Floodlight activity ID to use for conversion tracking. floodlight_activity_id = floodlight-activity-id # Provide whether the line item will serve EU political ads. contains_eu_political_ads = contains-eu-political-ads # Create a line item object. line_item_obj = { "insertionOrderId": insertion_order_id, "displayName": display_name, "lineItemType": "LINE_ITEM_TYPE_DEMAND_GEN", "entityStatus": "ENTITY_STATUS_DRAFT", "flight": {"flightDateType": "LINE_ITEM_FLIGHT_DATE_TYPE_INHERITED"}, "budget": { "budgetAllocationType": "LINE_ITEM_BUDGET_ALLOCATION_TYPE_FIXED", "maxAmount": 100000000 }, "pacing": { "pacingPeriod": "PACING_PERIOD_FLIGHT", "pacingType": "PACING_TYPE_EVEN", "dailyMaxMicros": 10000, }, "partnerRevenueModel": { "markupType": ( "PARTNER_REVENUE_MODEL_MARKUP_TYPE_TOTAL_MEDIA_COST_MARKUP" ), "markupAmount": 100, }, "bidStrategy": { "demandGenBid": { "type": "DEMAND_GEN_BIDDING_STRATEGY_TYPE_TARGET_CPA", "value": "10000000" } }, "conversionCounting": { "postViewCountPercentageMillis": "100000", "floodlightActivityConfigs": [ { "floodlightActivityId": floodlight_activity_id, "postClickLookbackWindowDays": 90, "postViewLookbackWindowDays": 90 } ] }, "containsEuPoliticalAds": contains_eu_political_ads, "demandGenSettings": { "geoLanguageTargetingEnabled": False } } # Build and execute request. response = ( service.advertisers() .lineItems() .create(advertiserId=advertiser_id, body=line_item_obj) .execute() ) # Display the new line item. print(f"Demand Gen line Item {response['name']} was created.")
PHP
// Provide the ID of the parent advertiser. $advertiserId = advertiser-id; // Provide the ID of the parent insertion order. $insertionOrderId = insertion-order-id; // Provide the display name of the line item. $displayName = display-name; // Provide the Floodlight activity ID to use for conversion tracking. $floodlightActivityId = floodlight-activity-id; // Provide whether the line item will serve EU political ads. $containsEuPoliticalAds = contains-eu-political-ads; // Create the Demand Gen line item structure. $lineItem = new Google_Service_DisplayVideo_LineItem(); $lineItem->setInsertionOrderId($insertionOrderId); $lineItem->setDisplayName($displayName); $lineItem->setLineItemType('LINE_ITEM_TYPE_DEMAND_GEN'); $lineItem->setEntityStatus('ENTITY_STATUS_DRAFT'); $lineItem->setContainsEuPoliticalAds($containsEuPoliticalAds); // Create and set the line item flight. $flight = new Google_Service_DisplayVideo_LineItemFlight(); $flight->setFlightDateType('LINE_ITEM_FLIGHT_DATE_TYPE_INHERITED'); $lineItem->setFlight($flight); // Create and set the line item budget. $budget = new Google_Service_DisplayVideo_LineItemBudget(); $budget->setBudgetAllocationType( 'LINE_ITEM_BUDGET_ALLOCATION_TYPE_FIXED' ); $budget->setMaxAmount(100000000); $lineItem->setBudget($budget); // Create and set the pacing setting. $pacing = new Google_Service_DisplayVideo_Pacing(); $pacing->setPacingPeriod('PACING_PERIOD_FLIGHT'); $pacing->setPacingType('PACING_TYPE_EVEN'); $pacing->setDailyMaxMicros(10000); $lineItem->setPacing($pacing); // Create and set the partner revenue model. $partnerRevenueModel = new Google_Service_DisplayVideo_PartnerRevenueModel(); $partnerRevenueModel->setMarkupType( 'PARTNER_REVENUE_MODEL_MARKUP_TYPE_TOTAL_MEDIA_COST_MARKUP' ); $partnerRevenueModel->setMarkupAmount(100); $lineItem->setPartnerRevenueModel($partnerRevenueModel); // Create and set the bidding strategy. $demandGenBidStrategy = new Google_Service_DisplayVideo_DemandGenBiddingStrategy(); $demandGenBidStrategy->setType( 'DEMAND_GEN_BIDDING_STRATEGY_TYPE_TARGET_CPA' ); $demandGenBidStrategy->setValue(10000000); $biddingStrategy = new Google_Service_DisplayVideo_BiddingStrategy(); $biddingStrategy->setDemandGenBid($demandGenBidStrategy); $lineItem->setBidStrategy($biddingStrategy); // Create and set the conversion counting config. $conversionCountingConfig = new Google_Service_DisplayVideo_ConversionCountingConfig(); $conversionCountingConfig->setPostViewCountPercentageMillis(100000); $trackingFloodlightActivityConfig = new Google_Service_DisplayVideo_TrackingFloodlightActivityConfig(); $trackingFloodlightActivityConfig->setFloodlightActivityId( $floodlightActivityId ); $trackingFloodlightActivityConfig->setPostClickLookbackWindowDays(90); $trackingFloodlightActivityConfig->setPostViewLookbackWindowDays(90); $conversionCountingConfig->setFloodlightActivityConfigs( array($trackingFloodlightActivityConfig) ); $lineItem->setConversionCounting($conversionCountingConfig); // Create and set the Demand Gen settings. $demandGenSettings = new Google_Service_DisplayVideo_DemandGenSettings(); $demandGenSettings->setGeoLanguageTargetingEnabled(false); $lineItem->setDemandGenSettings($demandGenSettings); // Call the API, creating the line item under the advertiser and // insertion order given. try { $result = $this->service->advertisers_lineItems->create( $advertiserId, $lineItem ); } catch (\Exception $e) { $this->renderError($e); return; } // Display the new line item. printf('<p>Demand Gen line item %s was created.</p>', $result['name']);