Use custom rules

Custom rules notify you of violations to best practices before posting changes. These notifications can appear as warnings or errors.  There’s a set of built-in, recommended rules set as warnings, and you can edit these to meet your needs.

Note: 
If you don't find the built-in rules helpful and want to hide them, you can quickly pause them in bulk in the custom rules view.

Built-in custom rules

These rules are built-in by default, but you can customize or disable any of them. The following rules apply to campaigns, unless noted otherwise.
 

Description Alerting condition Rationale
Sitelinks with no descriptions  

Warn if you try to add or edit sitelink feed items that don’t have description text associated with them.

Note: See detailed explanation

Sitelink extensions with description text can improve your CTR. Learn more
Fewer than 4 sitelink extensions  

Warn if there aren’t at least 4 sitelinks at the account level, Search campaign level, or at least one sitelink for each ad group within the campaign.

Note: See detailed explanation

Use at least 4 sitelink extensions to make your ads more prominent, which can increase CTR. Learn more
 
Fewer than 4 callout extensions

Warn if there aren’t at least 4 callouts at the account level, Search campaign level, or at least one callout for each ad group within the campaign.

Note: See detailed explanation

Use at least 4 callout extensions to make your ads more prominent, which can increase CTR. Learn more
Campaign has no ad groups

Warn if a campaign has been created but doesn’t contain any active ad groups.

Note: See detailed explanation

Your campaign can’t serve because it contains no active ad groups. Create a new ad group or change the status of an existing ad group to "Enabled". Learn more
Ad group has no ads

Warn if an ad group has been created but doesn’t contain any active ads.

Note: See detailed explanation

Your ad group contains no active ads. Create a new ad or change the status of an existing ad to "Enabled". Learn more
Non-serving Search ads 

Warn if a Search ad doesn’t contain any targeting information.

Note: See detailed explanation

Your ads can’t serve from this ad group because it has no active keywords or dynamic ad targets added to it. Learn more
Non-serving Shopping ads

Warn if Shopping ad group has no product group.

Note: See detailed explanation

Your ads can’t serve from this ad group because it has no product groups added to it. Create a product group. Learn more
No structured snippet extensions

Warn if a Search campaign has been created but doesn’t contain structured snippet extensions.

Note: See detailed explanation

Use at least 1 structured snippet extension to make your ads more prominent, which can increase CTR. Learn more
Not targeting Search Partners

Warn if a campaign isn’t targeting Search Partners.

Note: See detailed explanation

Showing your ads on partner sites can help increase your ads’ reach and traffic. Clickthrough rates on search partners don't affect Quality Scores on Google Search. Learn more
Manual bidding

Warn if a campaign is using manual bidding.

Note: See detailed explanation

Use Enhanced CPC or an automated bidding strategy to bid more efficiently. Learn more
No optimized ad rotation

Warn if a Search campaign is not using optimized ad rotation.

Note: See detailed explanation

Use the "Optimize: Prefer best performing ads" setting to show your best ads. Learn more
Accelerated delivery

Warn if a campaign is using accelerated delivery.

Note: See detailed explanation

Accelerated delivery is likely to use up your campaign's limited daily budget early in the day. Use standard delivery so that the delivery of your ads is spread more evenly throughout the day. Learn more
No Search audiences

Warn if a campaign is not using remarketing lists for search ads, customer match, or audiences.

Note: See detailed explanation

Attach an audience list to get a better return on investment. Learn more 
Fewer than 3 ads
(applied to ad groups)

Warn if there’s only 1 or 2 ads in an ad group and optimized ad rotation is enabled for the Search campaign.

Note: See detailed explanation

Use at least 3 variations of your ads in your ad groups to let optimized ad rotation show the best performing one, which may improve CTR or CVR. Learn more
Conversion tracking not set up

Warn if the account doesn’t have conversion tracking enabled.

Note: See detailed explanation

Enable conversion tracking to unlock helpful features, like better reporting and automated bidding. Learn more
Image ads but no responsive ads (applied to ad groups)

Warn if a Display ad group has image ads but not responsive ads.

Note: See detailed explanation

You have image ads but no responsive ads in your Display ad group. Use responsive ads to get many more conversions at a similar CPA. Learn more
 
Campaign flexible reach set to “Targeting"

Warn if biddable audiences are added to a Search or Shopping campaign set as “Targeting.”

Note: See detailed explanation

You have Search or Shopping interests and remarketing targeting set to “Targeting” which restricts traffic to just the users in your audience.  Use “Observation” to target all users and adjust bids for the ones in your audience. Learn more
Ad group flexible reach set to "Targeting"

Warn if biddable audiences are added to a Search or Shopping ad group set as “Targeting."

Note: See detailed explanation

You have Search or Shopping interests and remarketing targeting set to “Targeting,” which restricts traffic to just the users in your audience.  Use “Observation” to target all users and adjust bids for the ones in your audience. Learn more
Targeting optimization disabled
(applied to ad groups)
 

Warn if an ad group in display campaign has targeting optimization set to disabled.

Note: See detailed explanation

You have targeting optimization disabled. Enable conservative targeting to optimize your targeting to reach people your targeting wouldn’t otherwise reach, at around the same cost per person, automatically. Learn more
Inactive Search audience targeted
(applied to audiences)
 

Warn if an audience has fewer than 100 active users and is targeted by a Search campaign or ad group.

Note: See detailed explanation

Your audience has fewer than 100 active users and is targeted by a Search campaign or ad group. Your ads won’t serve against this list until more active users are added to it. Learn more
Inactive Display audience targeted
(applied to audiences)
 

Warn if an audience has fewer than 100 active users and is targeted by a Display ad group.

Note: See detailed explanation

Your audience has fewer than 100 active users and is targeted by a Display ad group. Your ads won’t serve against this list until more active users are added to it. Learn more

Instructions

Editing custom rules

To edit built-in custom rules:

  1. In the sidebar below the type list, click Custom rules.
  2. In the data view, select the rule you want to edit.
  3. In the edit panel, make your changes. You can click Comments to add notes about the rule.
  4. Above the data view, click Apply rule changes.

To remove built-in custom rules:

  1. In the sidebar below the type list, click Custom rules.
  2. In the data view, select the rule you want to remove.
  3. In the data view, click Remove.
  4. Above the data view, click Apply rule changes
Note: Keep in mind that built-in rules can’t be removed and will instead be paused if you try to remove them.
 

To restore the default settings for built-in custom rules:

  1. In the sidebar below the type list, click Custom rules.
  2. In the data view, click Restore defaults.
  3. Above the data view, click Apply rule changes.

To reshow rule violations that you’ve ignored:

  1. In the sidebar below the type list, click Custom rules.
  2. In the data view, click Reshow ignored violations.
  3. Above the data view, click Apply rule changes.

Creating new custom rules

To create your own custom rules:

  1. In the sidebar below the type list, click Custom rules.
  2. Click Add custom rule.
  3. In the edit panel, fill out all the required fields.
  4. Click Edit below “Applies to” in the edit panel to select what the rule should apply to, such as keywords or text ads.
  5. Under "Violation criteria," select or enter the conditions that will violate a rule when these conditions are met. All criteria are AND-ed together. In other words, they must all be met for the item to violate the rule.
  6. Under “Severity,” select whether you’d like the rule to only notify you of violations or prevent changes that violate the rule from being posted.
  7. Above the data view, click Apply rule changes.
     

Examples of rules you can create

Here are some examples of violation criteria you can use to create custom rules that notify you whenever:

  • An optional field, such as “label,” isn’t entered. Use the following violation criteria:
    • label=""
  • A final URL is missing a domain. Use the following violation criteria:
    • status = enabled finalurl -: "www.exampleURLs.com"
  • The maximum CPC for a keyword exceeds a certain amount. Use the following violation criteria:
    • status = enabled maxcpc >= "4.00"
  • Call reporting hasn’t been enabled for call extensions. Use the following violation criteria:
    • status = enabled callreporting -= enabled
  • An enabled ad group doesn't contain at least two enabled expanded text ads with the text 'abc'
    • status = enabled COUNT(expandedtextads, status = enabled headline1 : "abc") < 2

Custom rule explanations

Sitelinks with no descriptions

Applies to: Sitelinks

Violation criteria:

status = enabled
associationtype=specific
descriptionline1=""
descriptionline2=""

Overview

The filter above has 3 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that have a type of Search
  • that have sitelinks but no description text

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 3 top-level conditions here and they must all match.

status = enabled

Only look at enabled sitelinks; ignore those marked for deletion.

associationtype=specific

Only look at associations of actual shared sitelinks; ignore special <sitelinks disabled> items.

descriptionline1=""
descriptionline2=""

Look for sitelinks that have both description line 1 and description line 2 empty.

Rule: Fewer than 4 sitelink extensions

Applies to: Campaigns

Violation criteria:

status = enabled
campaigntype = search
OR(
    AND(
        EXIST(sitelinks, associationtype = specific)
        COUNT(sitelinks, approvalstatus -= (disapproved, sitesuspended)) < 4
    )
    AND(
        NOTEXIST(sitelinks)
        CONTAINER(
            COUNT(sitelinks, approvalstatus -= (disapproved, sitesuspended)) < 4
        )
    )
)
EXIST(adgroups,
    status = enabled
    NOTEXIST(sitelinks, approvalstatus -= (disapproved, sitesuspended))    
    NOTEXIST(sitelinks, associationtype -= specific))

Overview

The filter above has 4 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that have a type of Search
  • and that don't have the minimum of 4 resolved sitelinks or explicitly disable them
  • and that have at least one ad group that has no sitelinks and doesn't disable them either

If all these conditions are true, the campaign will be marked with a warning, the default severity for all custom rules.

Note: if you would like to simply change the number of sitelinks required, there are two separate "4" values to change: the count for sitelinks at the campaign level, and the count at the account level, both of which are in the overall OR function.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 4 top-level conditions here and they must all match.

status = enabled

Only enabled campaigns can be flagged.

campaigntype = search

Only those enabled campaigns that have a type of Search can be flagged.

OR(
    AND(
        EXIST(sitelinks, associationtype = specific)
        COUNT(sitelinks, approvalstatus -= (disapproved, sitesuspended)) < 4
    )
    AND(
        NOTEXIST(sitelinks)
        CONTAINER(
            COUNT(sitelinks, approvalstatus -= (disapproved, sitesuspended)) < 4
        )
    )
)

The OR function is a little more complicated, so let's look at the pieces from the inside out.

EXIST(sitelinks, associationtype = specific) checks if there exists at least one shared sitelink associated with the campaign. The associationtype = specific condition tests if sitelinks refer to a shared sitelink from the shared library. Other sitelinks, such as <sitelink disabled> entries, wouldn't pass this filter condition.

Next, COUNT(sitelinks, approvalstatus -= (disapproved, sitesuspended)) < 4 checks if there are fewer than 4 approved sitelinks associated with the campaign. These two conditions are grouped in an AND function, meaning they both have to match. So this portion asks: Are any shared sitelinks associated with this campaign, and if so, are there fewer than 4 approved?

The next AND condition is similar, but uses NOTEXIST to check if no sitelinks, even special entries like <sitelink disabled>, are associated with the campaign. It also wraps the COUNT portion in a CONTAINER function to count sitelinks for the owning container: the account. Putting these two together in an AND function, it asks: Are there no sitelinks associated with this campaign (not even special sitelinks), and if not, are there fewer than 4 of them approved at the account level?

Because those two questions are wrapped in an OR function, this filter condition asks if the answer to at least one of those two questions is "yes." In other words, it is asking: If there are any shared sitelinks associated with this campaign, are there fewer than 4 approved, but if there are none at the campaign level, and the campaign doesn't explicitly disable sitelinks, are there fewer than 4 approved at the account level? Or, seeing that when the campaign has no sitelinks, they will be "inherited" from the account, the question is more simply: Does the campaign have fewer than 4 resolved sitelinks and not disable them?

EXIST(adgroups,
    status = enabled
    NOTEXIST(sitelinks, approvalstatus -= (disapproved, sitesuspended))    
    NOTEXIST(sitelinks, associationtype -= specific))

This EXIST function is checking if there are any ad groups in the campaign that meet the specified filter, in which all conditions must match an ad group for it to be counted. The first condition, status = enabled, is only looking for enabled ad groups in the campaign.

NOTEXIST(sitelinks, approvalstatus -= (disapproved, sitesuspended)) then looks for ad groups that have no approved sitelinks attached.

Finally, NOTEXIST(sitelinks, associationtype -= specific) restricts it even further to look for ad groups that don't have any special sitelinks, such as <sitelink disabled> entries. So overall, this filter condition checks if the campaign contains at least one ad group that has no sitelinks and doesn't disable them either.

Rule: Fewer than 4 callout extensions

Applies to: Campaigns

Violation criteria:

status = enabled
campaigntype = search
OR(
    AND(
        EXIST(calloutextensions, associationtype = specific)
        COUNT(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) < 4
    )
    AND(
        NOTEXIST(calloutextensions)
        CONTAINER(
            COUNT(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) < 4
        )
    )
)
EXIST(adgroups,
    status = enabled
    NOTEXIST(calloutextensions, approvalstatus -= (disapproved, sitesuspended))    
    NOTEXIST(calloutextensions, associationtype -= specific))

Overview

The filter above has 4 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that have a type of Search
  • and that don't have the minimum of 4 resolved callout extensions or explicitly disable them
  • and that have at least one ad group that has no callout extensions and doesn't disable them either

If all these conditions are true, the campaign will be marked with a warning, the default severity for all custom rules.

Note: if you would like to simply change the number of callout extensions required, there are two separate "4" values to change: the count for callout extensions at the campaign level, and the count at the account level, both of which are in the overall OR function.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 4 top-level conditions here and they must all match.

status = enabled

Only enabled campaigns can be flagged.

campaigntype = search

Only those enabled campaigns that have a type of Search can be flagged.

OR(
    AND(
        EXIST(calloutextensions, associationtype = specific)
        COUNT(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) < 4
    )
    AND(
        NOTEXIST(calloutextensions)
        CONTAINER(
            COUNT(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) < 4
        )
    )
)

The OR function is a little more complicated, so let's look at the pieces from the inside out.

EXIST(calloutextensions, associationtype = specific) checks if there exists at least one shared callout extension associated with the campaign. The associationtype = specific condition tests if callout extensions refer to a shared callout extension from the shared library. Other callout extensions, such as <callout extensions disabled> entries, wouldn't pass this filter condition.

Next, COUNT(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) < 4 checks if there are fewer than 4 approved callout extensions associated with the campaign.

These two conditions are grouped in an AND function, meaning they both have to match. So this portion asks: Are any shared callout extensions associated with this campaign, and if so, are there fewer than 4 approved?

The next AND condition is similar, but uses NOTEXIST to check if no callout extensions, even special entries like <callout extensions disabled>, are associated with the campaign. It also wraps the COUNT portion in a CONTAINER function to count callout extensions for the owning container: the account. Putting these two together in an AND function, it asks: Are there no callout extensions associated with this campaign (not even special callout extensions), and if not, are there fewer than 4 of them approved at the account level?

Because those two questions are wrapped in an OR function, this filter condition asks if the answer to at least one of those two questions is "yes." In other words, it is asking: If there are any shared callout extensions associated with this campaign, are there fewer than 4 approved, but if there are none at the campaign level, and the campaign doesn't explicitly disable callout extensions, are there fewer than 4 approved at the account level? Or, seeing that when the campaign has no callout extensions, they will be "inherited" from the account, the question is more simply: Does the campaign have fewer than 4 resolved callout extensions and not disable them?

EXIST(adgroups,
    status = enabled
    NOTEXIST(calloutextensions, approvalstatus -= (disapproved, sitesuspended))    
    NOTEXIST(calloutextensions, associationtype -= specific))

This EXIST function is checking if there are any ad groups in the campaign that meet the specified filter, in which all conditions must match an ad group for it to be counted. The first condition, status = enabled, is only looking for enabled ad groups in the campaign.

NOTEXIST(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) then looks for ad groups that have no approved callout extensions attached.

Finally, NOTEXIST(calloutextensions, associationtype -= specific) restricts it even further to look for ad groups that don't have any special callout extensions, such as <callout extensions disabled> entries. So overall, this filter condition checks if the campaign contains at least one ad group that has no callout extensions and doesn't disable them either.

Rule: Campaign has no ad groups

Applies to: Campaigns

Violation criteria:

status = enabled
campaigntype -= universalapp
NOTEXIST(adgroups, status = enabled)

Overview

The filter above has 3 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that don't have a type of Universal app
  • and that have no enabled ad groups.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 3 top-level conditions here and they must all match.

status = enabled

Only enabled campaigns can be flagged. 

campaigntype -= universalapp

Only those enabled campaigns that don't have a type of Universal app can be flagged.

NOTEXIST(adgroups, status = enabled)

This function checks if there are no ad groups contained in the campaign, but only considers ad groups that pass the status = enabled check. So if the campaign has some paused or removed ad groups, but no enabled ad groups, this condition will still pass and the campaign will be flagged with the warning.

Rule: Ad group has no ads

Applies to: Ad groups

Violation criteria:

campaignstatus = enabled
status = enabled
NOTEXIST(ads, status = enabled)

Overview

The filter above has 3 root-level conditions. From top to bottom, it is looking for:

  • Ad groups within enabled campaigns
  • that are also enabled themselves
  • and that have no enabled ads

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 3 top-level conditions here and they must all match.

campaignstatus = enabled

Only ad groups whose owning campaign is enabled can be flagged.

status = enabled

Only enabled ad groups can be flagged.

NOTEXIST(ads, status = enabled)

This function checks if there are no ads, of any type, contained in the ad group, but only considers ads that pass the status = enabled check. So if the ad group has some paused or removed ads, but no enabled ads, this condition will still pass and the ad group will be flagged with the warning.

Rule: Non-serving Search ads

Applies to: Ad groups

Violation criteria:

status = enabled
campaignstatus = enabled
campaigntype = search
NOTEXIST(dynamicadtargets; keywords, status = enabled)

Overview

The filter above has 4 root-level conditions. From top to bottom, it is looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • and are within campaigns with a type of Search
  • and that have no enabled criteria

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 4 top-level conditions here and they must all match.

status = enabled

Only enabled ad groups can be flagged.

campaignstatus = enabled
campaigntype = search

Only enabled ad groups whose owning campaign is enabled and has a type of Search can be flagged.

NOTEXIST(dynamicadtargets; keywords, status = enabled)

This function checks if there are no criteria applying to Search campaigns contained in the ad group, but only considers criteria that pass the status = enabled check. So if the ad group has some paused or removed criteria, but no enabled criteria, this condition will still pass and the ad group will be flagged with the warning.

Rule: Non-serving Shopping ads

Applies to: Ad groups

Violation criteria:

status = enabled
campaignstatus = enabled
campaigntype = shopping
NOTEXIST(productgroups)

Overview

The filter above has 4 root-level conditions. From top to bottom, it is looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • and are within shopping campaigns
  • and that have no product groups

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 4 top-level conditions here and they must all match.

status = enabled

Only enabled ad groups can be flagged.

campaignstatus = enabled
campaigntype = shopping

Only enabled ad groups whose owning campaign is enabled and has a type of Shopping can be flagged.

NOTEXIST(productgroups)

This function checks if there are no product groups in the ad group. If none exist, the ad group will be flagged.

Rule: No structured snippet extensions

Applies to: Campaigns

Violation criteria:

status = enabled
campaigntype = search
OR(
    AND(
        EXIST(structuredsnippetextension, associationtype = specific)
        COUNT(structuredsnippetextension, approvalstatus -= (disapproved, sitesuspended)) < 1
    )
    AND(
        NOTEXIST(structuredsnippetextension)
        CONTAINER(
            COUNT(structuredsnippetextension, approvalstatus -= (disapproved, sitesuspended)) < 1
        )
    )
)
EXIST(adgroups,
    status = enabled
    NOTEXIST(structuredsnippetextension, approvalstatus -= (disapproved, sitesuspended))    
    NOTEXIST(structuredsnippetextension, associationtype -= specific))

Overview

The filter above has 4 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that have a type of Search
  • and that don't have any resolved structured snippet extensions or explicitly disable them
  • and that have at least one ad group that has no structured snippet extensions and doesn't disable them either

If all these conditions are true, the campaign will be marked with a warning, the default severity for all custom rules.

Note: if you would like to simply change the number of structured snippet extensions required, there are two separate "1" values to change: the count for structured snippet extensions at the campaign level, and the count at the account level, both of which are in the overall OR function.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 4 top-level conditions here and they must all match.

status = enabled

Only enabled campaigns can be flagged.

campaigntype = search

Only those enabled campaigns that have a type of Search can be flagged.

OR(
    AND(
        EXIST(structuredsnippetextensions, associationtype = specific)
        COUNT(structuredsnippetextensions, approvalstatus -= (disapproved, sitesuspended)) < 1
    )
    AND(
        NOTEXIST(structuredsnippetextensions)
        CONTAINER(
            COUNT(structuredsnippetextensions, approvalstatus -= (disapproved, sitesuspended)) < 1
        )
    )
)

The OR function is a little more complicated, so let's look at the pieces from the inside out.

EXIST(structuredsnippetextensions, associationtype = specific) checks if there exists at least one shared structured snippet extension associated with the campaign. The associationtype = specific condition tests if structured snippet extensions refer to a shared structured snippet extension from the shared library. Other structured snippet extensions, such as <structured snippet extensions disabled> entries, wouldn't pass this filter condition.

Next, COUNT(structuredsnippetextensions, approvalstatus -= (disapproved, sitesuspended)) < 1 checks if there are no approved structured snippet extensions associated with the campaign. These two conditions are grouped in an AND function, meaning they both have to match. So this portion asks: Are any shared structured snippet extensions associated with this campaign, and if so, are there fewer than 1 approved?

The next AND condition is similar, but uses NOTEXIST to check if no structured snippet extensions, even special entries like <structured snippet extensions disabled>, are associated with the campaign. It also wraps the COUNT portion in a CONTAINER function to count structured snippet extensions for the owning container: the account. Putting these two together in an AND function, it asks: Are there no structured snippet extensions associated with this campaign (not even special structured snippet extensions), and if not, are there fewer than 1 approved at the account level?

Because those two questions are wrapped in an OR function, this filter condition asks if the answer to at least one of those two questions is "yes." In other words, it is asking: If there are any shared structured snippet extensions associated with this campaign, are there fewer than 1 approved, but if there are none at the campaign level, and the campaign doesn't explicitly disable structured snippet extensions, are there fewer than 1 approved at the account level? Or, seeing that when the campaign has no structured snippet extensions, they will be "inherited" from the account, the question is more simply: Does the campaign have no resolved structured snippet extensions and not disable them?

EXIST(adgroups,
    status = enabled
    NOTEXIST(structuredsnippetextensions, approvalstatus -= (disapproved, sitesuspended))    
    NOTEXIST(structuredsnippetextensions, associationtype -= specific))

This EXIST function is checking if there are any ad groups in the campaign that meet the specified filter, in which all conditions must match an ad group for it to be counted. The first condition, status = enabled, is only looking for enabled ad groups in the campaign.

NOTEXIST(structuredsnippetextensions, approvalstatus -= (disapproved, sitesuspended)) then looks for ad groups that have no approved structured snippet extensions attached.

Finally, NOTEXIST(structuredsnippetextensions, associationtype -= specific) restricts it even further to look for ad groups that don't have any special structured snippet extensions, such as <structured snippet extensions disabled> entries. So overall, this filter condition checks if the campaign contains at least one ad group that has no structured snippet extensions and doesn't disable them either.

Rule: Not targeting Search Partners

Applies to: Campaigns

Violation criteria:

status = enabled
campaigntype = (search, shopping)
includesearchpartners = disabled

Overview

The filter above has 3 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that have a type of Search or Shopping
  • and that have Include search partners disabled

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 3 top-level conditions here and they must all match.

status = enabled

Only enabled campaigns can be flagged.

campaigntype = (search, shopping)

Only those enabled campaigns that have a type of Search or Shopping can be flagged.

includesearchpartners = disabled

Only those enabled campaigns of the specified types which have Include search partners disabled can be flagged.

Rule: Manual bidding

Applies to: Campaigns

Violation criteria:

status = enabled
campaigntype = (search, shopping, display)
accountsupportsconversions = enabled
bidstrategytype = manualcpc
enhancedcpc = disabled

Overview

The filter above has 5 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that have a type of Search, Shopping, or Display
  • that are within accounts which support conversion tracking
  • that have a bid strategy of Manual CPC
  • and that have Enhanced CPC disabled

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 5 top-level conditions here and they must all match.

status = enabled

Only enabled campaigns can be flagged.

campaigntype = (search, shopping, display)

Only those enabled campaigns that have a type of Search, Shopping, Display can be flagged.

accountsupportsconversions = enabled

Only those enabled campaigns of the specified types which are in accounts that have conversion tracking enabled can be flagged.

bidstrategytype = manualcpc
enhancedcpc = disabled

And finally, those campaigns must have a bid strategy type of Manual CPC and have Enhanced CPC disabled for the campaign to be flagged.

Rule: No optimized ad rotation

Applies to: Ad groups

Violation criteria:

status = enabled
campaignstatus = enabled
campaigntype = search
adrotation = rotateindefinitely
COUNT(ads, status = enabled) > 1

Overview

The filter above has 5 root-level conditions. From top to bottom, it is looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • which have a type of Search
  • and where the ad group has an ad rotation of "Rotate ads indefinitely"
  • and at least 2 enabled ads of any kind.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 5 top-level conditions here and they must all match.

status = enabled

Only enabled ad groups can be flagged.

campaignstatus = enabled
campaigntype = search

Ad groups must exist in enabled campaigns that have a type of Search

adrotation = rotateindefinitely

Only those enabled ad groups whose ad rotation is set to "Do not optimize: Rotate ads indefinitely" can be flagged.

COUNT(ads, status = enabled) > 1

But only if they have at least one ad of any type that passes the status = enabled filter. If the ad group has one enabled ad and another paused ad, for example, it won't be flagged.

Rule: Accelerated delivery

Applies to: Campaigns

Violation criteria:

status = enabled
campaigntype = (search, shopping, display)
deliverymethod -= standard

Overview

The filter above has 3 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that have a type of Search, Shopping, or Display
  • and that aren't using a standard delivery method

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 3 top-level conditions here and they must all match.

status = enabled

Only enabled campaigns can be flagged.

campaigntype = (search, shopping, display)

Only those enabled campaigns that have a type of Search, Shopping, or Display can be flagged.

deliverymethod -= standard

Only those enabled campaigns of the specified types that aren't using a standard delivery method can be flagged.

Rule: No Search audiences

Applies to: Campaigns

Violation criteria:

status = enabled
campaigntype = (search, shopping)
NOTEXIST(audiences, status = enabled)
EXIST(adgroups, status = enabled NOTEXIST(audiences, status = enabled))

Overview

The filter above has 4 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that have a type of Search or Shopping
  • that don't have enabled audiences
  • and then have at least one enabled ad group that doesn't have enabled audiences

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 4 top-level conditions here and they must all match.

status = enabled

Only enabled campaigns can be flagged.

campaigntype = (search, shopping)

Only those enabled campaigns that have a type of Search or Shopping can be flagged.

NOTEXIST(audiences, status = enabled)

Only those enabled campaigns of the specified types which don't have enabled audiences can be flagged.

EXIST(adgroups, status = enabled NOTEXIST(audiences, status = enabled))

This function checks for the existence of an ad group which meets all of the child conditions. Those are status = enabled, meaning the ad group must be enabled, and NOTEXIST(audiences, status = enabled), meaning the ad group must contain no audiences meeting the status = enabled filter condition. In other words, a campaign can only be flagged if it contains at least one enabled ad group that itself contains no enabled audiences.

Rule: Fewer than 3 ads

Applies to: Ad groups

Violation criteria:

status = enabled
campaignstatus = enabled
campaigntype = search
adrotation = optimize
COUNT(ads, status = enabled approvalstatus -= (disapproved, sitesuspended)) < 3

Overview

The filter above has 5 root-level conditions. From top to bottom, it is looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • which have a type of Search
  • and where the ad group has an optimized ad rotation
  • and less than 3 enabled and approved ads of any kind

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 5 top-level conditions here and they must all match.

status = enabled

Only enabled ad groups can be flagged.

campaignstatus = enabled
campaigntype = search

Enabled ad groups must exist in enabled campaigns that have Search as a campaign type.

adrotation = optimize

Only those enabled ad groups whose ad rotatation is set to "Optimize: Prefer best performing ads" can be flagged.

COUNT(ads, status = enabled approvalstatus -= (disapproved, sitesuspended)) < 3

Ad groups can only be flagged if they have less than 3 ads of any type that passes the child conditions here. They are status = enabled, meaning the ads must be enabled, and approvalstatus -= (disapproved, sitesuspended), meaning the ads must be approved (or simply not disapproved).

Rule: Conversion tracking not set up

Applies to: Campaigns

Violation criteria:

status = enabled
accountsupportsconversions = disabled

Overview

The filter above has 2 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that are within accounts that don't have conversion tracking enabled.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 2 top-level conditions here and they must all match.

status = enabled

Only enabled campaigns can be flagged.

accountsupportsconversions = disabled

Only those enabled campaigns within accounts that don't support conversion tracking will be flagged.

Rule: Image ads but no responsive ads

Applies to: Ad groups

Violation criteria:

status = enabled
campaignstatus = enabled
campaigntype = display
CONTAINER(accountsupportsconversions = enabled)
EXIST(imageads, status = enabled approvalstatus -= (disapproved, sitesuspended))
NOTEXIST(responsiveads, status = enabled approvalstatus -= (disapproved, sitesuspended))

Overview

The filter above has 6 root-level conditions. From top to bottom, it is looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • which have a type of Display
  • which are within accounts with conversion tracking enabled
  • and where the ad group has enabled, approved image ads
  • but no enabled, approved responsive ads

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 6 top-level conditions here and they must all match.

status = enabled

Only enabled ad groups can be flagged.

campaignstatus = enabled
campaigntype = display
CONTAINER(accountsupportsconversions = enabled)

Ad groups must exist in enabled campaigns that have Display as a campaign type, and whose owning accounts have conversion tracking enabled.

EXIST(imageads, status = enabled approvalstatus -= (disapproved, sitesuspended))
NOTEXIST(responsiveads, status = enabled approvalstatus -= (disapproved, sitesuspended))

This does very similar checks for two different types of ads. For each check, it is only considering ads which pass the two child filter conditions of status = enabled, which means the ad must be enabled and approvalstatus -= (disapproved, sitesuspended), which means the ad must be approved (or not disapproved). The ad group can only be flagged if it has image ads that meet those conditions, but no responsive ads that meet those conditions.

Rule: Campaign flexible reach set to “Targeting”

Applies to: Campaigns

Violation criteria:

status = enabled
campaigntype = (search, shopping)
interestsandremarketing = targeting
EXIST(audiences, status = enabled)

Overview

The filter above has 4 root-level conditions. From top to bottom, it is looking for:

  • Enabled campaigns
  • that have a type of Search, or Shopping
  • that have interests and remarketing reach set to 'Targeting'
  • And that have enabled audiences

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 4 top-level conditions here and they must all match.

status = enabled

Only enabled campaigns can be flagged.

campaigntype = (search, shopping)

Only those enabled campaigns that have a type of Search or Shopping can be flagged.

interestsandremarketing = targeting

Only those enabled campaigns of the specified types that have "Targeting" for their "Interests and remarketing" flexible reach can be flagged.

EXIST(audiences, status = enabled)

And finally, the campaigns must contain at least one enabled audience for them to be flagged.

Rule: Ad group flexible reach set to “Targeting”

Applies to: Ad groups

Violation criteria:

status = enabled
campaignstatus = enabled
campaigntype = (search, shopping)
interestsandremarketing = targeting
EXIST(audiences, status = enabled)

Overview

The filter above has 5 root-level conditions. From top to bottom, it is looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • which have a type of Search or Shopping
  • and where the ad group has interests and remarketing reach set to "Targeting"
  • and has enabled audiences

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 5 top-level conditions here and they must all match.

status = enabled

Only enabled ad groups can be flagged.

campaignstatus = enabled
campaigntype = (search, shopping)

Ad groups must exist in enabled campaigns that have Search or Shopping as the campaign type.

interestsandremarketing = targeting

Only those enabled ad groups which have "Targeting" for their "Interests and remarketing" flexible reach can be flagged.

EXIST(audiences, status = enabled)

And finally, the ad groups must contain at least one enabled audience for them to be flagged.

Rule: Targeting optimization disabled

Applies to: Ad groups

Violation criteria:

status = enabled
campaignstatus = enabled
campaigntype = display
targetingoptimization = disabled

Overview

The filter above has 4 root-level conditions. From top to bottom, it is looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • which have a type of Display
  • and where the ad group has targeting optimization disabled

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 4 top-level conditions here and they must all match.

status = enabled

Only enabled ad groups can be flagged.

campaignstatus = enabled
campaigntype = display

Ad groups must exist in enabled campaigns that have Display as the campaign type.

interestsandremarketing = targeting

Only those enabled ad groups which have "Targeting" for their "Interests and remarketing" flexible reach can be flagged.

targetingoptimization = disabled

And finally, the ad groups must have targeting optimization disabled for them to be flagged.

Rule: Inactive Search Network audience targeted

Applies to: Audiences

Violation criteria:

status = enabled
campaignstatus = enabled
campaigntype = search
noofsearchusers < 100
CONTAINER(status = enabled)

Overview

The filter above has 5 root-level conditions. From top to bottom, it is looking for:

  • Enabled audiences
  • that are within enabled campaigns
  • which have a type of Search
  • and where the audience has fewer than 100 active users
  • and exists in an active container (ad group or campaign).

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 5 top-level conditions here and they must all match.

status = enabled

Only enabled audiences can be flagged.

campaignstatus = enabled
campaigntype = search

These audiences must exist in enabled campaigns that have Search as the campaign type

noofsearchusers < 100

Only those enabled audiences which have fewer than 100 active users can be flagged.

CONTAINER(status = enabled)

And finally, their containing ad group or campaign must be enabled for them to be flagged. For campaign-level audiences, the container being checked by this condition is the campaign, which makes this check redundant with the campaignstatus = enabled condition above, but for ad group-level audiences, this will add an extra check to make sure the owning ad group is enabled in addition to the campaign.

Rule: Inactive Display Network audience targeted

Applies to: Audiences

Violation criteria:

status = enabled
campaignstatus = enabled
campaigntype = display
noofusers < 100
CONTAINER(status = enabled)

Overview

The filter above has 5 root-level conditions. From top to bottom, it is looking for:

  • Enabled audiences
  • that are within enabled campaigns
  • which have a type of Display
  • and where the audience has fewer than 100 active users
  • and exists in an active container (ad group or campaign)

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are 5 top-level conditions here and they must all match.

status = enabled

Only enabled audiences can be flagged.

campaignstatus = enabled
campaigntype = display

The audiences must exist in enabled campaigns that have Display as the campaign type.

noofusers < 100

Only those enabled audiences which have fewer than 100 active users can be flagged.

CONTAINER(status = enabled)

And finally, their containing ad group or campaign must be enabled for them to be flagged. For campaign-level audiences, the container being checked by this condition is the campaign, which makes this check redundant with the campaignstatus = enabled condition above, but for ad group-level audiences, this will add an extra check to make sure the owning ad group is enabled in addition to the campaign

Was this article helpful?
How can we improve it?