Run claude mcp add --transport http paidsync https://mcp.paidsync.ai/mcp, type /mcp, and sign in with your PaidSync login. Claude Code then reaches your ChatGPT Ads accounts through 28 tools: reports on campaigns, ad groups and ads, plus creating campaigns, ad groups and chat card ads, and pausing, enabling, updating and archiving what runs. Claude Code asks before it runs each tool.
Build tier. Claude Code can create ChatGPT Ads campaigns, ad groups and ads, and new ad groups start paused until you enable them.
Claude Code talks to remote MCP servers over Streamable HTTP. PaidSync is one of them. Add it once and the same terminal that edits your code can report on and manage your ChatGPT Ads campaigns.
claude mcp add --transport http paidsync https://mcp.paidsync.ai/mcpBy default that registers the server for the current project only. Add --scope user to make it available in every project on your machine. Run claude mcp list to confirm it is there, then start a session and type /mcp to sign in.
Takes 10 seconds. Google or email sign-in. The free plan is 15 tasks a month at $0, no card.
Click Connect on ChatGPT Ads. Sign in with the OpenAI account that can open your ad account in ChatGPT Ads Manager, then paste your OpenAI Ads API key. Create the key in the Settings of your ad account in ChatGPT Ads Manager at ads.openai.com. Each key connects exactly one ad account, and keys from platform.openai.com are refused. PaidSync encrypts the key at rest.
Already inside Claude Code? Ask it to run connect_openai_ads. The tool returns a link to your PaidSync dashboard, where you paste the key.
Inside a session, list_openai_accounts shows your connected ChatGPT Ads accounts, and set_active_openai_account picks the one Claude Code works on.
In your terminal, run:
claude mcp add --transport http paidsync https://mcp.paidsync.ai/mcpStart a session, type /mcp, pick paidsync, and sign in with your PaidSync login in the browser window that opens. Claude Code stores the OAuth token for you. No key is pasted anywhere.
Setting this up for a team? Commit a .mcp.json at the repo root so every engineer gets the same connector:
{
"mcpServers": {
"paidsync": { "type": "http", "url": "https://mcp.paidsync.ai/mcp" }
}
}Prefer an API key, for example for headless runs? Send it in a header, never in the URL, where it would end up in logs:
claude mcp add --transport http paidsync https://mcp.paidsync.ai/mcp --header "Authorization: Bearer $PAIDSYNC_API_KEY"In a committed .mcp.json, add "headers": { "Authorization": "Bearer ${PAIDSYNC_API_KEY}" } so the key stays in each engineer's environment and never enters git. Applying a change to Google Ads still requires the OAuth sign-in. On other platforms a key can apply changes too, so treat it like a password and prefer OAuth.
In a Claude Code session ask: “Show me my ChatGPT Ads campaigns for the last 7 days with spend, clicks and impressions”
Claude Code returns spend, clicks and impressions for each campaign. The connection is live.
Each prompt below maps to tools in the PaidSync ChatGPT Ads group. Claude Code picks the tool. The last column says whether the call can change anything in the ad account.
| Ask | Tools it calls | Changes your account? |
|---|---|---|
| “List my ChatGPT Ads accounts and make Acme the active one” | list_openai_accounts, set_active_openai_account | No |
| “Show campaigns for the last 7 days with spend, clicks and impressions” | list_openai_campaigns, get_openai_performance | No |
| “List every ad group in the Spring Sale campaign with its status” | list_openai_adgroups | No |
| “Which ads are live right now” | list_openai_ads | No |
| “Pause the Retargeting ad group” | pause_openai_adgroup | Yes, after you confirm |
| “Create a campaign called Spring Launch with a daily budget” | create_openai_campaign | Yes, after you confirm |
| “Archive the old Winter campaign” | archive_openai_campaign | Yes, after you confirm |
The -p flag runs Claude Code without the interactive session. Sign in once through /mcp and the stored OAuth token carries over. A report that lands in a file looks like this:
claude -p "Pull last 7 days ChatGPT Ads performance by campaign and list the campaigns with spend and no clicks." \
--allowedTools "mcp__paidsync" \
--output-format json > reports/chatgpt-ads-$(date +%F).jsonReads run straight through, and so do writes. --allowedTools "mcp__paidsync" allows every PaidSync tool, writes included, with no prompt. For an unattended job, allow only the read tools it needs, each by name as mcp__paidsync__tool_name.
PaidSync has 28 ChatGPT Ads tools that read, build and manage. Reads cover accounts, campaigns, ad groups, ads, performance and geo targets. Writes cover creating campaigns, ad groups and chat card ads, uploading creative images, and pausing, enabling, updating and archiving campaigns, ad groups and ads. Creates and updates preview by default with dry_run, and pauses, enables and archives need an explicit confirm.
Over MCP, the approval step is Claude Code’s own prompt. It asks before it runs a tool unless you allowed it with --allowedTools or in your settings. PaidSync adds checks on its side. Deletes, pauses and budget changes need confirm_destructive, and a pre-write rule check blocks unsafe arguments. The approval card, and Undo on an applied card whose change has a safe inverse, apply only in the PaidSync workspace.
upload_openai_creative_image.Sign up at paidsync.ai, connect ChatGPT Ads in the dashboard, then run claude mcp add --transport http paidsync https://mcp.paidsync.ai/mcp in your terminal. Type /mcp inside a session, pick paidsync, and sign in with your PaidSync login.
Yes. ChatGPT Ads is a build tier platform in PaidSync. Claude Code can create a campaign, its ad groups and chat card ads, and upload creative images. The creates preview as a dry run first.
Create it in the Settings of your ad account in ChatGPT Ads Manager at ads.openai.com. Each key connects exactly one ad account, so connect one key per account. Keys from platform.openai.com are refused for ads.
Yes. Once you have signed in through /mcp, claude -p reuses the stored OAuth token. Reads run straight through. Writes need care. No one is there to answer the Claude Code prompt, so any write tool you allowed with --allowedTools runs straight through. For an unattended job, allow only the read tools it needs.
Yes. The free plan is $0 for 15 tasks a month with no card. Pro starts at $99 a month and Team at $249 a month.
ChatGPT Ads reports and campaign builds. One command in Claude Code.