How LeakStop uses the Google Ads API
Last updated: August 14, 2026 · Contact: ops@leakstop.dev
The short version: LeakStop reads five reports from the Google Ads accounts our customers connect, once a night, to show them where their own money is being wasted. It writes nothing. Version 1 of the product contains no mutate call of any kind — not disabled by a setting, not gated behind a flag: the code path does not exist.
This page documents that in detail, because a tool that asks for access to your ad account owes you a precise answer to "what exactly are you doing in there?" It is also the technical reference for our Google Ads API developer token application.
1. What the product is
LeakStop is a subscription auditing tool for advertisers and freelance PPC managers who run their own Google Ads accounts. Google's automation — auto-applied recommendations, Ads Advisor, AI Max query expansion — now changes those accounts continuously, while the invoice and the liability stay with the advertiser. LeakStop is the independent auditor of that activity. It produces three things:
- A change-log of what automation did to the account, in plain English.
- Waste findings — six detection rules over search terms and spend, each with the evidence attached.
- A savings ledger — a conservative, evidence-linked record of what the fixes actually saved, measured against a 28-day baseline.
Business model: a monthly SaaS subscription paid by the advertiser, priced in bands by managed ad spend ($199 / $299 / $499 per month). We are paid only by the person whose account we audit. We take no commission, no rev-share, and no compensation of any kind tied to how much anyone spends on ads. There is also a free, no-login CSV audit that uses no API access at all — you upload a search-terms export and get the same detection run against it.
2. Whose accounts are accessed
Only accounts our customers own or already administer, and only after that customer completes
Google's own OAuth consent screen for the https://www.googleapis.com/auth/adwords
scope. One workspace belongs to one customer; account data is never pooled, joined, or shared
across workspaces.
LeakStop does not manage campaigns on anyone's behalf, does not resell Google Ads data, and is not an agency. Our staff have no code path that can write to a customer's account, because no such path exists in the product.
3. Exactly what we read
All API access is search_stream against the following resources. This is the
complete list — the queries live in a single file in our codebase for exactly this reason.
| Resource | What we select | Why | Cadence |
|---|---|---|---|
search_term_view |
Search term, match type, campaign / ad group, cost, clicks, impressions, conversions, conversion value, by day | Query-bleed and n-gram waste detection: which searches took money and returned nothing | Nightly, rolling window |
campaign |
Campaign name and channel type, budget amount, cost, clicks, impressions, conversions, conversion value, by day | Budget-creep and spend-anomaly detection; baselines for the savings ledger | Nightly, rolling window |
change_event |
Timestamp, resource type and name, operation, client type, changed fields, old and new values | The automation change-log — client_type is what distinguishes a change the advertiser made from one Google's automation made |
Nightly, 30-day window (the API's own maximum) |
customer |
Account ID, descriptive name, currency code, time zone, manager flag | Correct currency and time-zone handling in every report — money is never rendered in a currency the account doesn't use | On connect, then occasionally |
customer_client |
Child account ID, name, currency, time zone, status | Letting a customer pick which of their own accounts to audit when they connect a manager account | On connect |
We do not request Recommendations, billing, payments, audiences, or user-list resources. We collect no personal data belonging to the advertiser's own customers.
4. What we never do
- No mutate calls. Nothing in LeakStop creates, updates, removes or pauses anything in a Google Ads account. Every finding ends in a deep link to the exact screen in Google's own interface, where the customer decides and clicks.
- No automated budget or bid changes — not as a feature, not as an opt-in, not as a "safe" default.
- No cross-customer data. One customer's account data never informs, benchmarks against, or appears in another customer's results.
- No resale or onward transfer of Google Ads data, to anyone, in any form.
- No token sharing. API requests originate only from our own backend. No credential is ever exposed to a browser, an extension, or a third-party tool.
If we ever build an assisted-apply tier that writes to an account, it will be a separate product decision, submitted for its own review under the appropriate access level, and it will never be switched on silently for an existing customer. Being the tool that doesn't touch your account is the point of LeakStop, not a limitation we're waiting to shed.
5. Request volume and quota discipline
- Roughly 10–50 operations per connected account per day. Each
search_streamcall is one operation; syncs are batched per account. - Nightly, not real-time. There is no polling loop and no per-pageview API traffic, so there are no bursts to absorb.
- A server-side quota budgeter enforces a global daily operations cap and per-account fairness before any request is issued. If the cap is reached, syncs defer to the next window rather than retrying against the API.
- Incremental and deduplicated ingest — we re-read a rolling window rather than re-pulling history, and identical change events are collapsed on ingest.
6. Security and data handling
- Refresh tokens are encrypted at rest and never sent to the browser.
- The OAuth callback is bound to the signed-in session, so a connection can only ever be established into the workspace of the user who consented.
- Tenant isolation is enforced at the query level — a request for another workspace's data doesn't return a permission error, it returns nothing at all.
- Disconnecting an account deletes its tokens immediately, and the synced data with it. Access can also be revoked at any time from myaccount.google.com/permissions.
- Outbound email can never contain search-term text. This is structural rather than a policy: no template renders it, and a test enforces that.
- TLS everywhere; infrastructure hosted in the EU.
7. Compliance
Google API Services User Data Policy. LeakStop's use and transfer of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements. We use Google user data only to provide the auditing features described on this page. We do not use it for advertising, do not sell it, and do not allow humans to read it except with the customer's consent, for security purposes, or where required by law.
We operate under the Google Ads API access-level policy
and the Google Ads API policies.
Our stack uses the official google-ads Python client library against the current API
version. Domain ownership of leakstop.dev is verified through Google Search Console.
8. Try it without connecting anything
You do not need to authorize any API access to see what the detection actually finds. The free CSV audit runs the same rules against a search-terms export you download from your own account — no Google login, no install, files deleted after 24 hours. That is deliberately the first thing we ask you to do, and it costs you nothing but a file.
9. Contact
Questions about any of the above, including from Google's review teams: ops@leakstop.dev. A human answers.