// guide

Google Ads spend in Keel HQ for MER and margin layers

Connect Google Ads to Keel HQ with Google's OAuth. Daily platform spend for one chosen account feeds Overview, MER and CM3. Keel HQ only runs read queries.

David Lindahl

David LindahlFounder of Keel HQ, and runs a DTC brand on it

Published Last verified

Access
Google OAuth, one chosen account
Sync
Nightly, 10:15 UTC
Window
Trailing 14 days, 180-day import

// the steps

  1. 01Open Settings → Integrations. Find the Google Ads card. Connecting needs the member role or above.
  2. 02Sign in with Google. Click Connect Google Ads and approve access on Google's own screen.
  3. 03Choose the account. Pick the Google Ads account whose daily spend Keel HQ should import, then click Connect account.
  4. 04Wait for the import. A history import runs in chunks, then a nightly refresh keeps the last 14 days current.

// tl;dr

Keel HQ signs in to Google Ads with Google's OAuth, asks you to choose one account, and imports its daily platform spend. A nightly sync at 10:15 UTC refreshes the trailing 14 days, after an initial 180-day import. The spend feeds Overview, MER and the CM3 margin layer. Google's one Ads scope can't be narrowed to read-only, but Keel HQ only sends read queries.

Platform spend is half of your advertising picture. Once Google Ads is connected, its daily spend joins Meta Ads in the same Overview, MER and CM3 figures, so the number you read is total platform spend, not one channel's.

What syncs

  • Daily platform spend, and the conversion value Google reports, for the one account you chose, in that account's currency.

  • Nightly refresh at 10:15 UTC over the trailing 14 days.

  • History import. On first connection, about 180 days in 28-day chunks, so the comparison periods on Overview have data.

Connect Google Ads

  1. 01Open Settings → Integrations

    Find the Google Ads card. If it says it isn't configured on this deployment, an administrator must set GOOGLE_ADS_CLIENT_ID, GOOGLE_ADS_CLIENT_SECRET, GOOGLE_ADS_REDIRECT_URI, and GOOGLE_ADS_OAUTH_STATE_SECRET first (openssl rand -base64 32 for the state secret).

  2. 02Click Connect Google Ads

    Approve access on Google's screen. You're returned to Keel HQ to choose an account.

  3. 03Choose the account

    Pick the account whose spend should count, then click Connect account. The card shows its name, id and currency.

  4. 04Let the import run

    The first nightly runs bring in history in chunks. The card shows the last sync time once data has arrived. Disconnect stops syncing.

When something looks wrong

  • A sync error on the card. Google rejected the stored access, or the account isn't reachable. Disconnect and connect again.

  • Recent days change. Google adjusts spend after the fact, which is why each night refreshes the trailing 14 days.

  • Spend in the wrong currency. Keel HQ imports in the account's own currency, shown on the card.

What this doesn't do

  • No campaign changes: no creating, pausing or budgeting.

  • No campaign, keyword or search-term breakdown. It's daily platform spend for the account, nothing finer.

  • Keel HQ is in private beta, with a waitlist.

Questions

Is Keel HQ's Google Ads access read-only?
Keel HQ only sends read queries: a SELECT for daily cost and conversion value. The OAuth scope it requests is Google's https://www.googleapis.com/auth/adwords, which is the only scope Google offers for the Ads API and isn't limited to reading, so the read-only behavior is Keel HQ's, not enforced by the scope.
How often does Google Ads sync?
Nightly at 10:15 UTC. Each run refreshes the trailing 14 days, so late adjustments from Google are picked up.
How far back does it import?
The first connection imports about 180 days of daily spend in 28-day chunks, plus the month to date, so the 90-day Overview comparison has a prior period to compare against.
Can I connect more than one Google Ads account?
Keel HQ imports one account per connection, the one you choose after signing in.
Why does the card say it isn't configured?
Google Ads needs GOOGLE_ADS_CLIENT_ID, GOOGLE_ADS_CLIENT_SECRET, GOOGLE_ADS_REDIRECT_URI, and GOOGLE_ADS_OAUTH_STATE_SECRET on the deployment (generate the state secret with openssl rand -base64 32). If the card says so, an administrator has to set them before anyone can connect.

// sources

  1. OAuth 2.0 overview for the Google Ads API, Google for Developers · accessed