[Error messages] Google Ad Manager (GAM)
Challenge
While using our Google Ad Manager (GAM) integration with features like check availability or submit an error message appear that are coming directly from the Google API. What does an error from the API mean and what are the best ways to handle this?
Important
Please note that once a campaign item is created in Google Ad Manager (GAM), it is not possible to change the associated advertiser. If a campaign is submitted with the incorrect advertiser, it must be stopped immediately.
Attempting to archive the campaign in GAM and then modify the advertiser in ADvendio,while also removing the order ID and ad ID, will trigger the creation of a new line item in Google Ad Manager
Solution:
When submitting data from ADvendio to external platforms, there are always two platforms involved. ADvendio is the system that sends data and the external platform (e.g. the AdServer) receives data. While we try to focus our application on validating the item configuration within ADvendio so that we're not sending faulty data in our requests, there are still certain cases where an error is returned and shown in our interface as well as the result email:
This can have different reasons, for example, a problem with the authentication against the external system, a missing setting in ADvendio, or you are trying something that is generally not allowed (like changing the start date of an already running position). Following we are looking at the most common error messages returned from our Google AdManager integration, what they mean, and how to prevent them.
What are the most common error cases in GAM?
With the below information, you'll be equipped with a clear understanding of GAM error messages, the reasons behind them, and the necessary steps to troubleshoot and overcome integration challenges you may encounter:
Error Message: You'll see a list of different error messages, each with its own type and wording.
Reason: We provide explanations to help you understand what caused the error message. This will give you insights into why the issue occurred.
Solution: For each error message, we offer troubleshooting steps to resolve the problem. These steps guide you toward finding a solution and getting past the error.
GAM Error Message | Reason | Solution |
|---|---|---|
[UniqueError.NOT_UNIQUE @ [0].name; trigger:'...'] | There is already an order with the same name existing in GAM. | Change the Media Campaign Name (or AdServer Name of the Media Campaign) in ADvendio. |
No Salesperson "XXXX" was found. | The Salesperson you are trying to set for your Order doesn't match to a Google user. ADvendio, as a default, uses the Salesforce user as a Salesperson in Google and if you have no configuration done in ADvendio for this, the warning will be shown. This message is a warning and doesn't affect the results of the submit, your orders and items are still created. | Please read here to set your salesperson or teams. 3.5.10 Manage Teams, Ad Manager, and Trafficker. |
[UniqueError.NOT_UNIQUE @ lineItem[0].name; trigger:'ADvendio_Sport_Leaderboard' | There is already a line item with the same name existing at this Order in GAM | Change the Campaign Item Name in ADvendio or add a unique 7.3.12 Adserver Name for Campaign items. |
[ProposalLineItemProgrammaticError.ZERO_COST_PER_UNIT_NOT_SUPPORTED @ [0].costPerUnit] | Depending on the AdServer Price field selected in GAM connection settings, ADvendio will try to submit that field as price to GAM. If the selected field is empty, then the error message will be displayed when you try to submit a proposal to GAM. | To change which price gets submitted to GAM, see: https://advendio.atlassian.net/wiki/pages/createpage.action?spaceKey=so&title=7.3.1.2%20Submit%20Prices%20to%20the%20AdServer&linkCreation=true&fromPageId=126695706 |
ReservationDetailsError.COST_TYPE_NOT_ALLOWED @ costType; trigger:'CPD' | CostType (BillingCategory) CPD is only available for LineItemType (AdType), Sponsorship and Network. | Change BillingCategory or the field AdType of the object AdType. |
ReservationDetailsError.LINE_ITEM_TYPE_NOT_ALLOWED @ | Forecasts are only available for LineItemTypes Sponsorship and Standard | Change AdType.AdType or CampaignItem.AdType |
LineItemOperationError.NOT_ALLOWED | The operation is not allowed due to a lack of permissions in GAM. | Give more permissions to the GAM user. |
Ad server error, fault message: [ForecastingError.EXCEEDED_QUOTA @ ] | The number of requests made per second is too high and has exceeded the allowable limit. The recommended approach to handle this error is to wait about 5 seconds and then retry the request. Note that this does not guarantee the request will succeed. If it fails again, try increasing the wait time. Another way to mitigate this error is to limit requests to 2 per second. Once again this does not guarantee that every request will succeed, but may help reduce the number of times you receive this error. | try again |
[InventoryTargetingError.INVENTORY_UNIT_CANNOT_BE_TARGETED | A child inventory unit cannot be targeted if its ancestor inventory unit is also targeted. | Remove the children Ad Server IDs of selected Ad Units from the Ad Spec. (Or remove selected content) |
Could not upload Creative (CN-0) slot can not be parsed | The selected Slot Size at the Creative does not match with Slot Sizes of the AdServer. | Please make sure the slot sizes you've defined in your system follow this format "300x250" |
RequiredNumberError.TOO_SMALL_WITH_DETAILS @ lineItem[0].primaryGoal.units; trigger:'0'] | The primary goal (% of remaining/total impressions) set for Sponsorship, InHouse, or Network items does not fit. | Check the field Goal Percent at the Campaign Item, make sure it is not filled with 0. As default, if the field is empty 100% should be transferred to GAM. |
LineItemError.ALREADY_STARTED | When submitting to the adserver: This error happens because you have updated fields that affect delivery (i.e. targetings fields) for an Item, that is already active and delivering. There are fields like "notes" which don't affect the delivery numbers and you are be able to update those in your the line item without pausing. | To be sure not to create problems, it is safer to always pause the line item (CampaignItem > AdServer Status), make the update and then activate the line item again. |
LineItemError.ALREADY_STARTED@ LineItem[0].StartDateTime | Similar to the error above this is returned, when trying to submit changes to a Campaign Item, that has already started running. In this particular case ADvendio tries to change the starting time of the item, which is not possible. | Please check if the fields from(hour) and from(minute) match the starting time of you line item in Google AdManager. In some rare cases there can be a mismatch in those. If that is the case, please change the values in ADvendio to match the values in Google, and then the submit should work. |
Could not login to DFP: no Network Code set and more than one Network | Your GAM user name is connected to more than one network in GAM | Please enter the according network ID into the AdServer Login record in ADvendio, to make sure the correct network is used. |
Report data is only available for the last 3 years. Older Delivery Data will not be updated. (Message key: WARNING_START_DATE_TOO_LONG_AGO ) | Your Campaign Item / Line Item has a runtime longer than three years. Due to limitations in the reporting API we can only import delivery data from the last three years into ADvendio. | To ensure the reporting numbers are still correct in total, please split your Campaign Item into separate items not running longer than three years. |
Error: No key in KeyLine | There is a problem in the Keys and Values assigned to the Campaign Item (within ADvendio), resulting in incomplete information being transferred to the AdServer. This only affects the old Key Values not the new Lightning Key Value selection. | Remove all Key Values from the Campaign Item and assign them again. Try to submit the Campaign Item again. |
[NotNullError.NULL @ 0.probabilityOfClose] | Your Order is missing the probability of close. | This is only relevant for Proposal Orders/Line Items in the Ad Manager Sales module, but the field is part of the old DSM module of Google (already deprecated). DSM will be deactivated in July 2019, if you want to test our Google Ad Manager integration of proposals and programmatic guaranteed, please use a newly created test network, where the DSM functionality is already deactivated. |
Sponsorship: [FeatureError.MISSING_FEATURE @ lineItem[0].lineItemType; trigger:'LINE_ITEM_MINIMUM_QUANTITY'] Standard: [FeatureError.MISSING_FEATURE @ lineItem[0].lineItemType; trigger:'LINE_ITEM_CONTRACTED_QUANTITY'] | For both fields in GAM (Minimum Quantity and Contracted Quantity) the feature needs to be activated within GAM. If the field is set for a Sponsorship or Standard item but not activated in the network the user will receive the following error message: | For an explanation of the GAM function have a look here at contracted Units Bought (which is the API name for the two fields in GAM): GAM API Documentation |
[PrecisionError.WRONG_PRECISION @ [0].netCost; trigger:'19999929000'] | This error can appear if the amount you are pushing to GAM is either too small for the GAM calculation. Please try to submit other values within the campaign item. | If you navigate to AdServer login, under Price Information, AdServer Price field, you can choose other value e.g Adserver Price. After selecting this option, Adserver Price under Campaign item must be set. Navigate to Campaign item, under Pricing Information, Adserver Price, enter the price value.(more info follow the link). https://advendio.atlassian.net/wiki/spaces/SO/pages/101417058/7.3.1.2+Submit+Prices+to+the+AdServer |
NullPointer (a value is missing) | An ID you are using for your Item (for example as targeting criteria) is not found in Google Ad Manager and thus the item could not be submitted. Unfortunately, this error comes directly from the AdServer and leaves no indication where the problem is. | Please check the following things:
|
CrossSellError.DISTRIBUTOR_RULE_VIOLATION_WARNING | You have an agreement with Google to not submit those ads. | This warning from GAM can be suppressed if you like to avoid the cross selling warning from GAM. Mark the checkbox "skipCrossSellingRuleWarningChecks" on the line item to true to skip these warnings. These rules are applied to line items targeting inventory shared by a distributor partner for cross selling when performing any action on this line item. The default is false. |
(No Ad Server Specified or it is inactive: null) | Our Gateway can not find which AdServer it needs to communicate with. The Item you're using is maybe not connected to an AdServer. | Check two things: For your campaign item, has the connected AdType an AdServer Login entered? If that is true, is the AdServer Login in ADvendio set to active? If inactive it will be ignored from our Gateway. |
START_DATE_TIME_IS_IN_PAST @ lineItem[0].startDateTime] |
| Check two things:
|
Error: [FeatureError.MISSING_FEATURE @ [0]; trigger:'PROPOSALS_LITE'] | In our Media Campaign, the field “AdServer Order Type” has an invalid option | We need to select the correct option according to our current setup |
Error: [UniqueError.NOT_UNIQUE @ [0].name; trigger: | Media Campaign name already submitted to the adserver | We need to change to a new name our Media Campaign |
CommonError.NOT_FOUND @ lineItem[0].targeting.customTargeting | One or more Targeting Criteria you’ve selected was not found in Google AdManager, thus the push of the Line Item failed, because the intended targeting could not be set. The message also states which type of targeting failed, e.g. geo, device, audience customTargeting = Key ValuesError Messages: [EntityChildrenLimitReachedError.TARGETING_EXPRESSION_LIMIT_FOR_LINE_ITEM_REACHED @ lineItem[0]; trigger:'7254250699'] | Please review the targeting criteria set in ADvendio It could be that the ID saved in ADvendio is invalid for GAM, which might mean you need to delete the related Connection ID record and import targeting of the type again. Please also consider if your User does have sufficient permissions to access targeting in GAM |
Invalid JSON targeting entry type (Key: "aOL9X00000CTVEKUAP" Value: "VALUE"). No valid associated connection ID found, this entry will be discarded | This is an error that indicates and invalid value has been used in the Freeform Key Values feature. Especially when using Special characters, such as ~Broad and *Prefix, there are specific rules to apply. These characters are expected to be at the beginning or end of the value. The Error message states the value that is invalid and will be ignored in the submit to Google AdManager. Please note all other Key Value Targeting will be updated successfully. | In order to prevent such errors, check your Key Value Targeting on the Campaign Item. Validate all Values are correct and if special characters are used, that they are at the correct position and the rules of Google are adhered. |
Error Messages: [EntityChildrenLimitReachedError.TARGETING_EXPRESSION_LIMIT_FOR_LINE_ITEM_REACHED @ lineItem[0]; trigger:'XXXXXXXXXX'] | The number of targeting expressions on the line item exceeds the max number of targeting expressions allowed per line item in the network. More info on targeting expression limits: https://developers.google.com/ad-manager/api/reference/v202505/TargetingPresetService | Use one Targeting Group: Put all criteria into a single Targeting Group instead of several. This reduces connectors and makes the expression lighter. Use native Geo targeting: Replace custom key-values for locations (e.g. “Glimr real-time location”) with GAM’s native Geography targeting where possible. Geo targeting usually counts as one node, no matter how many cities you select. Prefer “Include” over “Exclude” for cities: If you only need a few cities, include those (e.g. 10 cities) instead of excluding a long list. This keeps the expression much smaller. Use a single Audience Segment for complex rules: For complex behavioural targeting, build one Audience Segment in GAM and target only that Segment ID from ADvendio. This replaces many separate criteria with a single node in GAM. |
Error Messages: [RequiredCollectionError.REQUIRED @ lineItem[0].creativePlaceholders] | The line item that is being submitted has no valid creative placeholders defined (e.g., because of a configuration mismatch or missing picklist values). | In the Ad Type, select at least one picklist value for the “Master” and/or “CompanionSize” slots. For more information on slot sizes, see https://advendio.atlassian.net/wiki/spaces/SO/pages/41910310/3.1.5.2+Slot+sizes. |
Error Messages: [LineItemError.UPDATE_ARCHIVED_LINE_ITEM_NOT_ALLOWED @ lineitem XXXXXX] | The line item that is being submitted corresponds to a line item that has been archived in GAM. GAM does not allow archived line items to be re-pushed from ADvendio. | Option 1: Unarchive the line item in GAM and re-push from ADvendio. Option 2: Create a new line item in ADvendio and push this new item. |
Error Messages: [ProposalLineItemProgrammaticError.INVALID_SIZES @ [0].creativePlaceholders XXXXXXX] | The native creative templates sent by ADvendio (configured in the Ad Type's "ADvendio__Master__c" field) do not strictly match the allowed creative configuration defined by the programmatic deal in GAM. | To use custom native formats with Programmatic Guaranteed deals, you must utilize GAM's publisher-hosted creative feature. You can resolve the error by setting the Creative Source field to "PUBLISHER" at the Campaign Item level in ADvendio before resubmitting the campaign. |
[ProposalLineItemError.WRONG_COST @ [0].netCost; trigger:'XXXXXXXXXX XXXXXXXXXX'] | The contracted cost sent by ADvendio does not match what GAM calculates from the “rate × quantity” formula. This occurs when the Overbooking Factor is set on a Programmatic Guaranteed campaign item. GAM does not support overbooking for PG deals, the inflated booking quantity causes a mismatch between the cost ADvendio sends and what GAM independently calculates. | Remove the Overbooking Factor from the Campaign Item (set it to 0%). Overbooking is not a supported feature in GAM for Programmatic Guaranteed campaigns. Once removed, the contracted cost will align with GAM’s calculation and the submission should succeed. |
[OrderActionError.CANNOT_APPROVE_COMPANY_CREDIT_STATUS_NOT_ACTIVE @ agency; trigger:'XXXXXXXX'] | The Agency company record in Google Ad Manager does not have an active credit status. The trigger value shows the GAM Company ID. | This is a GAM configuration issue, not ADvendio. Log in to Google Ad Manager → Admin → Companies → Find the Company ID from the trigger → Set Credit Status to Active → Save → Resubmit campaign in ADvendio. Note: Requires GAM admin permissions. |
No programmatic buyer with the name XXXX data found. Please check if a valid id is entered or the name of the account is matching the spelling in the external system | The error occurs because the External Account ID stored in ADvendio for the Programmatic Buyer does not match the corresponding Buyer ID in GAM. When ADvendio attempts to submit a Programmatic Guaranteed deal, it looks up the buyer using this ID, and GAM rejects it because it can't find a matching programmatic buyer. | Update the External Account ID record in ADvendio so that it matches the actual Buyer ID shown in GAM. If a direct ID match doesn't resolve the issue, an alternative is to remove the External Account ID entirely and ensure the account name in ADvendio exactly matches the buyer name in GAM, allowing the system to fall back to name-based matching.
Note: More than one External Account ID can be linked to the same account, and the account name and Connection ID name do not need to be identical. |
[LineItemError.INVALID_LINE_ITEM_CURRENCY @ lineItem[0]; trigger:'XXX' | The currency (´XXX´) being pushed to GAM has not yet been added to the Secondary Currencies in the GAM interface. | In GAM:
Note: Secondary currency can only be added in Google Ad Manager 360 and networks with Programmatic Direct. |
XXX is no valid size format. Use the following format: "[0-9]+x[0-9]+" | This error occurs because Google Ad Manager expects the "ADvendio__Master__c" field to follow a specific numeric "Width x Height" format (e.g., 300x250). When a non-numeric string is passed to the Ad Server, the system validation fails because it does not match the required numeric pattern. | Create an Ad Creative Template in ADvendio and link it to your specific GAM Native or Custom Template ID, rather than entering a custom text size. Technical explanation for solution: This means the system will send the standard 1x1 size "behind the scenes" (as this is the standard placeholder for Custom templates). This allows the item to push successfully while ensuring the correct creative template and variables are mapped in GAM without triggering size validation errors. |
NotNullError.NULL @ [XXX].programmaticCreativeSource; trigger:’null’] | This error indicates that the required field “programmaticCreativeSource” was sent with a null (empty) value in the API request. For Programmatic Guaranteed deals, GAM requires this field to be populated to define how creatives will be sourced. | Ensure that the ADvendio__CreativeSource__c field is populated with a valid value. |
Warning : External Custom Field "name/ID" has not been found in the target platform. Submit has been done without the custom field. | The GAM user account connected to ADvendio does not have sufficient permissions to access Custom Fields via the API. GAM distinguishes between UI access and API access for custom fields — a user may be able to view and edit custom fields directly in the GAM interface, but the API call made by ADvendio requires the explicit "Edit custom fields" permission to be enabled on the user's role. Note that this message is a warning; the submit will still complete, but the custom field value will not be transferred to GAM. | In Google Ad Manager, navigate to Admin → Access & authorization → Users. Locate the user or service account used for the ADvendio connection and click on their assigned Role. In the permissions list, search for “Custom fields” and ensure the following are checked: View custom fields (allows ADvendio to read custom field definitions); Edit custom fields (allows ADvendio to write custom field values). Note: If the user is assigned a built-in role (e.g. "Trafficker"), GAM does not allow these permissions to be enabled. In that case, the user must be switched to a Custom Role or an Administrator Role. Once the permissions are updated, resubmit the Campaign Item — the warning should no longer appear and the custom field value will be pushed to GAM. For more information on configuring External Custom Fields, see [External Custom Field] Map and transfer data into Google Ad Manager. |
LineItemOperationError.NOT_APPLICABLE | This error is returned by GAM when the action you are attempting to perform is not permitted given the line item's current state (e.g., its type, lifecycle stage, or delivery state makes the action incompatible). In the specific case of AdServer Status updates from ADvendio, this error may occur when attempting to set the AdServer Status to "Stopped" (mapped to "released" in GAM) on a non-guaranteed Campaign Item. The "released" action is designed to release reserved inventory, but non-guaranteed line items never reserve inventory in GAM — they go directly to "Ready" after submission. Because there is no reserved inventory to release, GAM considers the action not applicable to the item's current state and rejects it. | For the Stopped → released case on non-guaranteed items: use "Paused" as the AdServer Status instead. "Paused" (mapped to "paused" in GAM) stops delivery without attempting to release inventory, and is compatible with both guaranteed and non-guaranteed line items. More broadly, if you encounter this error in other contexts, review whether the action you are attempting is compatible with the line item's current type and state in GAM. For details on status mappings, see 7.3.4 How to Configure "Update Ad-Status in AdServer" for Campaign Items. |
NotNullError.NULL @ [0].marketplaceInfo.buyerAccountId | This error occurs when | Use GAM's UI History feature on the Proposal to check whether the buyer was changed or removed directly in GAM. If the buyer was removed, re-assign the correct Programmatic Buyer in GAM. In ADvendio, verify that the Programmatic Buyer field on the Media Campaign is populated and that the linked External Account ID record is active, correctly configured (Type = Programmatic Buyer), and matches the corresponding Buyer ID in GAM. |
Relation between Billing Categories and Line Item Types (AdTypes)
Billing Category | Allowed AdTypes |
|---|---|
CPA |
|
CPC |
|
CPD |
|
CPM |
|
Google Ad Manager Info:
These types are defined in the field AdType of the AdType referenced in your line item. For further reference read 3.1.5 Ad Type.
For most common error cases have a look here at 7.8 Troubleshooting Error Messages: Resolving Common Issues and Solutions