Skip to main content
Skip table of contents

How To Add Negative Keywords to Google Ads


This Action allows you to automatically add negative keywords to your campaigns, based on text they contain or performance they’ve had. Useful for adding brand/nonbrand negative keywords for queries that come in via Broad/BMM keywords and adding negative keywords for poor performing queries coming in via Broad/BMM keywords.


This Action uses the Add Negative Keywords Action Type

  1. Set up your change logic

    1. Login to Alli Data and select the client you want to create an action for

    2. Navigate to Reports → Explorer and select New Data Report

    3. Give your report a Name and update the Report Type to Custom Redshift

    4. Copy and paste the SQL Example in from below and update anything within and including { } to match your client settings

    5. Once your SQL is updated, click Publish to update the query

    6. Click Preview to ensure the output is as expected

  2. Create a new Action

    1. Go to Alli Actions then select Create Action

    2. Filter the Vendor column for Google Ads and select the Add Negative Keywords to a Campaign Action Type

    3. Continue to the Configure screen and select your authenticated account

    4. Click Next to set up and link where your changes are coming from, for this example that will be Alli Data

    5. Insert your report name i.e. {client}.{view name you set in step 1-c}

    6. Review your action setup

    7. Save and Schedule your action to run

SQL Example


  • This corresponds to the MCC ID. If you don’t have MCC for your account, this line can be removed.

    • Ex: ‘{XXX-XXX-XXXX}’ becomes ‘012-345-6789’

Context for the WHERE section below:

  • This is where you choose campaigns to include or exclude from this action. 

  • The way this is done is saying “campaign_name ILIKE '%TEXTHERE%'”. 

  • The ILIKE means “contains” and is not case sensitive, it will match uppercase or lowercase. 

  • The TEXTHERE piece is where you can put common pieces of your campaign names to identify which campaigns to select, such as “brand”, “nonbrand”, “retargeting”, etc. 

  • That text needs to be surrounded by a tick ' on each side 

  • The percent signs mean that it is looking for that text no matter what is before or after it in the campaign name. 

  • Essentially using percent signs means “look for campaign names that contain this text”, not using percent signs would mean “look for campaign names that exactly match this text”

    • Example

    • ILIKE '%part%' will match to party & apartment

    • ILIKE 'part%' will match to party but not apartment

Date Selection

  • The section beginning with “date >=” is where you can choose a date span. All you need to edit is the end of the line in {NUMBER OF DAYS}, this will look for the today’s date minus the number of days you enter, so putting 30 there will look at one month of performance to determine what to add negatives for


  • We’ve set this to broad and phrase so that you only add negatives for queries that matched on broad or phrase keywords so that negatives that contradict an exact match keyword aren’t added. You can remove either of these if you only want one.

CTR Threshold

  • We’ve set this example up to filter by CTR performance, but the same could be done for any other main KPI. At the very end of the query you will see “CTR < X”. Here you can enter your threshold for poor performance. The number should be entered as a decimal so entering “0.05” will look for any queries with less than 5% CTR.

Click Threshold

  • You can also assign a minimum clicks threshold to only look for queries that have served decent volume, so that we aren’t adding negatives for very low volume queries.

	'{XXX-XXX-XXXX}' as login_customer_id
	account_id as customer_id,
	search_query AS keywordtext,
	'EXACT' AS keywordmatchtype,



	sum(clicks) AS clicks,
	sum(impressions) AS impressions,
	sum(clicks)/nullif(sum(impressions),0) AS CTR

FROM {client}_core.search_sqr


  date >= convert_timezone('US/Central',SYSDATE)::DATE - {NUMBER OF DAYS}



	{campaign inclusions or exclusions} 


	campaign_name ILIKE '%brand%'
	OR campaign_name ILIKE '%nonbrand%'


  AND campaign_status ILIKE 'ENABLED'

  	query_match_type_with_variant ILIKE 'broad'
  	OR query_match_type_with_variant ILIKE 'phrase'

GROUP BY account_id,


and clicks > {X}

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.