Retail / Home Goods
The media team stopped placing bids. The bids got better.
How an Italian home-goods retailer rebuilt paid-media operations around AI-orchestrated bidding, feed automation, and daily incrementality-informed reallocation, lifting return-on-ad-spend 34% inside a quarter.
CASE / 12
Italian home-goods retailer
The retailer had spent 2024 consolidating 14 regional websites into a single commerce platform. Paid media budget had grown to €2.1M a month across Google, Meta, Criteo, and a regional Italian DSP. The media team was seven people. They were spending 80% of their week inside Ads Manager and Ads Editor, and the performance reports that came out the other end were no longer telling a coherent story about what was working.
GEO
Italy · Spain
Setup
Media ops + analytics
Duration
14 weeks
Shipped
Q2 2026
The problem was orchestration, not bidding
The problem was orchestration, not bidding
We spent the first two weeks auditing where the team's time actually went. Bid adjustments were not the issue; every major platform had been running some flavour of smart bidding for years. The time sink was orchestration: product-feed maintenance across four platforms with four incompatible schemas, negative-keyword hygiene, creative rotation schedules, and per-campaign budget rebalancing done Monday morning from a spreadsheet that had not been rebuilt since 2023.
The team was doing rote coordination work that an orchestration layer should have been doing for them. We did not set out to replace a media buyer. We set out to free them from operations that did not need human cognition.
One feed, four surfaces, continuous
One feed, four surfaces, continuous
Feed normalisation came first. We built a single canonical product feed in BigQuery, joined to stock levels, margin per SKU, and regional availability. Four platform-specific transformers emitted Google Shopping, Meta Catalog, Criteo, and the regional DSP's schema from that source. Updates propagated within five minutes of inventory events instead of the overnight batch that had been standard. Out-of-stock ads, which had been a persistent source of wasted spend, dropped to near zero inside two weeks.


The orchestration layer
The orchestration layer
We built a lightweight orchestration service (Python + Cloud Run) that did four things. First, it monitored per-campaign, per-platform performance every six hours and flagged statistically significant drift from baseline for human review (not automatic change; the team retained veto). Second, it generated daily negative-keyword and placement-exclusion recommendations, applied the ones above a confidence threshold automatically, queued lower-confidence ones for morning review. Third, it managed creative rotation and retirement based on fatigue signals: a creative's CTR drift and frequency cap exceedance rate determined when it moved from active to standby, not a calendar rule. Fourth, it ran weekly incrementality tests with city-level holdouts, and fed the results into the next week's channel-budget allocation.
Claude sat inside two of these loops as a reasoning layer on the drift detection and on the incrementality result interpretation. It did not place bids. It produced structured analysis a human reviewed. The team was explicit that they did not want an autonomous agent moving money; they wanted a better briefing.
Funnel research, continuous not quarterly
Funnel research, continuous not quarterly
Conversion attribution had been running on last-click inside GA4, which everyone knew was wrong and nobody had the time to fix. We stood up a small Meridian MMM alongside the incrementality tests. The models agreed broadly on channel ordering; they disagreed sharply on Meta's incrementality, which was the usual story. Weekly budget shifts were informed by both MMM-implied lift and micro-conversion holdouts running in parallel. Reallocation decisions that would have taken a month of debate pre-engagement took an hour on Thursday afternoons.
Launch With Us
