Skip to content

Weekly

Check for disapproved ads and weak keywords

A weekly email lists disapproved ads and keywords with low quality scores.

Runs
Weekly
Apps
Google Ads
AI
Not needed
Access
read

Send this to your assistant

Create a ClickRuntime automation: every Monday, email me disapproved Google Ads ads and keywords with a quality score under 4.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A local plumbing company runs Google Ads with a handful of campaigns and a freelancer who checks in monthly. In between, an ad gets disapproved for a policy issue after a landing page edit, and three keywords drop to a quality score of 3. The ads stop serving or get more expensive, and the owner only notices when the phone goes quiet or the card statement looks wrong.

Every week, ClickRuntime queries your Google Ads account for ads whose policy summary shows a disapproval and for keywords with a low quality score, then emails the two lists. No AI is involved: the lists come straight from Google Ads data, so each row is an ad or keyword you can open and fix.

It fits agencies managing many small accounts, where nobody logs in to each one every day.

What you get out of it

  • Disapproved ads found within days

    An ad that stops serving after a policy flag is listed in the next weekly email. You fix the wording or the landing page quickly, instead of losing a month of impressions on your best-converting ad.

  • Low quality scores explain high costs

    Keywords with weak expected CTR or poor landing page experience pay more per click. Seeing them listed gives you a short, specific list to rewrite or pause rather than a vague sense that costs are creeping up.

  • Agencies can cover more accounts

    One email per account replaces a manual login routine. A freelancer with twenty clients can scan each report in a minute and spend billable time only on accounts where something is actually wrong.

  • Landing page edits stop causing silent damage

    When a site change triggers a policy problem, the connection is obvious from the dates. You can roll the page back or request a review before the issue costs you a whole campaign.

  • A routine check you never skip

    Weekly audits happen on schedule even during holidays or busy launches. That consistency matters because the ad problems that hurt most are the ones nobody was looking at. A thirty-second look at the weekly email beats an audit you keep meaning to do.

How it works

What happens, step by step

  1. Every week, ClickRuntime checks your Google Ads account for ads that have been disapproved.

  2. It also looks for keywords with a low quality score.

  3. You get one email with the number of issues in the subject and a line for each ad or keyword that needs attention.

Before it runs live

  • Connect Google Ads

What you get

RunsWeekly
Check for disapproved ads and weak keywordstoday, 9:00Succeeded
Email · Google Ads health: 5 issuesAd 681204331 in Pricing: DISAPPROVED Keyword 'cheap invoicing' in Generic: quality score 3

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Run it at a different time, more or less often, or only on weekdays
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Google Ads steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
account_health_audit.pyexample
from clickruntime import on_trigger, credentials, http, notify

CUSTOMER_ID = "1234567890"

def gaql(query):
    headers = {"Authorization": f"Bearer {credentials.connection('google', 'ads')}",
               "developer-token": credentials.secret("GOOGLE_ADS_DEVELOPER_TOKEN")}
    batches = http.post(f"https://googleads.googleapis.com/v21/customers/{CUSTOMER_ID}/googleAds:searchStream",
                        headers=headers, json={"query": query}).json()
    return [row for b in batches for row in b.get("results", [])]


@on_trigger
def run(event):
    ads_rows = gaql("SELECT ad_group_ad.ad.id, ad_group.name, ad_group_ad.policy_summary.approval_status "
                    "FROM ad_group_ad WHERE ad_group_ad.policy_summary.approval_status IN ('DISAPPROVED', 'APPROVED_LIMITED')")
    kw_rows = gaql("SELECT ad_group_criterion.keyword.text, ad_group.name, ad_group_criterion.quality_info.quality_score "
                   "FROM keyword_view WHERE ad_group_criterion.quality_info.quality_score <= 4 AND ad_group_criterion.status = 'ENABLED'")
    lines = [f"Ad {r['adGroupAd']['ad']['id']} in {r['adGroup']['name']}: {r['adGroupAd']['policySummary']['approvalStatus']}" for r in ads_rows]
    lines += [f"Keyword '{r['adGroupCriterion']['keyword']['text']}' in {r['adGroup']['name']}: quality score "
              f"{r['adGroupCriterion']['qualityInfo']['qualityScore']}" for r in kw_rows]
    if lines:
        notify.email_me(f"Google Ads health: {len(lines)} issues", "\n".join(lines))
    return {"issues": len(lines)}

FAQ

Common questions

What counts as a disapproved ad in this audit?
The check reads the policy summary on each ad and flags any whose approval status is disapproved. Ads that are approved with limits, such as restricted by region or audience, are reported separately where Google Ads marks them. Paused ads are normally excluded so the list stays relevant.
What quality score is treated as low?
You decide the cutoff. A common starting point is a score of 4 or below, since scores run from 1 to 10 and anything under 5 usually means higher costs. Keywords without enough data have no score and are left off the list.
Do I need a developer token to use this?
Google Ads API access depends on a developer token on the manager account, and the connection uses your authorized Google login. If you manage accounts through an agency manager account, the audit can run across the accounts that login can access.
What permissions does it need?
read. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it runs (weekly). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Check for disapproved ads and weak keywords” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.