marketing_ops · media · workflow

Spotify builds multi-agent Ads AI to automate media planning from 15–30 minutes to seconds

Spotify's ads platform re-implemented the same core planning decisions per buying channel and surface, causing logic to drift over time and leaving no unified intent layer to orchestrate advertiser goals consistently. Advertisers also had no optimization guidance and faced complex multi-screen configuration flows.

How it works
Common implementation structure
How this type of workflow is generally built, generalized across documented cases — not tied to any one vendor's stack. Click any stage to read what happens there. Specific products that implement these stages appear in “Tools commonly seen” below.
Stage 1 · Advertiser submits natural language brief
Advertisers interact through natural language to generate media plans.
Tools used
Ads AIGoogle ADKVertex AIGemini 2.5 ProgRPCGoogle CloudPostgreSQLApolloRouterAgentMediaPlannerAgent
Outcome

The multi-agent Ads AI system reduced media plan creation time from 15–30 minutes to 5–10 seconds and cut required user inputs from 20+ form fields to 1–3 natural language messages, grounding recommendations in historical performance from thousands of campaigns.

What failed first

Hard-coded happy paths per channel could not capture the combinatorial nature of ads planning, and freezing the probabilistic, ML-dependent ads logic into a static decision tree was recognized as brittle and unmaintainable.

Results
Time saved5-10 seconds
Volume20+
Source

https://engineering.atspotify.com/2026/2/our-multi-agent-architecture-for-smarter-advertising

How we source this →

Grounding & classification
Source type: technical build writeup
34 fields verified against source quotes.
agentic workflowconversational aimulti agent workflowrecommendation systemknowledge basemetric backednamed customerproduction runtime claimedtools describedworkflow describedmediacycle time reductionemployee productivitytime savedtechnical build writeupmarketing opssales opsagentic task executionextract classify route