Security

Nothing changes in your account without your approval.

Goldbeater reads your account, keeps your Google access on our server, and changes only what you approve and apply.

For anything this page doesn’t answer, write to security@goldbeater.ai.

Where your Google access lives
Your call
Goldbeater changes nothing until you approve a specific change and press Apply.
0 keys
The analysis runs with no credentials at all.
No copy
We keep one spend figure a day, never a copy of your account.
Undo first
A change is refused unless its undo is written first, and each applied change can be undone.

Filmed in the product

You approve it, you apply it, and Undo puts it back.

Goldbeater's change set for a sample account with the finding's fix in it: an exact-match negative keyword, sofa bed free, in Sofas — Phrase, waiting for Approve or Reject, and Apply not yet available.
  1. 01 · Approve

    You approve the change. That marks it ready and sends nothing.

  2. 02 · Apply

    You press Apply. Goldbeater checks the change, sends it to Google Ads and reads it back.

  3. 03 · Undo

    You press Undo, and the account is back as it was.

The limits

Four limits, each enforced by the code.

No one else's questions can reach your account

Our server, not the AI agent, decides which account a query runs against, so nothing the agent writes can reach another.

Our own server attaches the account to every query, from the conversation the query belongs to. The query language has no place to name an account.

Your credentials never leave our server

The analysis runs in a sandbox that holds no credentials and can reach exactly one address: our own server.

The sandbox holds no credential of any kind, and your Google access stays behind our server. That access is a grant you make at Google, and you can revoke it there.

Only our own servers call the Google Ads API, with the Google login you connected. Its refresh token sits in our database, encrypted with AES-GCM under a key held as a server secret, apart from the database.

Nothing changes without a way back

Goldbeater checks each change with Google, sends nothing until its undo is written, and reads the fields back to confirm the change.

A change set is only a proposal until you approve its changes, one at a time, and apply them. Goldbeater reads the fields back afterwards to confirm the change did what it said.

See how a change is applied and undone

Nothing in your data can give Goldbeater orders

Goldbeater reads search terms, which strangers typed into Google, as data, never instructions. The AI agent can only propose, so at worst you reject it.

Search terms are what members of the public typed into a search box, and some of them are written to be read by an AI model. They arrive as data, kept apart from the instructions the AI agent follows.

What Goldbeater remembers can't carry a link or change what it's allowed to do, and what a review learns while nobody is there is listed on the account's Memory page for someone to look at.

Nothing reaches your account without your approval, so the worst outcome is a proposal you reject. There will never be an autopilot mode.

What we hold

We keep the conclusions and the conversation that produced them.

What a review reads stays in its conversation.

What we never store
  • We never store a copy of your account.
  • We never have your Google password.
  • No customer's data goes into a model provider's training set.
  • We never keep your landing pages, only facts read from them, such as whether your Google tag is there.
WhatWhere it livesHow long
Performance rows a review pulledInside that conversation, as the results the agent readAs long as the conversation is kept
One spend figure a day for each switched-on account, which your plan's cap is measured against; and 30 days of them for every account a login reaches, read once when it connectsOur database, read again from Google each morningWhile your account is open
The dashboard's last reading of each account, shown when Google doesn't answerCloudflare's cache, beside our serverUp to a week
Findings from the last two times each check ran, and a record of every time they ranOur databaseWhile your account is open. Older findings are deleted unless a change, suggestion or report to our team came from one
What the AI agent remembers about an account: what its analysis learned, and what people told it to rememberOur database. The account's Memory page lists every oneWhile your account is open. A memory somebody stops using is kept, marked with the reason
What Goldbeater read to set an account up: its brand's names and line of business, and the keywords, names and headlines they came fromOur database. The account's Settings show bothWhile your account is open
Change sets, your decisions, and the undo for eachOur databaseWhile your account is open
Your AI analyst's conversations, and every query the agent ranObject storage, referenced from the databaseWhile your account is open
Google OAuth refresh tokenOur database, encrypted with AES-GCM under a key held as a server secret, apart from the databaseUntil the login is disconnected, which deletes it and asks Google to revoke it. Revoking it at Google yourself stops it working too
Who can reach each Google Ads account you connect: their email, and whether they can change itOur database, read from the account's own user list at GoogleReplaced with Google's list each day while a login you connected reads the account. A list Google hasn't refreshed for a week is deleted
An AI assistant you connect to Goldbeater's MCP server: its name, when you allowed it, and its access, each token kept only as a hashCloudflare's key-value store, beside our serverWhile the assistant keeps using it: a connection unused for 30 days ends, and disconnecting it from your Profile ends it at once
Your name, email, organizationOur databaseWhile your account is open
What happened in the product, for our team: a sign-up or sign-in, a login or an AI assistant connected, an invitation, a payment, feedback you send, a question asked in the product, in its asker's wordsOur database, and posted to our team's SlackWhile your account is open. Slack keeps its copy for as long as our workspace does
Card detailsStripe, as Link, which sells the plan; never on our serversPer Stripe's retention
Your plan: which one, how it came (a trial, a payment, or given by us), and the period each payment coveredOur database, and Stripe's customer and subscription for your workspaceWhile your account is open
What a landing page answered when Goldbeater opened it: its status, where a redirect ended, how long it took, and the few facts read from it (your Google tag, words saying the page wasn't found, a phone number it links). Never the page itselfOur database, on the finding about that pageWhile that finding is kept
How fast your landing pages load for real visitors on phones, as Google's PageSpeed Insights measured themOur database, on the finding about a slow pageWhile that finding is kept

How a review reads your account

A review reads your live account for the period it needs, up to 50,000 rows a query; a larger query is refused rather than cut short.

What it read stays in that conversation, because the AI agent rereads it to answer your next question. Apart from one spend figure a day, nothing loads those rows into a warehouse or copies them into a database we could search across accounts.

The model reads the rows the agent queried, not a copy of your account, and the conversation is sent again at every step, which is how it answers a follow-up. None of it is used to train Anthropic's models.

A finding's draft of callouts, a structured snippet or sitelinks is written from your account's own ad text, which goes to the model when you open the finding. Ask for another value in a snippet's box and the values in the box go with it, any you typed included; none of them is kept.

AI assistants you connect

If you connect Claude, ChatGPT, Cursor or another assistant to Goldbeater's MCP server, it can read what Goldbeater's checks found on the Google Ads accounts you can open in Goldbeater, through the same workspace rules as the app: each finding with its evidence and the fix Goldbeater drafted, and which checks ran.

It reads what Goldbeater has already stored, so a call sends nothing to Google Ads, and it can't change anything: not your Google Ads account, not your change set, and not when the checks run. A workspace on its free first look shows it what the app does, the counts and what they're worth.

You sign in with your Goldbeater account, and a consent screen names the app and where its access goes before you allow it. The access carries only who you are, and every call checks what you can open at that moment, so an account you lose access to, or a workspace you leave, is out of its reach at once.

To withdraw it, disconnect the app from your Profile in Goldbeater, under Connected apps, which ends its access, or remove it in the assistant.

What the assistant reads goes into your conversation with it, under the terms you have with its maker, as anything you paste into it does.

How to connect an assistant

How Goldbeater opens your landing pages

To tell you when an ad sends clicks to a page that doesn't load, redirects somewhere else, says it isn't there or lacks your Google tag, Goldbeater opens each page the ads, keywords, asset groups, sitelinks, promotions and price assets in your connected accounts send clicks to, each time the checks run: once a day, and whenever you ask.

It asks the way a visitor's browser would, with a GET request that carries no cookie and nothing from your account, and names itself GoldbeaterBot, with a link to this page. It also opens the store page an app asset sends taps to.

It keeps what each page answered and where any redirect led. Of a page that loads, it reads the HTML only until it finds a Google tag, the title and the main heading, and keeps whether the tag is there and its ID, and the title's or heading's words only where they say the page wasn't found.

It also keeps the phone numbers the page's call links dial, to suggest a call asset where your ads have none, and reads the 20 pages with the most spend to their end, where a phone number usually sits. Nothing else on a page is kept, and no page is copied.

When you open a finding that asks for sitelinks, Goldbeater opens the pages a sitelink could link, the same way, and reads each page's title, description and main heading. Those go to the AI model with your account's own ad text, so the sitelinks it drafts say what each page offers. Nothing it read of a page is kept.

A page that fails, or says it isn't there, is asked again a few seconds later before a finding calls it broken, and a site that turns the request away as a bot is never reported as broken.

If your site's firewall or bot protection turns these requests away, the Checks page says which checks couldn't run, and every other check runs as usual. To let them run, allow requests whose User-Agent contains GoldbeaterBot. They come from Cloudflare's network, whose addresses change, so allowing an IP address won't hold.

To tell you when a page loads slowly, Goldbeater sends the addresses of the ten pages your ads send the most spend to, and nothing else, to Google's PageSpeed Insights each time the checks run. Google loads each as a phone would and reports how long its real Chrome visitors waited over 28 days; Goldbeater keeps those figures.

Subprocessors

Everyone who touches your data, and why.

All are in the United States, and we keep this list current.

ProcessorWhat it does
CloudflareOur API, the AI agent, storage and the analysis sandbox
PlanetScaleOur database, on Amazon Web Services in Oregon
VercelServes this website and the product front end
AnthropicThe model that reads the account data a review, a question or an account's setup needs, and writes the analysis
GoogleThe Google Ads API, where your account data comes from. Only our own servers call it, with the Google login you connected. PageSpeed Insights gets the addresses of your landing pages with the most spend, to measure how fast they load
SendGridSends the product's email: to you (a review is ready, a connection broke, a plan is about to change) and to our own inbox (your feedback)
SentryError reporting. An event carries identifiers, the line that threw and the error's message, with request bodies, headers and cookies stripped
SlackTells our team what happened in the product as it happens. It gets names, email addresses, workspace and ad account names, the feedback you send, each question asked in the product in its asker's words, and a line on what a review or a check found, such as an alert's title; never the rows read from an account, or an answer
GitHubHolds our code and runs its deploys, and the daily export of our database on its way to our backups
StripeSells the plan as merchant of record, through Link: checkout, card handling, tax, receipts and the page for managing a subscription. It gets the buyer's email and the workspace's id
Google AnalyticsCounts visits to this website, and whether a visit that began with an ad led to a sign-up, a trial or a first payment (the plan and the amount). Never the product's pages, and nothing read from an ad account
Google AdsMeasures our own ads, and shows them again to people who have visited this website, unless their browser sends Global Privacy Control. Never the product's pages. For a workspace made in a browser our site's tags counted, it gets a trial or first payment with its amount, the ad click's id, and a SHA-256 hash of its maker's email address, with ad personalization denied. Nothing read from an ad account

Reporting

Found something? Tell us before you tell anyone else.

Write to security@goldbeater.ai.

What to send

Write to us about goldbeater.ai and api.goldbeater.ai, the app and the MCP server included.

Tell us where the problem is (an address, a page or a request), the steps that show it, and what someone could do with it. A request and its answer, or a screenshot, shows it fastest.

Name the Goldbeater login or the client you tested with, so we can find your requests in our logs and tell them from anyone else's.

What happens next

Your report comes straight to the team that builds Goldbeater, and we read every one.

We'll reply to tell you what we found, and what we changed if it needed a change. Please keep it between us until we have.

Open registration on the MCP server is by design

Anyone can register an OAuth client at api.goldbeater.ai/oauth/register, with no credential and any redirect address. That is how an AI assistant connects to the server without asking us first, as RFC 7591 and the Model Context Protocol's authorization spec provide for.

A registered client can read nothing. It gets access only when a person signed in to Goldbeater approves it on the consent page, and then it can only read the findings that person can open, until they withdraw it.

We want to hear about a way to get a token without that person's approval, or a consent page that misstates who is asking or where the access is sent.