Tagline (elevator pitch — short field)

An agent that runs a UA buyer's decide → create → test → scale loop, and checks where every number came from before it spends a dollar.


About the project (the "About the project" field — Markdown + LaTeX)

UA Copilot — a metadata-aware agent for performance marketers

An autonomous agent that runs the UA buyer's daily loop — decide → create → test → scale — grounded in lineage-verified warehouse data and wired straight into the ad platforms.

Inspiration

I buy user acquisition for a living. The loop is tight: read the numbers, move budget, spin up creatives, test, scale the winners. The numbers live in a dozen scattered warehouse tables, and the worst mistakes come from acting on a metric whose pipeline silently broke or went stale. I wanted an agent that knows where every number comes from before it recommends a dollar, and that closes the loop all the way into the buy instead of stopping at a dashboard.

What it does

UA Copilot composes three MCP layers:

  • DataHub MCP — the trust layer. Discovers the spend / installs / ROAS / cohort-LTV / attribution datasets, reads their schemas and lineage, and refuses to act on a table whose upstream is stale or failed.
  • Cleanor MCP (our own open server, extended for this hackathon) — the marketing toolbox: ROAS/CPA math, cohort-LTV projection, budget pacing, and creative-asset generation (image optimization, placeholders, QR) for ad variants.
  • Native Google Ads & Meta Ads (MCP + API) — the agent doesn't just advise, it acts: pushes creatives, launches tests, and scales budgets on the platforms directly.

One prompt closes the loop: "which campaigns are pacing below target ROAS, are their LTV tables fresh — generate two new creative variants for the winners and scale them 20%."

The decision math

Scaling is gated on projected ROAS, not raw day-0 numbers. With cohort revenue $r_d$ on day $d$ and install cost $\text{CPI}$, the agent projects horizon-$N$ LTV and scales only when the estimate clears target and the source lineage is fresh:

$$ \widehat{\text{LTV}}N=\sum{d=0}^{N} r_d,\qquad \widehat{\text{ROAS}}N=\frac{\widehat{\text{LTV}}_N}{\text{CPI}},\qquad \text{scale}\iff \widehat{\text{ROAS}}_N \ge \text{ROAS}{\text{target}}\ \wedge\ \text{fresh}(\text{lineage}) $$

Pacing surfaces the same way, flagged when it drifts out of band:

$$ \text{pace}=\frac{\text{spend}_{\text{elapsed}}}{\text{budget}\cdot (t/T)},\qquad \text{flag}\iff \text{pace}\notin[0.8,\,1.2] $$

How we built it

  • A thin Claude orchestrator that treats each platform as an MCP toolset and plans across them: read metadata → compute → generate → act.
  • Extended Cleanor's MCP server with marketing tools (LTV projection, pacing, ROAS/CPA) so the agent's math is a reusable API, not ad-hoc code.
  • Every money-spending action is gated behind a DataHub freshness check — a broken pipeline blocks the buy instead of feeding it.

What we learned

  • Lineage is the missing trust primitive for agentic marketing. An agent that can move ad spend is only safe if it first checks where the number came from; DataHub's metadata turns a plausible answer into a grounded, verifiable one.
  • MCP composition beats a monolith. Warehouse (DataHub), tools (Cleanor), and channels (Google/Meta) as separate MCP servers kept each concern clean and let one agent reason across all three.

Challenges

  • Stale / broken pipelines — the core failure mode; solved by making freshness a hard gate on any spend action.
  • Attribution mismatch across Google and Meta — different windows and models; the agent normalizes to a common horizon before comparing.
  • Guardrails on real money — every budget/creative action is proposed with its data provenance and a bounded change, never an open-ended write.
  • Multi-MCP latency — planning across three servers is chatty; we cache metadata reads and batch the compute step.

Built with (tags field, comma-separated)

datahub, model-context-protocol, mcp, claude, anthropic, google-ads-api, meta-ads-api, facebook-marketing-api, cleanor-mcp, python, data-lineage, ai-agents

Built With

  • ai-agents
  • claude
  • cleanor
  • datahub
  • google-ads
  • mcp
  • meta-ads
  • python
Share this project:

Updates

Submission history