Status: Needs Follow-up

Priority: High (recurring blocker, automation down)

TL;DR

Today's daily negatives tune-up could not run. Every OAuth-based backend that talks to the Google Ads API is blocked by the same root cause: our OAuth refresh token has expired again. Zero search-term data was pulled, so no adds, no removals, no campaign changes were made. Budgets and bids untouched.

The permanent fix was already flagged in a prior session memory: the OAuth consent screen for the Google Cloud project that owns our Ads API client is stuck in Testing mode, forcing refresh tokens to expire every 7 days. Moving it to In production (or switching User type to Internal on a Workspace org) stops the weekly expiry cycle.

What was attempted

Backend 1 — Direct Google Ads API (google-ads-python)

Tried two different refresh tokens:

  1. .env token at C:\Users\SAguiar\Documents\Projects\_repo-staging\claude-ads\.envinvalid_grant: Token has been expired or revoked.
  2. Notion-stored token from 🔑 API Keys & App Secrets (marked "Verified working 2026-04-17") → same error.

Per skill spec, invalid_grant is not retried in a loop.

Backend 2 — google-ads-mcp (pipx)

Repo present locally but it uses the same OAuth client ID and consent screen as Backend 1. Same root cause would apply. Not re-executed.

Backend 3 — Pipedream connector

Not connected in this scheduled session. Connecting a new MCP requires interactive user approval (unavailable in an automated run).

Backend 4 — Adspirer

Tool prefix not present in the current session's tool list.

Backend 5 — lunar-arc SAIL OAuth client (961786446236) — attempted 2026-04-22 follow-up

Per Sam's direction ("try the other oauth app (lunar-arc...)"), I attempted to use the SAIL-named OAuth client from the lunar-arc-493119-a6 Google Cloud Project. Result: also blocked.