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.
- 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.

- 01 · Approve
You approve the change. That marks it ready and sends nothing.
- 02 · Apply
You press Apply. Goldbeater checks the change, sends it to Google Ads and reads it back.
- 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.
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.
- 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.
| What | Where it lives | How long |
|---|---|---|
| Performance rows a review pulled | Inside that conversation, as the results the agent read | As 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 connects | Our database, read again from Google each morning | While your account is open |
| The dashboard's last reading of each account, shown when Google doesn't answer | Cloudflare's cache, beside our server | Up to a week |
| Findings from the last two times each check ran, and a record of every time they ran | Our database | While 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 remember | Our database. The account's Memory page lists every one | While 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 from | Our database. The account's Settings show both | While your account is open |
| Change sets, your decisions, and the undo for each | Our database | While your account is open |
| Your AI analyst's conversations, and every query the agent ran | Object storage, referenced from the database | While your account is open |
| Google OAuth refresh token | Our database, encrypted with AES-GCM under a key held as a server secret, apart from the database | Until 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 it | Our database, read from the account's own user list at Google | Replaced 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 hash | Cloudflare's key-value store, beside our server | While 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, organization | Our database | While 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 words | Our database, and posted to our team's Slack | While your account is open. Slack keeps its copy for as long as our workspace does |
| Card details | Stripe, as Link, which sells the plan; never on our servers | Per Stripe's retention |
| Your plan: which one, how it came (a trial, a payment, or given by us), and the period each payment covered | Our database, and Stripe's customer and subscription for your workspace | While 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 itself | Our database, on the finding about that page | While that finding is kept |
| How fast your landing pages load for real visitors on phones, as Google's PageSpeed Insights measured them | Our database, on the finding about a slow page | While 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 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.
| Processor | What it does |
|---|---|
| Cloudflare | Our API, the AI agent, storage and the analysis sandbox |
| PlanetScale | Our database, on Amazon Web Services in Oregon |
| Vercel | Serves this website and the product front end |
| Anthropic | The model that reads the account data a review, a question or an account's setup needs, and writes the analysis |
| The 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 | |
| SendGrid | Sends 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) |
| Sentry | Error reporting. An event carries identifiers, the line that threw and the error's message, with request bodies, headers and cookies stripped |
| Slack | Tells 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 |
| GitHub | Holds our code and runs its deploys, and the daily export of our database on its way to our backups |
| Stripe | Sells 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 Analytics | Counts 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 Ads | Measures 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.