Performance Labeliser

Spend behind winners. Not behind everything.

Sync Google Ads metrics back into your feed and auto-label every product as a Champion, Contender, Underperformer or Zombie. Route only the winners into your top campaigns. Cap the zombies. Reclaim the budget.

Google Ads metrics native Custom labels 0–4 Re-labels daily
Auto-labelled SKUs
Last sync: 03:14
ProductClicksROASLabel

AM90-WHT-42

Air Max 90 · White / Grey

1845.8xChampion

AM90-BLK-44

Air Max 90 · Triple Black

923.1xContender

DUNK-LOW-WHT

Dunk Low · White / Black

2486.4xChampion

PG4-OBS-43

Pegasus 40 · Obsidian / Mint

412.4xContender

BLZ-MID-77

Blazer Mid '77 · White

620.9xUnderperformer

CTAS-LO-NVY

Chuck Taylor All Star · Navy

310.0xZombie
12,480 products labelled custom_label_0 synced

+0%

ROAS uplift

Champion-only campaigns

0%

wasted spend

zombies capped

0 labels

auto-assigned daily

from Google Ads metrics

0-day

lookback windows

7 / 30 / 60 / 90 day

Used by feed teams at ambitious brands and agencies

AKT LondonPulsioMindful ChefContempeeNutrition GeeksBPerfect CosmeticsHoly GelsPuresportRevive CollagenNoted AromasRheal SuperfoodsSneak EnergyCleensFree SoulUK RadiatorsAKT LondonPulsioMindful ChefContempeeNutrition GeeksBPerfect CosmeticsHoly GelsPuresportRevive CollagenNoted AromasRheal SuperfoodsSneak EnergyCleensFree SoulUK Radiators
The problem with flat bidding

You're spending the same on winners and zombies.

The 80/20

Twenty percent of your SKUs drive eighty percent of revenue. The rest drink budget at the same bid level, dragging average ROAS down across the campaign.

Performance Max blindness

PMax learns at the campaign level. Without product-level signals it spreads spend evenly across SKUs that perform very unevenly.

Zombies

Products that get clicked but never convert. They keep eating impressions because Google sees the engagement and keeps serving them.

What the labeliser does about it

Label every product by performance. Route bids by label. Daily.

The labeliser pulls clicks, conversions, cost, and conversion value per SKU from Google Ads, computes ROAS over a window you choose, and writes a label to one of your five custom_label fields. Your campaigns segment on those labels and bid accordingly. Re-runs daily so winners stay winners and zombies don't sneak back.

The four labels

Four buckets. Every product, every day.

Default thresholds are tuned to what works for most ecommerce shops on Google Shopping. Override them per brand. The label that wins is the highest-priority one a product qualifies for.

ChampionDefault rule

Champion

Strong revenue drivers with healthy return on ad spend.

20+ clicks · 3+ conversions · ROAS ≥ 4

Recommended action: Scale aggressively. Promote into Performance Max top-tier.

ContenderDefault rule

Contender

Reliable contributors worth scaling next.

10+ clicks · 1+ conversions · ROAS ≥ 2

Recommended action: Grow with caution. Mid-tier bidding, monitor weekly.

UnderperformerDefault rule

Underperformer

Spending real money for weak return. Cap or pause.

20+ clicks · £20+ cost · ROAS ≤ 1.5

Recommended action: Cap bid or pause. Send the title back to Product Optimisation.

ZombieDefault rule

Zombie

Traffic with zero conversions. Drain on impression share.

1,000+ impressions · 25+ clicks · 0 conv.

Recommended action: Exclude from campaign. Investigate why they don't convert.

How it works

Four steps. One Ads account.

End to end in under five minutes. After the first sync the labeliser runs on its own every night, so your campaigns always see today's performance, not last quarter's.

01

Connect Google Ads

Authorise the connection in two clicks. Pick the Ads account that runs your shopping campaigns.

02

Pick a lookback window

7, 30, 60 or 90 days. Shorter windows catch trends fast, longer windows give stable labels for volatile catalogues.

03

Tune thresholds (optional)

Defaults work for most. Override per brand: maybe your AOV makes 2x ROAS the new floor for Champions.

04

Sync runs daily

The labeliser writes to custom_label_0 by default. Campaigns segment on it. Re-syncs nightly so labels stay current.

Default thresholds

Sensible defaults. Override anything.

What follows is what we set out of the box. Edit any threshold per brand. The labeliser re-runs the moment you save, so you see the impact on tonight's segmentation.

LabelMin clicksMin conv.Min costROAS
Champion203≥ 4.0
Contender101≥ 2.0
Underperformer20£20≤ 1.5
Zombie250

Zombie threshold also requires 1,000+ impressions to avoid mislabelling low-traffic products.

Use cases

How performance teams put labels to work.

Performance Max segmentation

+31%

tROAS on Champion tier

Promote Champions into a tier-one PMax campaign.

Build a Performance Max asset group filtered to custom_label_0=champion. Set the ROAS target to the level only your winners can hit. Watch tROAS climb without losing volume.

Zombie exclusion

−42%

wasted spend

Stop paying for clicks that never convert.

Add a campaign-level negative for custom_label_0=zombie. Spend that was going on dead-end SKUs gets reallocated to Champions and Contenders the same day.

Smart bidding tiers

3 tiers

from one labeliser run

Different ROAS targets for different label groups.

Three campaigns, three label filters: Champions at tROAS 5.0, Contenders at 3.0, everything else at 2.0. Google's bidding learns faster when each campaign is internally homogeneous.

Questions

What teams ask first.

Impressions, clicks, cost, conversions, conversion value, per product (offer_id). Aggregated across the lookback window you select. Read-only access, we never touch your bids or budgets.
Free plan included

Find your Champions. Bury your Zombies.

Connect Google Ads, pick a lookback, run a sync. Your campaigns will know which SKUs are worth bidding harder on by tomorrow morning.

Have a question first?

Talk to a human who actually runs feeds.

Pricing edge cases, migrations, multi-brand setups. We'll answer in your inbox, not in a queue.

Get in touch