Case study

Automated Ad Operations - closed-loop creative + post-click insight

Most paid-acquisition stacks stop at the click. This one does not. We built a system for a retail fashion brand that generates creative across Facebook, Instagram, TikTok, and Pinterest; A/B tests in production through a custom harness with a chat-agent the marketing team queries directly; pulls user behaviour from Google Analytics, the Meta Pixel, and Hotjar; and feeds the post-click signal back into the next round of creative. 21% lift in conversion rate is the headline; the recommendation digest the marketing lead reads on Monday is the operational artefact.

Conversion-rate lift

+21%

vs pre-system baseline

Channels orchestrated

4

FB · IG · TikTok · Pinterest

Spend control

100%

human-gated decisions

Last updated:

01. The problem

Three cycles of compounding pain

A direct-to-consumer retail fashion brand running paid acquisition across multiple channels had three cycles of compounding pain:

  1. Creative-iteration cycles were slow. Each new ad concept took the agency a week, the team a week of feedback, and only then went into rotation. Channel performance was lagged.
  2. A/B testing told them which ad won, not why. Two creatives go up, one converts better, the team learns nothing about what to try next. The cycle just repeats.
  3. The data stopped at the click. Click-through and conversion rates are necessary but not sufficient. They didn't tell the team where users exited the site, which sections held attention, which page elements were scrolled past - the post-click behaviour that distinguishes a click that converts from a click that bounces.

The Brief

Close the loop. Generate creative automatically, test it in production, instrument the post-click behaviour, and feed the patterns back to the next round of creative.

02. The stack we built

Closed-loop creative - generate, test, instrument, learn

Creative generation pipeline

  • Brand-voice constraint as a versioned artefact

    The brand's voice file lives in the brand's repo, versioned and reviewed; the creative agents read it on every generation. New voice rules ship through the same review path as code.

  • Channel-aware creative agents

    Per-channel ad variants generated from a brand-voice brief, channel format constraints (image dimensions, copy length, CTA conventions), and the campaign goal. Image generation through a fine-tuned Stable-Diffusion-XL pipeline trained on the brand's product catalogue + style library. Copy generation through Claude with the voice file in the prompt.

  • Multiple variants per concept

    A single brief produces a variant set across Facebook · Instagram · TikTok · Pinterest simultaneously - formats, copy lengths, and CTAs adjusted per channel.

  • Human editor signs off

    Nothing goes live without a marketing-team approval; every variant has a one-click approve/reject in the dashboard.

Multi-channel publishing

Direct API integrations to the channels in rotation:

Facebook (Meta) Ads APIInstagram (Meta) Ads APITikTok Ads APIPinterest Ads API

One brief produces variant sets across every channel; the team approves; the publisher pushes them live in a controlled budget split.

A/B harness - purpose-built for this team

A custom A/B testing harness with the dashboard purpose-built for this team:

Controlled spend per variant

Each variant gets controlled spend allocation; performance metrics flow back in near-real-time.

Per-variant metrics surfaced

The dashboard surfaces per-variant CTR, CPC, conversion rate, and post-click engagement - not just headline numbers.

Chat agent inside the dashboard

A chat agent inside the dashboard the marketing team can ask directly. Questions like "why is the green-jacket variant outperforming the navy on TikTok but losing on Pinterest?" land against the actual data; the agent pulls the relevant slices and explains the pattern. The marketing lead uses it the way a junior analyst would have been used a year ago.

Behavioural instrumentation

Post-click signal pulled from three sources:

  • Google Analytics

    Funnel completion, session-level metrics, attribution.

  • Meta Pixel

    Channel-attributed conversions, custom-event firing on cart and checkout milestones.

  • Hotjar

    Section-level scroll depth, exit points, heatmap signal on the landing pages.

Closed-loop creative iteration

The next round of creative reads the previous round's performance data - which copy lines, which images, which CTAs correlated with deeper site engagement, not just clicks. The next round's variants reflect that signal. The loop closes.

Every spend decision is human-gated. The system never auto-launches a campaign; it never reallocates budget without approval. Live spend is always one approve-click away from a human.

03. Implementation

Four phases - pipeline, harness, instrumentation, feedback

  1. Shipped
    01Phase 1 · Creative pipeline + multi-channel publishing

    Stood up the creative agents and the four channel adapters (Facebook, Instagram, TikTok, Pinterest). The first iteration produced variants the marketing lead would actually edit and ship; that was the bar. Brand-voice constraints lived in the brand's repo from day one, versioned alongside code.

  2. Shipped
    02Phase 2 · A/B harness and the in-dashboard chat agent

    Built the testing harness and the dashboard. The chat agent was the highest-leverage feature in this phase - once the marketing lead could ask the data questions in natural language and get answers grounded in the actual variant performance, the iteration cadence shifted from weekly to daily.

  3. Shipped
    03Phase 3 · Behavioural instrumentation

    Pulled in Google Analytics, the Meta Pixel, and Hotjar. The tracking design respected privacy posture from day one - aggregate-only patterns, no per-user retargeting, no PII flowing into the agent's context.

  4. Shipped
    04Phase 4 · Recommendation digest and feedback loop

    The reasoning agent that reads aggregate behaviour data and recommends landing-page improvements. Output landed as a weekly Monday-morning digest, not as autonomous changes. The next round of creative reads the previous round's performance.

Friction we hit

  • Channel-format drift. Facebook, Instagram, TikTok, and Pinterest each have their own evolving format constraints. The first iteration's variants occasionally violated one channel's character cap or image-ratio. We added a per-channel pre-flight validator that rejects non-conformant variants before they reach the team.
  • Hotjar event volume. Hotjar's signal at the brand's traffic level produced more raw behavioural events than the recommendation digest could digest weekly. We aggregated to per-page, per-section, per-day buckets before the reasoning agent saw the data.
  • The recommendation digest needed the marketing lead's voice. Early versions read like a generic SEO report - patterns the brand's team already knew about. Once the digest absorbed the lead's actual editorial style and the brand's specific KPIs, it landed as actionable.
  • Brand-voice drift in the creative agent. Voice file updates needed to flow through the same review path as code; otherwise creative drifted toward a generic-fashion-brand tone. Versioning the voice file was the fix.
04. The numbers

+21% conversion-rate lift, 100% human-gated

Channels in rotation
Facebook · Instagram · TikTok · Pinterest
Conversion-rate lift vs pre-system baseline
+21%
Behavioural sources feeding the loop
Google Analytics · Meta Pixel · Hotjar
Recommendation cadence
Weekly, Monday morning
Spend decisions human-gated
100%

The 21% conversion-rate lift is the headline. The compound effect - fewer rounds with the agency, sharper creative, a marketing lead with an analyst-on-tap - is the operational outcome that earned the renewal.

AI that already runs

Closed-loop ad ops for your brand?

The closed-loop pattern - automated creative, A/B at scale, post-click behaviour, aggregate-only privacy posture, marketing-team chat agent - is not specific to fashion or retail. A 30-minute diagnostic walks through your channels, your privacy posture, and where the loop is currently broken.

Live · powered by Gemma-4 · running on our hardware in Sofia