{"slug": "building-a-custom-gpt-or-claude-agent-for-marketing-reporting", "title": "Building a custom GPT or Claude agent for marketing reporting", "summary": "A developer outlined a design for a read-only marketing reporting agent built on either OpenAI Custom GPTs or Claude, using Actions and MCP connectors respectively to pull Ads, Analytics and CRM data. The approach constrains the agent with a fixed set of weekly questions, a shared metric dictionary, read-only tools such as get_ads_summary and get_crm_summary, and a human check before output reaches clients, with tests confirming the agent flags missing data rather than fabricating numbers.", "body_md": "A marketing reporting agent should read approved data sources, answer fixed weekly questions, and never invent numbers. On ChatGPT you build that with Custom GPT instructions, optional knowledge files and Actions that call your API. ([OpenAI GPT Actions](https://developers.openai.com/api/docs/actions/introduction)) On Claude you connect tools through MCP connectors and keep the workflow in a Project so the same rules stick. ([Claude connectors overview](https://claude.com/docs/extend/overview)) Start with read only tools, a written metric dictionary and a human check before anything goes to a client or boss.\n\nMost marketing teams waste Monday morning copying Ads, Analytics and CRM numbers into slides. An agent can draft that pack if you constrain it hard.\n\nIt should:\n\nIt should not:\n\n| Piece | Custom GPT (ChatGPT) | Claude agent style setup | \n|---|---|---|\n| Instructions | GPT builder instructions | Project instructions + skills | \n| Files | Uploaded knowledge | Project files / Library | \n| Live data | GPT Actions via OpenAPI | MCP connectors / tools | \n| Auth | API key or OAuth on Actions | Connector auth on your account | \n| Risk control | Consequential actions need user confirm | Tool allowlists + approvals in your app | \n\nOpenAI Actions turn natural language into API calls described by an OpenAPI schema. You set auth, paste the schema and test in Preview. ([Configuring actions in GPTs](https://help.openai.com/en/articles/9442513-configuring-actions-in-gpts)) Claude reaches external systems through MCP connectors that expose tools, prompts and resources. ([Connectors overview](https://claude.com/docs/extend/overview))\n\nPick the host your team already lives in. The design rules below stay the same on both.\n\nLock ten questions before you touch tools. Example set:\n\nIf a question needs a metric you cannot define, drop the question.\n\nOne sheet, shared with the team:\n\n| Metric name | Source | Exact definition | Primary or note only | \n|---|---|---|---|\n| Paid search spend | Google Ads API | Cost in account currency, account timezone | primary | \n| Primary conversions | Google Ads | Only conversions marked primary for bidding | primary | \n| Qualified leads | CRM | Stage = SQL, created this week | primary | \n| Sessions | GA4 | Total users sessions, site filter X | note | \n\nThe agent must quote these names only. Synonyms cause fake trends.\n\nMinimum viable tools:\n\n`get_ads_summary(date_range, account_id)`` get_analytics_summary(date_range, property_id)``get_crm_summary(date_range)` optional`get_metric_dictionary()`\nNo `update_campaign`. No `send_email`. Add those months later, if ever, behind approvals.\n\nOpenAI production notes for Actions expect HTTPS, sensible rate limits and clear schema descriptions because the model uses those descriptions to pick endpoints. ([Production notes](https://developers.openai.com/api/docs/actions/production))\n\nInstruction block pattern:\n\nOpenAI's Actions getting started guide stresses instructions that name the action and parameters the model should use. ([Getting started with GPT Actions](https://developers.openai.com/api/docs/actions/getting-started))\n\nDo not give the model raw Google Ads or Meta tokens with write scopes. Your API should:\n\nOpenAI documents payload and timeout limits for Actions. Keep responses small and structured. ([Production notes](https://developers.openai.com/api/docs/actions/production))\n\nIf you later allow a tool that changes anything, mark it so the user must confirm. OpenAI supports consequential action flags so ChatGPT asks before running them. ([Production notes](https://developers.openai.com/api/docs/actions/production)) Until then, keep the agent read only.\n\n| Test | Expected behaviour | \n|---|---|\n| API returns empty week | Agent says data missing; no fake table | \n| Conversion tag broke mid week | Agent flags zero days; asks for human check | \n| User asks to raise budgets | Agent refuses; no tool exists | \n| User asks for competitor spend | Agent says unknown unless a licensed tool exists | \n| Two accounts selected | Agent separates tables; no blended fake total unless asked | \n\nForce the same markdown every run:\n\n```\n## Scoreboard\n(table)\n\n## What moved\n(2 to 5 bullets tied to rows)\n\n## Tracking and data risks\n(bullets or \"none found\")\n\n## Suggested tests\n(bullets labelled suggestion)\n```\n\nHumans skim. Machines extract tables. Both win.\n\nThe agent drafts. A person posts to Slack or email after a two minute read. That single habit prevents most embarrassment.\n\nEach month ask:\n\n```\nYou are a marketing reporting assistant for [Brand].\nOnly use tool results for numbers.\nIf a tool errors or returns empty data, say what failed.\nDefault range: last complete Mon-Sun in the account timezone.\nNever invent benchmarks.\nOutput the scoreboard table first.\nLabel suggestions as suggestions.\n```\n\nPaste tool names exactly as they appear in your OpenAPI `operationId` fields so the model can bind steps to Actions. ([Getting started](https://developers.openai.com/api/docs/actions/getting-started))\n\nWait if conversion tracking is broken, if nobody agrees what a lead means, or if the only goal is \"an AI demo for the board\". Fix definitions first. The agent amplifies whatever you feed it.\n\nIf you want this packaged as part of a wider marketing automation build, I outline that work on [vickylalwani.net/services/ai-automation](https://www.vickylalwani.net/services/ai-automation). Use the ten steps above so any builder inherits the same read only rules.", "url": "https://wpnews.pro/news/building-a-custom-gpt-or-claude-agent-for-marketing-reporting", "canonical_source": "https://dev.to/vickylalwani/building-a-custom-gpt-or-claude-agent-for-marketing-reporting-43pe", "published_at": "2026-10-30 21:34:55+00:00", "updated_at": "2026-10-30 21:50:36.590412+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "agent-protocols", "ai-products"], "entities": ["OpenAI", "ChatGPT", "Claude", "Anthropic", "Google Ads", "GA4", "MCP"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/building-a-custom-gpt-or-claude-agent-for-marketing-reporting", "markdown": "https://wpnews.pro/news/building-a-custom-gpt-or-claude-agent-for-marketing-reporting.md", "text": "https://wpnews.pro/news/building-a-custom-gpt-or-claude-agent-for-marketing-reporting.txt", "jsonld": "https://wpnews.pro/news/building-a-custom-gpt-or-claude-agent-for-marketing-reporting.jsonld"}}