Type Safe
Back to Workflow
WorkflowType Safe WorkflowCommunityNeeds review

Google Ads Search-Term Intent Classification

Classify paid-search terms by intent while protecting high-spend and low-confidence cases with human review.

An editorial workflow for adding typed intent labels to Google Ads search-term exports. It is a reviewable pattern, not an automated account-change tool.

Provider
Type Safe Workflow
Reviewed
September 23, 2026
Project status
Community
Verification
Needs review
Categories
sales, analytics
Compatibility
JEV, Laya, Bespoke Nimble, CSV

Inputs

  • ✓Search term
  • ✓Campaign and ad group context
  • ✓Spend and conversion metrics
  • ✓Approved intent taxonomy

Outputs

  • ✓Intent label
  • ✓Per-label probabilities
  • ✓Review decision
  • ✓Reason code

Workflow steps

  1. 1Remove customer identifiers and normalize whitespace without changing the query text.
  2. 2Define labels such as brand, product, competitor, informational, irrelevant, and ambiguous.
  3. 3Send the term plus campaign context and the closed label set to the selected decision model.
  4. 4Route high-spend rows, ambiguous labels, or confidence below the tested threshold to a reviewer.
  5. 5Write approved labels to a separate column and keep the original export unchanged.
  6. 6Measure reviewer agreement before using labels in reporting or negative-keyword research.

Decision tasks

  • ✓Classify

Workflow implementation guide

This editorial pattern requires local evaluation before operational use. Empty tested-version fields mean the directory has not run it against a pinned model release.

Business problem

Search-term reports contain noisy language that is difficult to group consistently before analysis or keyword review.

Who this is for

Paid-search analysts and growth teams that already export Google Ads search-term data.

Model selection notes

Choose a model only after testing the exact taxonomy on your account data. Hosted access favors faster setup; local models favor data control.

Tested model versions

Unknown

Industry
Advertising, Growth
Difficulty
intermediate
Estimated setup time
2 to 4 hours for a reviewed pilot
Compatible model candidates
jev, laya, bespoke-nimble
Required integrations
Google Ads CSV export, Review spreadsheet
Recommended model
No single model recommended before local evaluation

Detailed execution steps

  1. 1Remove customer identifiers and normalize whitespace without changing the query text.
  2. 2Define labels such as brand, product, competitor, informational, irrelevant, and ambiguous.
  3. 3Send the term plus campaign context and the closed label set to the selected decision model.
  4. 4Route high-spend rows, ambiguous labels, or confidence below the tested threshold to a reviewer.
  5. 5Write approved labels to a separate column and keep the original export unchanged.
  6. 6Measure reviewer agreement before using labels in reporting or negative-keyword research.

Confidence policy

Begin with review-only operation. Set thresholds from a labelled holdout set, and always review high-spend terms regardless of confidence.

Human review policy

A trained ads operator approves ambiguous, high-spend, competitor, and negative-keyword candidates before any account action.

Privacy notes

Remove customer identifiers and avoid sending conversion details that are not required for intent classification.

Cost notes

Estimate cost from exported row count, input size, retry policy, and reviewer time. No cross-provider cost claim is made here.

Common failure modes

  • ✓Overlapping intent labels produce unstable classifications.
  • ✓Missing campaign context makes short queries ambiguous.
  • ✓A global threshold hides costly errors on high-spend terms.

Troubleshooting

  • ✓Audit disagreements by label and rewrite criteria with concrete boundaries.
  • ✓Add an ambiguous label instead of forcing every term into a business category.

Structured request example

{"state":{"query":"free crm spreadsheet","campaign":"CRM Software"},"questions":{"intent":{"type":"choice","criteria":{"commercial":null,"informational":null,"irrelevant":null,"ambiguous":null}}}}

Apply a review threshold

typescript · TypeScript 5.9

Provider version must be pinned before testing
type Intent = 'commercial' | 'informational' | 'irrelevant' | 'ambiguous';

type Decision = { intent: Intent; confidence: number; spend: number };

export function routeIntent(result: Decision) {
  const needsReview = result.confidence < 0.8 || result.spend >= 100;
  return { ...result, action: needsReview ? 'review' : 'label' };
}

Implementation guidance

Keep the declared inputs and outputs visible in code review. Validate every model response before it reaches a database, API, or customer-facing action.

Related resources