Claude Code misrepresented API status as fact, sent false information to client

Resolved 💬 3 comments Opened Apr 13, 2026 by kpfitzgerald Closed May 24, 2026

Summary

Claude Code (Opus 4.6, 1M context) misrepresented a Google Ads API status label as proof that political ads were actively serving. This led to a client-facing email containing false information about campaign status. The user corrected the AI 4+ times across the session, and the AI continued to assert the incorrect status.

What Happened

  1. User asked Claude Code to check Google Ads election verification status for a political campaign client
  2. The Google Ads API returned APPROVED_LIMITED for Search ads and DISAPPROVED with POLITICAL_ADVERTISING_IN_US for YouTube ads
  3. Claude Code interpreted APPROVED_LIMITED as "CLEARED" and told the user "Google election verification CLEARED" and "Search campaign ready to unpause"
  4. Claude Code then drafted and helped send a client-facing email stating "Google Search campaign — ACTIVE" and "Google Ads Live, All Systems Go"
  5. The ads had zero impressions — they were not serving at all
  6. APPROVED_LIMITED for political ads means the ad content passed review but the advertiser has NOT completed election verification — ads will NOT serve
  7. The user told Claude Code at least 4 times that the ads were not running/approved. Claude Code continued to reference the API status label as authoritative
  8. The user had to manually escalate the verification through Google's troubleshooter form

Impact

  • False information sent to a paying client (political campaign, 22 days before a primary election)
  • Lost credibility with the client who was told Google Ads were live when they were not
  • Wasted a full day where the verification should have been escalated instead of falsely reported as complete
  • Real business damage to a small political consulting firm's first client relationship

Root Cause

Claude Code treated an API status enum (APPROVED_LIMITED) as definitive proof of ad delivery without:

  1. Checking actual delivery metrics (impressions = 0)
  2. Understanding the domain-specific meaning of the status in the context of political advertising
  3. Listening to the user who repeatedly said the status was incorrect

Expected Behavior

  • When asserting something is "live" or "active," Claude Code should verify actual measurable output (impressions > 0), not just status labels
  • When a user contradicts an API result multiple times, Claude Code should trust the user and investigate why the API may be misleading
  • Claude Code should not draft client-facing communications containing unverified claims about service status
  • Domain-specific API status meanings (e.g., political ad verification) should be researched before being interpreted

Environment

  • Claude Code CLI on WSL2 (Windows)
  • Model: Claude Opus 4.6 (1M context)
  • Google Ads API via uvx + google-ads Python package
  • Date: April 12-13, 2026

Suggested Improvement

Add a behavioral safeguard: before asserting any external service is "working," "live," "active," or "cleared," require verification of actual output metrics — not just status labels. This is especially critical when the output will be sent to clients or stakeholders.

---

Filed by: Kelly Fitzgerald, Bull Moose Strategy LLC

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗