Security

Security at AdChat: How Your Meta Ad Account Stays Safe

What AdChat can access in your Meta ad account, how write access, encryption, keys and OAuth work, what data we keep, and how to disconnect or report an issue.

Updated October 24, 2026

Letting an AI near your ad account is a big ask. Your budget is on the line, and so is your Facebook login. This page explains, in plain English, what AdChat can see, what it can change, how your login is protected, and how to cut it off whenever you want. Everything here describes how AdChat actually works today. If something isn't on this page, we don't claim it.

What AdChat can access

When you connect Facebook, Meta shows you a permission screen. AdChat asks for three permissions:

  • ads_read: lets AdChat read your ad performance, like spend, clicks, reach and conversions. This is what powers questions like "how did my ads do last week?"
  • ads_management: lets AdChat create and edit campaigns, ad sets and ads in the ad accounts you choose. AdChat only uses this when you turn on write access and ask for a change.
  • business_management: lets AdChat see the ad accounts and business assets you manage through Meta Business, so it can find the right accounts for you.

You pick which ad accounts to share during the Facebook login. AdChat works through Meta's standard Marketing API, the same official API that other ad tools use. AdChat is an approved Meta app, and these permissions went through Meta's App Review. You can read more on our Meta approval page.

Read-only by default

A new AdChat account can only read. Every tool that changes something in your ad account is blocked until you switch on Write Access in your dashboard under API Keys. That covers 14 tools: creating or updating campaigns, ad sets, ads and creatives, uploading images, budget schedules, and creating or deleting custom audiences.

If your AI tries one of these while write access is off, it gets a message back telling you how to turn it on. Nothing is changed. You can switch write access off again at any time.

Safe defaults when write access is on

Even with write access on, AdChat is built to be careful:

  • New campaigns, ad sets and ads start paused. Nothing new spends money until you turn it on, unless you explicitly ask the AI to create it active.
  • The built-in chat asks first. Before any change, like a budget edit, a pause or new targeting, AdChat's own chat is instructed to list exactly what it will change and wait for you to say yes.
  • It only acts when you ask. There is no background mode and no autonomous optimization. AdChat does nothing on its own between your messages.

If you use AdChat through Claude, ChatGPT or another AI app, that app also usually shows you each tool call before it runs. Read those prompts before you approve them.

Your server URL and AdChat key

Every AI app connects to the same URL, https://mcp.adchat.app. There's no key in it. You connect by signing in with OAuth (see below).

A few apps can't sign in. For those, there's a personal AdChat key as a fallback. Keys start with adchat_ and you'll find yours in the dashboard. The app sends it as an Authorization: Bearer header, never in the URL.

Treat this key like a password:

  • Anyone with your key can use your connected ad accounts, within the access you've allowed.
  • Don't paste it into public chats, screenshots, shared documents or code you push to GitHub.
  • If you think it leaked, roll it in the dashboard. Rolling creates a new key and the old one stops working straight away. Then update your AI apps with the new one.

Every tool call is checked against your key before it reaches Meta. Unknown keys are refused.

Signing in with OAuth

Apps that support OAuth for remote MCP servers, like Claude's custom connectors, ChatGPT, Cursor, Claude Code and Codex, only need https://mcp.adchat.app. The first time, they send you to AdChat to log in and click Allow, and you never copy a key by hand.

Each app gets its own tokens. They expire and refresh automatically, so the app stays connected as long as you use it at least once every 90 days. You can sign an app out at any time under Connected apps on the Claude & ChatGPT page of your dashboard. Tokens are never put in URLs.

Under the hood AdChat uses the standard authorization code flow with PKCE, which stops a stolen login code from being reused by someone else. Login codes expire after 10 minutes and work only once. Refresh tokens are replaced every time they're used. If an old one shows up again after a short retry window, AdChat signs that app out as a precaution.

How your Facebook token is protected

When you connect Facebook, Meta gives AdChat an access token. AdChat stores it encrypted with AES-256-GCM, using a fresh random value for each token. The encryption key is kept in the server's environment settings, separate from the database. A copy of the database on its own isn't enough to read your token.

Meta tokens expire after a while. When yours does, you reconnect Facebook from the dashboard.

What data we store and for how long

AdChat stores what it needs to run the service:

  • Your account details, like name and email
  • Your Facebook connection, including the encrypted token and which ad accounts you shared
  • Your settings, like write access and your default ad account
  • A usage log of which tool was called and when, used for limits and billing
  • Your conversations in the built-in chat, so you can come back to them

Your ad data stays in Meta. AdChat fetches it when you ask a question and passes it to the AI you're using.

Our privacy policy sets the retention rules. In short:

  • Account data is kept while your account is active. When you delete your account, the policy says all associated personal data "is permanently deleted from our systems within 30 days."
  • Ad account connection data is kept while your account is active, and deleted when you delete your account or ask us to.
  • Usage and analytics data is kept "in anonymized form for up to 12 months for service improvement purposes."

Which AI sees your data depends on where you use AdChat. In the built-in chat at adchat.app, your messages and the ad data AdChat fetches are sent to OpenAI to write the answers. When you use AdChat inside Claude, ChatGPT or another app, that app's provider handles your conversation under your own account with them.

Where AdChat runs

The AdChat website and dashboard run on Vercel. Login sessions are stored in Turso, as the privacy policy describes. The tool server that talks to Meta runs as a separate service behind the mcp.adchat.app gateway. All traffic uses encrypted HTTPS connections.

Disconnecting and deleting your data

You're in control:

  • Disconnect an AI app under Connected apps on the Claude & ChatGPT page of your dashboard. It's signed out right away.
  • Disconnect Facebook from the Ad Accounts section of your dashboard.
  • Cut access at Meta's end by removing AdChat from the Business Integrations section of your Facebook settings. That revokes AdChat's access with Meta directly.
  • Turn off write access if you only want AdChat to stop making changes.
  • Delete everything by emailing [email protected]. We process deletion requests within 30 days, as the privacy policy says.

Rate limits and access checks

Every tool call through https://mcp.adchat.app goes through a gateway first. It checks that your sign-in or key is valid, that your trial or subscription is active, and that you're under the limit of 30 requests per minute. Calls over the limit get a short "try again in a few seconds" message. The built-in chat has a monthly cap of 300 messages. These limits keep the service steady for everyone and stop a runaway AI loop from hammering your ad account.

What we don't claim

AdChat is a small, independent product. We don't hold SOC 2, ISO 27001 or similar certifications, and we won't pretend to. What we can offer is a careful setup, safe defaults, and honest answers about how it works.

Report a security issue

If you find a vulnerability or think your account has been misused, email [email protected]. Please include steps to reproduce if you can, and give us a chance to fix it before sharing it publicly. We'll reply as quickly as we can.

Try it free for 7 days. Questions? Email [email protected].

Try it on your own ad account

Connect your Meta ads to Claude, ChatGPT or our built-in chat in about a minute.

Start free for 7 daysNo credit card needed. Then $19/month. Cancel anytime.

Questions? Email me at [email protected]