# Avoiding Fraud and Wasted Spend

Course: [Google Ads for B2B Teams](https://www.devtutorials.ai/learn/google-ads) · Section: Measure and Protect
Source: https://www.devtutorials.ai/learn/google-ads/measure-and-protect/wasted-spend

> Search Partners, Display, apps, invalid clicks and junk leads: how to detect each source of waste and exclude it.

<aside className="gads-glance" aria-label="At a glance">
<p className="gads-glance-title">At a glance</p>
<ul>
<li>Most waste in B2B Search accounts comes from settings, not fraud: Search Partners and Display left on, "Presence or interest" location targeting, loose match types and auto-applied recommendations.</li>
<li>Fix those at launch and you remove most of the problem in ten minutes.</li>
<li>Read the search terms report every week and add negatives. Start with the starter negative list on the templates page.</li>
<li>Junk leads (bots, fake emails, students, competitors) cost you twice: the click, and the bidding system learning to find more of them. Filter them on the form and don't count them as conversions.</li>
<li>Google filters most invalid clicks automatically and credits you. Ask for an investigation only when you have specific evidence.</li>
</ul>
</aside>

## Fix the settings that leak money

<p>Check these on every Search campaign. They take minutes and they're where most budget goes missing.</p>

<div className="gads-table-wrap">
<table>
<thead>
<tr>
<th>Setting</th>
<th>Set it to</th>
<th>Why</th>
</tr>
</thead>
<tbody>
<tr>
<td>Networks: Search Partners</td>
<td>Off at launch</td>
<td>Ads show on non-Google sites. Quality varies widely and you can't control placements individually.</td>
</tr>
<tr>
<td>Networks: Display Network</td>
<td>Off</td>
<td>A Search campaign with Display on shows text ads on websites and apps. For B2B lead gen this is mostly low-intent, accidental traffic.</td>
</tr>
<tr>
<td>Location options</td>
<td>Presence</td>
<td>The default "Presence or interest" shows ads to people outside your target countries. See <a href="/learn/google-ads/measure-and-protect/geo-targeting">Geographic targeting</a>.</td>
</tr>
<tr>
<td>Excluded locations</td>
<td>Countries you don't sell to</td>
<td>Without exclusions, a broad target (or "interest") can still reach them.</td>
</tr>
<tr>
<td>Auto-applied recommendations</td>
<td>Off, or only ones you've reviewed</td>
<td>Some recommendations add broad match keywords, raise budgets or switch bid strategies without asking.</td>
</tr>
<tr>
<td>AI Max, broad match, automatically created assets</td>
<td>Off at launch</td>
<td>They expand where and how you show. Useful later with good conversion data; costly before. <span className="gads-asof" title="Google Ads changes often. Re-check this against Google's help pages.">As of October 2026</span></td>
</tr>
<tr>
<td>Conversion goals</td>
<td>Only the conversions you value set as primary</td>
<td>If page views or "contact" clicks are primary, Smart Bidding chases cheap junk.</td>
</tr>
</tbody>
</table>
</div>

## Search Partners

<p>The Search Partner Network covers other search engines, site search boxes and some content sites that show Google Search ads.</p>
<p>Since August 2025, Google reports placements on Search Partners in full, so you can now see which sites your ads appeared on and how they performed.</p>
<p>From 10 February 2026, Google also stopped serving ads on parked domains through the network. <span className="gads-asof" title="Google Ads changes often. Re-check this against Google's help pages.">As of October 2026</span></p>

<p>Our advice: leave it off at launch. After a month or two, if you want more volume, turn it on in one campaign, then check the placement report after two weeks.</p>
<p>Keep it only if conversions from partners hold up on quality (SQLs, activated trials), not just form fills. Partner traffic tends to produce form fills that never answer the phone.</p>

<div className="gads-var" data-budget="starter">
<p>On a Starter budget, keep it off. You don't have enough conversions to tell good partner traffic from bad.</p>
</div>

## Display, apps and Performance Max placements

<p>A Search campaign only reaches websites and apps if the Display Network box is ticked. Untick it.</p>
<p>The real exposure to low-quality placements comes when you add Performance Max or Demand Gen campaigns, which run on YouTube, Display, Gmail and Discover as well as Search.</p>

<p>For those campaigns, set up account-level protections before launch:</p>

<ul>
<li><strong>Account-level placement exclusions:</strong> In Tools, then Content suitability (or the Exclusions settings, depending on your account version), add placement exclusion lists. Exclude sites and apps that have sent you junk before. Account-level exclusions apply to Performance Max too.</li>
<li><strong>Mobile app categories:</strong> Mobile games and many free apps produce accidental taps. Exclude app categories at account level if PMax or Demand Gen shows spend in apps.</li>
<li><strong>Content suitability:</strong> Exclude content types and sensitive categories that don't fit your brand.</li>
<li><strong>Channel and placement reporting:</strong> Performance Max now shows channel performance and placement reports. Check them two weeks after launch and then monthly. <span className="gads-asof" title="Google Ads changes often. Re-check this against Google's help pages.">As of October 2026</span></li>
</ul>

<p>Performance Max has more on this in <a href="/learn/google-ads/run-and-grow/performance-max-and-youtube">Beyond Search</a>.</p>

## Search terms and negative keywords

<p>The search terms report shows what people actually typed before clicking.</p>
<p>In B2B software, a lot of it will be irrelevant:</p>
<ul>
<li>Job seekers ("approval software jobs").</li>
<li>Students ("invoice approval workflow pdf").</li>
<li>People wanting free tools.</li>
<li>People looking for a different product with a similar name.</li>
<li>Searches in industries you don't serve.</li>
</ul>

<p>Build the habit:</p>

<ol>
<li>Before launch, add the <a href="/learn/google-ads/toolkit/templates-and-tools#negatives">starter negative keyword list</a> as a shared negative list and apply it to every campaign.</li>
<li>For the first two weeks, review search terms every day or two. After that, weekly.</li>
<li>Add irrelevant terms as negatives. Use phrase match negatives for whole themes (<code>"jobs"</code>, <code>"free download"</code>) and exact match negatives for single queries you want to block without blocking related ones.</li>
<li>When a search term is very relevant and converts, add it as a keyword.</li>
</ol>

<div className="gads-callout gads-callout-warn">
<p className="gads-callout-title">Watch out</p>
<p>Negatives work differently from keywords: they don't match close variants or synonyms. If you block <code>"job"</code>, also add <code>"jobs"</code> and <code>"careers"</code>.</p>
<p>And check a negative won't block good traffic: <code>"free"</code> would block "free trial" searches, which you may want if your goal is a trial.</p>
</div>

<div className="gads-var" data-goal="trial">
<p><strong>Free trial goal:</strong> don't add "free" as a broad negative. Instead block <code>"free download"</code>, <code>"freeware"</code>, <code>"open source"</code> (unless you have an open-source edition) and <code>"crack"</code>.</p>
</div>

### Watch broad match and AI Max drift

<p>Broad match and AI Max for Search match by meaning, which can wander far from your keyword. "Invoice approval software" can end up matching "invoice template", "accounts payable jobs" or a competitor's support pages.</p>
<p>If you turn either on, check the search terms report and the AI Max "search terms and landing pages" view weekly, and keep an eye on whether conversions are real (see junk leads below). <span className="gads-asof" title="Google Ads changes often. Re-check this against Google's help pages.">As of October 2026</span></p>

## Invalid clicks and click fraud

<p>Google filters clicks it judges invalid (bots, repeated clicks, known bad sources) before you're charged, and credits you for invalid clicks it detects afterwards.</p>
<p>You can see this: add the <strong>Invalid clicks</strong> and <strong>Invalid click rate</strong> columns at campaign level. A few percent is normal. Credits for invalid activity appear on the Billing summary page.</p>

<p>What fraud usually looks like in B2B Search accounts:</p>

<ul>
<li>Clicks with very short or zero time on site from one network or location, often outside business hours.</li>
<li>Spikes in clicks from countries or cities you don't target (check the Matched locations view).</li>
<li>Form fills with fake names, disposable emails or gibberish company names, often in bursts.</li>
<li>Clicks concentrated on Search Partners or Display placements.</li>
</ul>

<p>When to ask Google for an investigation: when you have specific evidence that Google's filters missed, for example a sudden click spike from one source with no engagement.</p>
<p>Collect the dates, campaigns, IP ranges or locations and analytics evidence, then submit the invalid click investigation form from the Google Ads help centre.</p>
<p>Don't expect a response to vague complaints that CPCs are high.</p>

<details className="gads-deeper">
<summary><span className="gads-deeper-tag">Go deeper</span> Should you buy a click-fraud tool?</summary>
<div className="gads-deeper-body">
<p>Third-party click-fraud tools exclude suspicious IP addresses automatically.</p>
<p>For most B2B accounts below the Advanced band, they're not worth it yet:</p>
<ul>
<li>Search with Partners and Display off has low fraud.</li>
<li>Google already credits most invalid clicks.</li>
<li>IP exclusions are limited (Google allows up to 500 per campaign).</li>
</ul>
<p>Spend the money on better lead qualification instead.</p>
<p>They can be worth testing if you're in the Advanced band, run Performance Max or Display at scale, or see repeated fraud patterns from competitors or bots.</p>
<p>Judge them on whether lead quality improves, not on the number of "fraudulent clicks blocked" they report.</p>
</div>
</details>

## Junk leads

<p>A fake form fill is worse than a fake click. It's recorded as a conversion, and Smart Bidding then looks for more people like it. Stop junk at the form and don't let it count.</p>

<ul>
<li><strong>Honeypot field:</strong> a hidden field real people never fill in. If it has a value, reject the submission silently. Free, invisible and catches most simple bots.</li>
<li><strong>Server-side validation:</strong> check required fields and email format on the server, not just in the browser. Bots skip browser checks.</li>
<li><strong>Business email check</strong> (demo forms): reject or flag free and disposable email domains. <span className="gads-var" data-goal="trial">For trials you may allow free email domains, but flag them so sales and your offline conversion upload treat them differently.</span></li>
<li><strong>CAPTCHA:</strong> reCAPTCHA or Cloudflare Turnstile helps against bot waves. Use the invisible or managed mode so it doesn't add friction. These scripts call an external service, so they need the visitor's network and, in the EU/UK, a mention in your privacy notice.</li>
<li><strong>Fire the conversion only after successful validation</strong>, on the thank-you step, never on button click.</li>
<li><strong>Feed quality back:</strong> once you upload CRM outcomes (see <a href="/learn/google-ads/measure-and-protect/tracking#stage-two-send-crm-outcomes-back-to-google-ads">Tracking stage two</a>), bidding learns from qualified leads rather than raw form fills. This is the strongest long-term fix.</li>
</ul>

### Honeypot field in an Astro form

<p>Add this to your form component. The field is hidden from people and screen readers but bots fill it in.</p>

```html readonly title="src/components/DemoForm.astro"
---
// src/components/DemoForm.astro
---
<form method="post" action="/api/lead" class="lead-form">
  <label>Work email <input type="email" name="email" required /></label>
  <label>Company <input type="text" name="company" required /></label>

  <!-- Honeypot: real visitors never see or fill this -->
  <div class="hp" aria-hidden="true">
    <label>Leave this empty <input type="text" name="website" tabindex="-1" autocomplete="off" /></label>
  </div>

  <button type="submit">Book a demo</button>
</form>

<style>
  .hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
</style>
```

<p>And on the server (wherever your form posts: an Astro endpoint, a serverless function or your form provider's webhook):</p>

```js readonly title="JavaScript"
// Reject silently if the honeypot was filled or the email is disposable.
const FREE_OR_DISPOSABLE = ['mailinator.com', 'tempmail.com', '10minutemail.com', 'guerrillamail.com'];
const data = await request.formData();
if (data.get('website')) return new Response(null, { status: 204 }); // bot
const email = String(data.get('email') || '').trim().toLowerCase();
const domain = email.split('@')[1] || '';
if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email) || FREE_OR_DISPOSABLE.includes(domain)) {
  return new Response('Please use your work email', { status: 400 });
}
// ...save the lead (with gclid and UTM fields), then redirect to the thank-you page
```

## Auto-applied recommendations

<p>Google's Recommendations page suggests changes: new keywords, broad match, higher budgets, different bid strategies, new assets. Some can be set to <strong>apply automatically</strong>, and Google may offer that during setup.</p>
<p>Auto-applied changes that add broad match keywords, raise budgets or switch bidding are a common reason a stable B2B campaign suddenly spends more on worse searches.</p>
<ol>
<li>Open <strong>Campaigns</strong>, then <strong>Recommendations</strong>, then <strong>Auto-apply</strong> (top right).</li>
<li>On the <strong>Your auto-applied recommendations</strong> tab, untick everything in the Keywords and targeting, Bidding and budgets, and Repairs sections. Keep only types you have reviewed and agree with.</li>
<li>Check <strong>Change history</strong> for the last 90 days and filter by changes made by Recommendations Auto-Apply, so you can see and undo anything already applied.</li>
<li>Repeat for every account. The setting is per account, and new accounts can start with some types on.</li>
</ol>
<p>Treat optimisation score as a list of ideas, not a target. A score of 100% means you accepted Google's suggestions, not that the account is performing.</p>
<p>Review the Recommendations page once a month as part of the waste check below. <span className="gads-asof" title="Google Ads changes often. Re-check this against Google's help pages.">As of November 2026</span></p>

## Where to look: a monthly waste check

<div className="gads-table-wrap">
<table>
<thead>
<tr>
<th>Report</th>
<th>Where</th>
<th>What you're looking for</th>
</tr>
</thead>
<tbody>
<tr>
<td>Search terms</td>
<td>Insights and reports, then Search terms</td>
<td>Irrelevant queries, competitor support searches, jobs, students, free tools.</td>
</tr>
<tr>
<td>Where ads showed</td>
<td>Insights and reports, then When and where ads showed</td>
<td>Search Partner, Display or app placements with clicks but no quality conversions.</td>
</tr>
<tr>
<td>Matched locations</td>
<td>Insights and reports, then When and where your ads showed, then the Matched locations tab</td>
<td>Clicks from countries you don't target or don't sell to. See <a href="/learn/google-ads/measure-and-protect/geo-targeting#check-where-clicks-actually-came-from">how to read it</a>.</td>
</tr>
<tr>
<td>Conversions by hour and country</td>
<td>Segment conversions by hour of day and by country</td>
<td>Bursts of conversions at odd hours or from one place: often bots.</td>
</tr>
<tr>
<td>Invalid clicks</td>
<td>Add Invalid clicks columns at campaign level</td>
<td>A jump in invalid click rate, or one campaign much higher than others.</td>
</tr>
<tr>
<td>Lead quality</td>
<td>Your CRM export</td>
<td>Share of ad leads that are junk, by campaign and keyword.</td>
</tr>
<tr>
<td>Change history</td>
<td>Change history</td>
<td>Changes you didn't make (auto-applied recommendations, colleagues).</td>
</tr>
</tbody>
</table>
</div>

<div className="gads-callout gads-callout-llm">
<p className="gads-callout-title">Use your LLM</p>
<p>Review every negative the LLM suggests before adding it. LLMs tend to over-block, for example flagging "pricing" or "free trial" as low intent when, for B2B software, they are often the highest intent you'll get.</p>
</div>

<section className="gads-donow" aria-labelledby="donow-wasted-spend">
<h2 id="donow-wasted-spend">Do this now</h2>
<ul className="gads-checklist" data-module="wasted-spend">

<li data-id="auto-apply">Auto-apply settings reviewed and Change history checked for auto-applied changes.</li>

<li data-id="networks">Turn off Search Partners and Display on every Search campaign.</li>
<li data-id="presence">Confirm location option is Presence and exclusions are in place (see <a href="/learn/google-ads/measure-and-protect/geo-targeting">Geo</a>).</li>
<li data-id="aar">Turn off auto-applied recommendations, or limit them to ones you've reviewed.</li>
<li data-id="negatives">Add the starter negative keyword list as a shared list on every campaign.</li>
<li data-id="honeypot">Add a honeypot and server-side checks to your lead form.</li>
<li data-id="columns">Add Invalid clicks columns to your campaign view.</li>
<li data-id="weekly">Schedule a weekly search terms review (use the prompt above).</li>
</ul>
</section>

Next: **Tracking**
