Google Ads + Slack: search term waste spotted fast
Your brand campaigns look “fine” until you open the Search terms report and realize you’ve paid for a pile of irrelevant queries. Then comes the slog: export, filter, calculate wasted spend, hunt for opportunities, repeat next week.
PPC managers feel this first, because the budget leak is literally their job. But in-house performance marketers and agency leads end up in the same loop too. This Ads Slack automation turns that messy report into a clean Slack summary your team can act on.
You’ll learn what the workflow does, what you need to connect, and how the pieces fit together so you can spot waste and keyword opportunities without living inside spreadsheets.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Google Ads + Slack: search term waste spotted fast
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send a message"]
n2@{ icon: "mdi:robot", form: "rounded", label: "Search Terms Checker", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model1", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Getting Google Campaigns", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filtering Only for 'Enabled'..", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filtering For A Specific Sea..", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Extracting Search Terms In T.."]
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out HTTP Request Into ..", pos: "b", h: 48 }
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Consolidating Search Terms D.."]
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Removing Brand Terms + EXCLU..", pos: "b", h: 48 }
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Aggregating Performance Metr.."]
n13@{ icon: "mdi:cog", form: "rounded", label: "Aggregating Items To Prepare..", pos: "b", h: 48 }
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Transforming It It To Be Rea.."]
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Brand Info Node", pos: "b", h: 48 }
n15 --> n2
n2 --> n14
n5 --> n6
n4 -.-> n2
n3 -.-> n2
n12 --> n13
n0 --> n5
n11 --> n12
n6 --> n7
n8 --> n9
n9 --> n10
n14 --> n1
n13 --> n15
n7 --> n8
n10 --> n11
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n2,n4 ai
class n3 aiModel
class n6,n7,n11 decision
class n8 api
class n10,n12,n14 code
classDef customIcon fill:none,stroke:none
class n1,n8,n10,n12,n14 customIcon
Why This Matters: Search Terms Turn Into Silent Budget Leaks
Search term mining is one of those tasks that’s “important” but never convenient. You have to pull a fresh report, isolate non-brand terms, check conversions, total the cost, and then translate all of that into a decision your team can approve. Miss a week and you can easily pay for the same useless queries again, because brand campaigns keep matching to close variants and weird intent. The worst part is the mental load. You know there’s waste in there, you just don’t have the time to prove it cleanly every time.
It adds up fast. Here’s where it breaks down in real accounts.
- You export search terms, then reformat columns because the view never matches what you need.
- It’s too easy to miss “zero-conversion” spend when the data is spread across hundreds of rows.
- Brand vs. non-brand filtering turns into debate, not analysis, because definitions aren’t written down anywhere.
- You find the problem, but it dies in a doc because nobody sees it at the right moment.
What You’ll Build: Google Ads Search Terms → Slack Action Summary
This workflow pulls recent search term data from your Google Ads brand campaigns, cleans it up, and asks an AI model to do the first pass of analysis for you. It separates likely non-brand queries from true brand intent, totals up spend on terms with zero conversions (your “waste” bucket), and flags non-brand terms that are converting so you can review them as potential keyword additions. Then it formats everything into a Slack message that’s actually readable, not a data dump. The report lands in a channel your team already uses, with interactive buttons so you can approve the next action quickly instead of letting it linger.
The workflow starts with a manual launch in n8n, so you can run it on demand while you’re tuning campaigns. It then fetches campaigns, validates you’re looking at the right search campaign, retrieves recent search terms, aggregates performance, and sends the structured dataset to an LLM for analysis. Finally, it posts a Slack report that’s ready for a quick decision.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you manage 3 brand campaigns and you review search terms once a week. Manually, it’s common to spend about 30 minutes per campaign exporting, filtering, and totaling “zero conversion” spend, plus another 30 minutes writing a summary for your team, so roughly 2 hours. With this workflow, you trigger it in under a minute, wait a few minutes for the report to compile and the AI analysis to finish, and then you review the Slack message. Most weeks you’re done in about 10 minutes, with clearer decisions and fewer missed leaks.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Ads to access campaigns and search term data.
- Slack to deliver the report to your team.
- Google AI / Gemini access (get it from Google AI Studio or your Google Cloud project)
Skill level: Advanced. You’ll be comfortable setting API credentials (like a Google Ads developer token) and testing requests inside n8n.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
Manual run from n8n. You launch the workflow when you want a fresh review (many teams do it every Monday). That trigger kicks off the Google Ads portion immediately.
Campaign selection and validation. The workflow fetches campaigns, filters to active ones, then checks you’re targeting the intended search campaign before it pulls search terms. This prevents you from analyzing the wrong campaign and chasing noise.
Search term retrieval and cleanup. A direct HTTP request pulls recent search term rows, splits them into items, normalizes metrics, and excludes brand terms (based on your provided context) and disabled entries. Then it aggregates performance so the AI receives a clean, structured dataset instead of a messy export.
AI analysis and Slack delivery. The workflow assigns your brand context, sends the bundle to an LLM chain (with Gemini as the chat model and a structured JSON parser), then builds Slack blocks and posts the report. You can tweak the brand term list and the prompt so the output matches how your team thinks about “brand” versus “non-brand.”
You can easily modify the brand term rules to include product names, misspellings, or competitor exclusions based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
This workflow starts manually, so you can validate Google Ads data before sending the report to Slack.
- Add and open Manual Launch Trigger.
- Leave all fields as default (this node requires no configuration).
- (Optional) Keep Flowpast Branding as a visual note; it does not affect execution.
Step 2: Connect Google Ads and Pull Campaigns
These nodes fetch your campaigns and filter to only active, relevant search campaigns.
- Open Fetch Ads Campaigns and set Client Customer ID to
[YOUR_ID]and Manager Customer ID to[YOUR_ID]. - In Fetch Ads Campaigns, confirm Date Range is
LAST_7_DAYS. - Credential Required: Connect your
googleAdsOAuth2Apicredentials in Fetch Ads Campaigns. - Open Filter Active Campaigns and verify the condition: Left Value
={{ $json.status }}equals Right ValueENABLED. - Open Validate Search Campaign and set both conditions: Left Value
={{ $json.name }}contains(INSERT THE GOOGLE CAMPAIGN NAME HERE)andsearch.
(INSERT THE GOOGLE CAMPAIGN NAME HERE) with the exact campaign naming convention you want to target, or the workflow will return no search terms.Step 3: Retrieve and Normalize Search Term Data
This section fetches recent search terms via the Google Ads API, normalizes metrics, and excludes brand/disabled terms.
- Open Retrieve Recent Search Terms and set URL to
https://googleads.googleapis.com/v19/customers/[YOUR_ID]/googleAds:searchwith Method set toPOST. - In Retrieve Recent Search Terms, confirm Authentication is
predefinedCredentialTypeand Credential Type isgoogleAdsOAuth2Api. - Set the body parameter query to the provided SQL, keeping the expression
{{ $json.id }}in the WHERE clause. - Update headers in Retrieve Recent Search Terms: developer-token to
[CONFIGURE_YOUR_API_KEY]and login-customer-id to[YOUR_ID]. - Credential Required: Connect your
googleAdsOAuth2Apicredentials in Retrieve Recent Search Terms. - Open Split Search Term Items and set Field to Split Out to
results. - Open Normalize Term Metrics and keep the provided JavaScript to normalize metrics and compute CTR/CPC.
- Open Exclude Brand and Disabled and confirm conditions: Left Value
={{ $json.searchTerm }}not contains(INSERT YOUR BRAND TERM HERE - THIS IS TO ENSURE IT IS EXCLUDED FROM THE LLM TO ANALYZE TO SAVE ON TOKEN USAGE)and Left Value={{ $json.status }}not equalsEXCLUDED.
Step 4: Aggregate Data and Set Brand Context
These nodes consolidate performance by term and prepare structured input for the LLM analysis.
- Open Aggregate Term Performance and keep the aggregation JavaScript that combines metrics by
searchTerm,campaignId, andadGroupId. - Open Bundle Data for LLM and set Aggregate to
aggregateAllItemData. - Open Assign Brand Context and set data to
={{ $json.data }}. - In Assign Brand Context, set brand_info to
INSERT YOUR BRAND_INFO HERE.
brand_info string improves accuracy by letting the LLM distinguish branded vs. non-branded terms.Step 5: Set Up AI Analysis and Structured Output
The LLM analyzes search terms and outputs a strict JSON structure for downstream Slack formatting.
- Open Analyze Terms via LLM and set Text to
={{ $json.data }}. - In Analyze Terms via LLM, keep the prompt content and ensure it includes the expressions
{{ $json.brand_info }}and{{ $now.setZone("Asia/Singapore") }}. - Confirm Analyze Terms via LLM has Has Output Parser enabled.
- Open Structured JSON Parser and keep the JSON Schema Example unchanged to enforce output formatting.
- Open Gemini Chat Model and configure your Google Gemini settings as needed.
- Credential Required: Connect your Google Gemini credentials in Gemini Chat Model.
Step 6: Configure Slack Report Delivery
These nodes build Slack Block Kit UI and post the report to your channel.
- Open Build Slack Blocks and keep the provided JavaScript that converts LLM output into Slack blocks.
- Open Post Slack Report and set Blocks UI to
={{ $json.blocksUi }}. - In Post Slack Report, set Message Type to
blockand select your Slack Channel ID. - Credential Required: Connect your Slack credentials in Post Slack Report.
Step 7: Test and Activate Your Workflow
Run the workflow manually to verify Google Ads data, LLM output, and Slack formatting before turning it on.
- Click Execute Workflow starting from Manual Launch Trigger.
- Confirm successful execution flows: Manual Launch Trigger → Fetch Ads Campaigns → Filter Active Campaigns → Validate Search Campaign → Retrieve Recent Search Terms → Split Search Term Items → Normalize Term Metrics → Exclude Brand and Disabled → Aggregate Term Performance → Bundle Data for LLM → Assign Brand Context → Analyze Terms via LLM → Build Slack Blocks → Post Slack Report.
- Verify the Slack message includes sections for recommendations and review items, with action buttons visible.
- Once verified, toggle the workflow to Active for production use.
Troubleshooting Tips
- Google Ads credentials and developer tokens can fail if the Manager/Client IDs don’t match your account structure. If the HTTP request errors, check your Google Ads API access, token status, and linked account IDs first.
- If you’re using Wait nodes or external processing, timing can be inconsistent. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand definitions and “what counts as waste” early or you’ll be editing outputs forever.
Quick Answers
About 45 minutes if your Google Ads API access is already approved.
No. You’ll mostly connect accounts and paste in IDs and tokens. The workflow already contains the logic nodes that do the heavy lifting.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Google AI/Gemini usage, which is usually low for a weekly summary.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you probably should. You can change the brand definition in the “Assign Brand Context” step, swap the analysis prompt inside the LLM chain to focus on CPA or ROAS instead of conversions, and adjust the Slack message format in the “Build Slack Blocks” code step. Some teams also narrow the HTTP request to a smaller date range for faster runs.
Usually it’s a mismatch between your Manager ID, Client ID, and the developer token permissions. Double-check the token is approved for the account you’re querying, then verify the HTTP request headers and customer ID format match Google Ads API requirements. If it works once and then fails later, it can be rate limiting or expired OAuth access, so re-authenticate Google Ads in n8n and try again.
In practice, it can handle thousands of search term rows per run, but speed depends on how much you pull and how heavy the AI summary is. On n8n Cloud you’re limited by monthly executions on your plan; if you self-host, there’s no execution cap and you’re mainly constrained by server resources and Google Ads API quotas. If you’re analyzing lots of campaigns, consider running it per campaign and posting one Slack message per run to keep outputs readable.
Often, yes. This workflow relies on direct API pulls, data cleanup, aggregation, and structured AI output, which is where n8n tends to feel more flexible than “two-step” tools. Zapier and Make can do parts of it, but you may hit limits when you need branching logic, custom processing, or fine control over payloads. Also, self-hosting n8n can be a cost win if you run lots of automations across clients. That said, if you only want a lightweight alert with no AI analysis, a simpler tool might be enough. Talk to an automation expert if you want help choosing.
Once this is running, you stop “checking search terms” and start acting on them. The workflow handles the repetitive cleanup so you can spend your time on the decisions that actually move performance.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.