Gather all ads shipped last quarter into a single directory. Name them descriptively — q4_hero_30s.mp4, q4_retargeting_15s.mp4 — because filenames appear in the Mave prompt.
def generate_audit(ranked: list[dict]) -> str: table = format_metrics_table(ranked) highlights = format_chunk_highlights(ranked) prompt = f"""You are a senior creative strategist conducting a quarterly ad creative audit.## Ranked Ad Performance{table}## Per-Ad Chunk Highlights{highlights}## Your TaskProduce a quarterly creative audit:1. **Executive Summary** — 3-sentence overview of the quarter's creative performance.2. **Ranked Scorecard** — Table with commentary on each ad's strengths and weaknesses.3. **Elements to Keep** — Which creative elements (hooks, music, pacing, CTA placement, talent) appear in top ads? Be specific.4. **Elements to Change** — Which elements correlate with lower scores? Patterns, not individual ads.5. **Hook Analysis** — Compare the first chunk across all ads. Which opening strategies won?6. **Brand Recall Deep Dive** — Why did some ads score higher? Logo placement? Early mention?7. **Recommendations for Next Quarter** — 5 specific, actionable briefs for the creative team.Cite specific ads by name. Use the scores above as evidence.""" resp = requests.post(f"{BASE}/mave/chat", headers=HEADERS, json={"message": prompt}, timeout=180).json() if "error" in resp: raise Exception(resp["error"]["message"]) return resp["content"]
Run the same pipeline monthly with 2–4 ads. Track score trends by appending to a CSV:
import csvwith open("audit_trend.csv", "a", newline="") as f: writer = csv.DictWriter(f, fieldnames=["date", "ad", "overall", "emotion", "attention"]) for r in ranked: writer.writerow({"date": time.strftime("%Y-%m-%d"), "ad": r["name"], "overall": r["metrics"].get("overall_score"), "emotion": r["metrics"].get("emotional_impact"), "attention": r["metrics"].get("attention_score")})
Filter by ad type
Separate brand-awareness from performance/retargeting ads — different goals shouldn’t share a ranking scale.
brand_ads = [r for r in results if "brand" in r["name"].lower()]perf_ads = [r for r in results if "retarget" in r["name"].lower() or "promo" in r["name"].lower()]brand_report = generate_audit(rank_results(brand_ads))perf_report = generate_audit(rank_results(perf_ads))
Add Focus Group validation for top and bottom
Take #1 and last-place ads into a Focus Group to validate scores with simulated audience reactions.
Webhook instead of polling
Pass webhook_url when creating analyses. Mavera POSTs to your endpoint on completion.
For deeper audits, include per-chunk engagement curves in the Mave prompt.
def format_timeline(results): return "\n".join( f"- {r['name']}: [{', '.join(f'{c.get(\"start_time\", 0)}s:{c.get(\"engagement\", 0)}' for c in r['metrics'].get('chunks', []))}]" for r in results )
Start with your 4 most important ads to validate the pipeline at lower cost. Scale to the full quarter once you trust the scoring.
Video Analysis cost scales with video length. A 60-second ad costs ~2.5× a 15-second ad. If budget-constrained, trim videos to the first 30 seconds before upload.