All Stories
2026-09-17•4 min read

Advertising · CLIP · Visual Search · TableModel · Multimodal AI · Pixeltable Cloud · Creative

AdRadar: Creative Fatigue and Copycat Search Without a Tagging Farm

Ingest ad images (and optional video), read the copy, transcribe the voiceover, score fatigue from spend and days. CLIP finds lookalikes. Not a trained fatigue model.

Pierre Brunelle

Pierre Brunelle

Pixeltable Team

View as Markdown

Summary: AdRadar is the media-buying loop: a creative image (and optional video) becomes readable copy, a voiceover transcript, a fatigue flag from spend and age, and a CLIP index for lookalikes. You do not run OCR, Whisper, a scoring spreadsheet, and Pinecone as four products. You declare Ads. pip install pixeltable.

The Product#

  • Ingest creative_image with optional creative_video
  • Store spend, impressions, conversions, active_days
  • Read on-image copy with Gemini — not a fake OCR product
  • Flag creatives that have been live too long with a weak conversion rate
  • Drop a competitor screenshot; return nearest ads

SKU shop-the-look is SnapCatalog. This post is the same CLIP-on-image index with campaign telemetry on the row.

The Stitch You Delete#

A folder of exports from the ad account. A VLM batch for copy. Whisper for video ads. A sheet that divides conversions by impressions. Embeddings in a sidecar keyed by ad_id. Pixeltable is the creative row those joints were reconciling in ops.

The Receipt#

python

fatigue_risk is arithmetic on columns you already store — days live and conversion rate — not a trained fatigue model we pretend to ship. Gemini reads the pixels for copy. CLIP on the image is the copycat path, same embedding= form as SnapCatalog. Same file on Cloud: db → schema → service.

What This Is Not#

Not Meta Ads Manager. Not a bid optimizer. Spend truth stays in the ad account. Not an OCR vendor. Not PixelSearch as a hosted consumer UI.

People Also Ask#

Image-only ads? Leave creative_video null. Voiceover is empty; the image path still runs.

Why not a second MiniLM index on copy? You can add one. This receipt keeps CLIP on the pixels so lookalikes do not depend on OCR quality.

How do I go to Cloud? Same app.py. PIXELTABLE_API_KEY, pxt://org:db, then pxt db update → pxt schema update → pxt service update.

Is this an AI automation workflow? Yes. Insert the creative; copy, fatigue arithmetic, and CLIP run as columns. The category is AI automation workflow.

Score the Row, Search the Pixels#

Declare the creative. Apply the file. Insert the JPEG. Query HIGH and lookalikes. Keep the catalog. Delete the tagging farm.

Declarative. Multimodal. Incremental.

One Python file for tables, indexes, and HTTP. Start locally, or sign up for Cloud.

Get started

Docs quickstart · 10-minute tutorial · GitHub · Discord