An automated line item generator for Prebid.js and Google Ad Manager (previously DFP)
When setting up Prebid, your ad ops team often has to create hundreds of line items in Google Ad Manager (GAM).
This tool automates setup for new header bidding partners. You define the advertiser, placements or ad units, and Prebid settings; then, it creates an order with one line item per price level, attaches creatives, sets placement and/or ad units, and Prebid key-value targeting.
While this tool covers typical use cases, it might not fit your needs. Check out the limitations before you dive in.
Note: Doubleclick for Publishers (DFP) was recently renamed to Google Ad Manager (GAM), so this repository may refer to GAM as DFP.
You will need credentials to access your GAM account programmatically. This summarizes steps from GAM docs and the Google Ads Python libary auth guide.
.json
private key.pip install -r requirements.txt
[something].json
) to key.json
and move it to the root of this repositorygoogleads.example.yaml
and name it googleads.yaml
.googleads.yaml
, set the required fields:
application_name
is the name of the Google project you created when creating the service account credentials. It should appear in the top-left of the credentials page.network_code
is your GAM network number; e.g., for https://admanager.google.com/12398712#delivery
, the network code is 12398712
.Let's try it out! From the top level directory, run
python -m dfp.get_orders
and you should see all of the orders in your GAM account.
Modify the following settings in settings.py
:
Setting | Description | Type |
---|---|---|
DFP_ORDER_NAME |
What you want to call your new GAM order | string |
DFP_USER_EMAIL_ADDRESS |
The email of the GAM user who will be the trafficker for the created order | string |
DFP_ADVERTISER_NAME |
The name of the GAM advertiser for the created order | string |
DFP_TARGETED_AD_UNIT_NAMES |
The names of GAM ad units the line items should target | array of strings |
DFP_TARGETED_PLACEMENT_NAMES |
The names of GAM placements the line items should target | array of strings |
DFP_PLACEMENT_SIZES |
The creative sizes for the targeted placements | array of objects (e.g., [{'width': '728', 'height': '90'}] ) |
PREBID_BIDDER_CODE |
The value of hb_bidder for this partner |
string |
PREBID_PRICE_BUCKETS |
The price granularity; used to set hb_pb for each line item. Can use Prebid standard granularities such as medium or dense , a single custom CPM bucket object or an array of custom CPM bucket objects |
object, array or string |
DFP_VIDEO_AD_TYPE |
Set to true to create video ad units and creatives | boolean |
DFP_VAST_REDIRECT_URL |
The redirect URL to use for video ad creatives (only used if DFP_VIDEO_AD_TYPE is set to True) |
string |
Then, from the root of the repository, run:
python -m tasks.add_new_prebid_partner
You should be all set! Review your order, line items, and creatives to make sure they are correct. Then, approve the order in GAM.
Note: GAM might show a "Needs creatives" warning on the order for ~15 minutes after order creation. Typically, the warning is incorrect and will disappear on its own.
In most cases, you won't need to modify these settings.
Setting | Description | Default |
---|---|---|
DFP_CREATE_ADVERTISER_IF_DOES_NOT_EXIST |
Whether we should create the advertiser with DFP_ADVERTISER_NAME in GAM if it does not exist |
False |
DFP_USE_EXISTING_ORDER_IF_EXISTS |
Whether we should modify an existing order if one already exists with name DFP_ORDER_NAME |
False |
DFP_NUM_CREATIVES_PER_LINE_ITEM |
The number of duplicate creatives to attach to each line item. Due to GAM limitations, this should be equal to or greater than the number of ad units you serve on a given page. | the length of setting DFP_TARGETED_PLACEMENT_NAMES |
DFP_CURRENCY_CODE |
The currency to use in line items. | 'USD' |
DFP_LINE_ITEM_FORMAT |
The format for the line item names. | u'{bidder_code}: HB ${price}' |
hb_bidder
) and price bucket targeting key (hb_pb
) are not customizable. The hb_bidder
targeting key is currently required (see #18)hb_bidder
, and hb_pb
values. It does not yet support setting other options on the line item such as the "Allow same advertiser exception" (see #59)PREBID_PRICE_BUCKETS
only allows for uniform bucketing (see #27). For example, you can create $0.01 buckets from $0 - $20, but you cannot specify $0.01 buckets from $0 - $5 and $0.50 buckets from $5 - $20. Using entirely $0.01 buckets will still work for the custom buckets—you'll just have more line items than you need.Please consider contributing to make the tool more flexible.
Thanks to these people for making this tool better 🤗: