Connecting Google Ads
Settings › Accounts › Connect Google Ads opens Google's sign-in. We ask for one permission, access to your Google Ads (the adwords scope), and keep the sign-in token encrypted. If your Google login manages several accounts (a manager account), you pick which one. Disconnecting revokes our access at Google. Free connects 1 account read-only, Starter 1 with changes, Business up to 5. Until Google finishes reviewing WAI Ads, connecting shows "Coming soon" and the sample account (Harbor Street Coffee) shows every screen.
Safety
- Every change to Google Ads is a row in the review queue first. You tick and send; each send is logged with who approved it and Google's answer.
- Pauses and negatives can be undone from the log.
- Read-only mode per account: we keep reading numbers, nothing can be sent.
- Ads never raises a budget and never turns a campaign on by itself. Lowering budgets and pausing are the only automatic directions, and only when you switch them on.
- The API can only add to the queue; sending is always your click.
Budget guardrails
Set a monthly cap per account. Every hour we compare month-to-date spend with it: a pace bar shows spend, the even-pace mark for today and the projected month end (days so far at their real cost, the rest of the month at the last 7 days' average). Alerts: on pace to go over (weekly at most), 80% spent, cap reached. Optional: pause all campaigns at the cap, which needs your confirmation and is logged. Note that Google can spend up to twice a daily budget on a busy day; the cap is our check on top.
How sales are counted (attribution)
- The click keeper (Settings › Sales tracking) is a short inline snippet for your website. When a visitor arrives from an ad, it sees Google's click id (
gclid, orgbraid/wbraid) and anyutm_tags, and keeps a random visitor id in a first-party cookie for 90 days. - When that visitor types an e-mail into a form or checkout, the snippet sends
sha256(lowercase e-mail), computed in the browser. - Every 15 minutes we read your paid Store orders, paid Invoices, Bookings and Point of Sale receipts that have an e-mail (read-only, matched by your WAI e-mail), hash the buyer's e-mail the same way and look for that visitor's ad clicks in the window before the sale (default 30 days).
- Last click wins by default (first click is a setting). Google's click data (
click_view) turns the click id into campaign, ad group and keyword. Without a click id,utm_campaign(a campaign id or name) andutm_termare used. - Your own checkout elsewhere: call
waiAds('sale', {value: 49.90, order: '1042'})on the thank-you page.
What we can't see: buyers who never gave an e-mail on your site, other devices, cleared or blocked cookies, ad blockers. So "WAI revenue from ads" is a floor, not a ceiling. "Google conversions" is Google's own count, shown next to ours and never mixed in.
Search terms
"Wasted spend" lists searches that cost money and had no conversions in the range. Tick them and add them as exact (only that search) or phrase (any search containing those words in order) negatives on their campaign. They wait in the review queue. Google's click data names the keyword, not the exact search, so WAI sales are shown per keyword and this list uses Google's conversion count.
Rules
"If a keyword / search term / campaign spent more than $X and there are no WAI sales / no Google conversions / ROAS below N in the last 7 / 14 / 30 days, then alert me / pause it / add it as a negative." Preview any rule as a dry run. Rules run once a day after 06:00 in the account's time zone; their changes go to the review queue unless you tick "apply without asking" for that rule. Starter: 5 rules, Business: unlimited.
Alerts
Spend spike (yesterday far above your usual day), budget pace / 80% / cap reached, disapproved ads, conversion drop (this week under half of last week). They appear in your WAI bell; e-mail to your own address is a switch in Settings › Alerts (off by default).
Integrations
- URLHub + Analytics: copy the Final URL suffix from Settings into Google Ads so every click carries campaign and keyword tags.
- LandingEngine: each keyword links to LandingEngine's URL builder for a matching landing page.
- Books: one click creates last month's ad spend as a bill from Google Ads under Advertising.
- Flows: triggers for cap reached, pace warning, rule fired, new alert, change sent.
- Business overview: an Ads tile with spend, revenue from ads and ROAS.
API
Make a token in the account menu › API & webhooks (Starter and Business), then send Authorization: Bearer wai_ads_... to https://campaigns.webanalyticsinc.com/api/v1/. Responses: {"ok":true,"data":...}. Money fields ending in _micros are millionths of the account currency.
GET /accountsGET /summary?account=ID&from=YYYY-MM-DD&to=YYYY-MM-DDGET /campaigns?account=IDandGET /keywords?account=ID&campaign=IDwith WAI revenue and ROASGET /search-terms?account=ID&wasted=1GET /changes?account=ID&status=reviewPOST /changes{"account":ID,"kind":"add_negative","campaign_id":"...","text":"free coffee","match_type":"EXACT"}, alsopause_keyword/pause_campaign/enable_*: always lands in the review queueGET /alerts?account=ID
Webhooks
Add an HTTPS endpoint in API & webhooks. Each delivery is signed (X-WAI-Signature: t=...,v1=HMAC-SHA256) and retried with backoff. Events:
budget.cap_reachedMonth-to-date spend reached your monthly capbudget.pace_warningSpend is on pace to go over your monthly caprule.firedOne of your rules found keywords, search terms or campaignsalert.createdA new alert (spend spike, disapproved ad, conversion drop...)change.sentA reviewed change was sent to Google Ads
Privacy
The click keeper stores a random visitor id, the click id, UTM tags and the landing path. It never sends an IP address or a readable e-mail. Where cookie consent is required, load the snippet after consent (or set window.waiAdsConsent = false until then). See the WAI privacy policy.