Claude Code misrepresented API status as fact, sent false information to client
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
- User asked Claude Code to check Google Ads election verification status for a political campaign client
- The Google Ads API returned
APPROVED_LIMITEDfor Search ads andDISAPPROVEDwithPOLITICAL_ADVERTISING_IN_USfor YouTube ads - Claude Code interpreted
APPROVED_LIMITEDas "CLEARED" and told the user "Google election verification CLEARED" and "Search campaign ready to unpause" - Claude Code then drafted and helped send a client-facing email stating "Google Search campaign — ACTIVE" and "Google Ads Live, All Systems Go"
- The ads had zero impressions — they were not serving at all
APPROVED_LIMITEDfor political ads means the ad content passed review but the advertiser has NOT completed election verification — ads will NOT serve- 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
- 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:
- Checking actual delivery metrics (impressions = 0)
- Understanding the domain-specific meaning of the status in the context of political advertising
- 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
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗