Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Marketing analytics - UTM, attribution, CAC, ROAS, conversion tracking.
.claude/skills/marketing-analytics/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 392% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 228% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 237% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 342% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 268% | 0% |
https://example.com/landing?
utm_source=google # Trafik kaynagi (google, facebook, newsletter)
&utm_medium=cpc # Kanal tipi (cpc, email, social, organic)
&utm_campaign=spring_2026 # Kampanya adi
&utm_term=saas+analytics # Arama terimi (paid search)
&utm_content=hero_banner # Reklam varyanti (A/B test)| Parameter | Format | Ornekler | |-----------|--------|---------| | source | lowercase, platform adi | google, facebook, linkedin, newsletter | | medium | lowercase, kanal tipi | cpc, cpm, email, social, organic, referral | | campaign | snake_case, tarih dahil | spring_sale_2026, product_launch_q1 | | term | + ile ayrilmis | saas+analytics, project+management | | content | snake_case, varyant | hero_banner, sidebar_cta, email_v2 |
typescriptinterface UTMConfig { baseUrl: string; source: string; medium: string; campaign: string; term?: string; content?: string; } function buildUTMUrl(config: UTMConfig): string { const params = new URLSearchParams(); params.set("utm_source", config.source.toLowerCase()); params.set("utm_medium", config.medium.toLowerCase()); params.set("utm_campaign", config.campaign.toLowerCase().replace(/\s+/g, "_")); if (config.term) params.set("utm_term", config.term.toLowerCase()); if (config.content) params.set("utm_content", config.content.toLowerCase()); const separator = config.baseUrl.includes("?") ? "&" : "?"; return `${config.baseUrl}${separator}${params.toString()}`; } // UTM parametrelerini parse et ve kaydet function captureUTM(): UTMParams | null { const params = new URLSearchParams(window.location.search); const utm: UTMParams = { source: params.get("utm_source") || undefined, medium: params.get("utm_medium") || undefined, campaign: params.get("utm_campaign") || undefined, term: params.get("utm_term") || undefined, content: params.get("utm_content") || undefined, }; if (utm.source) { // First-touch ve last-touch ayri kaydet if (!localStorage.getItem("utm_first_touch")) { localStorage.setItem("utm_first_touch", JSON.stringify({ ...utm, timestamp: Date.now() })); } localStorage.setItem("utm_last_touch", JSON.stringify({ ...utm, timestamp: Date.now() })); return utm; } return null; }
| Model | Aciklama | Ne Zaman Kullan | |-------|----------|----------------| | First Touch | Ilk temas %100 kredi alir | Awareness kampanyalari | | Last Touch | Son temas %100 kredi alir | Direct response kampanyalari | | Linear | Tum temaslar esit kredi alir | Tum kanallari esit degerlendirme | | Time Decay | Son temaslara daha cok kredi | Uzun satis dongusu | | U-Shaped | Ilk ve son temas %40, orta %20 | Balanced B2B attribution | | W-Shaped | Ilk, lead, opportunity %30, geri kalan %10 | Full-funnel B2B | | Data-Driven | Algoritmik (Markov chain, Shapley) | Yeterli veri varsa (10K+ conversion) |
sql-- U-Shaped Attribution WITH touchpoints AS ( SELECT conversion_id, user_id, channel, touch_timestamp, ROW_NUMBER() OVER (PARTITION BY conversion_id ORDER BY touch_timestamp) AS touch_order, COUNT(*) OVER (PARTITION BY conversion_id) AS total_touches FROM marketing_touches WHERE conversion_id IS NOT NULL ), attributed AS ( SELECT conversion_id, channel, CASE WHEN total_touches = 1 THEN 1.0 WHEN total_touches = 2 THEN 0.5 WHEN touch_order = 1 THEN 0.4 -- first touch WHEN touch_order = total_touches THEN 0.4 -- last touch ELSE 0.2 / (total_touches - 2) -- middle touches END AS attribution_weight FROM touchpoints ) SELECT channel, ROUND(SUM(attribution_weight), 2) AS attributed_conversions, ROUND(SUM(attribution_weight * c.revenue), 2) AS attributed_revenue FROM attributed a JOIN conversions c ON a.conversion_id = c.id GROUP BY channel ORDER BY attributed_revenue DESC;
typescriptinterface TransitionMatrix { [fromState: string]: { [toState: string]: number; // probability }; } // Removal effect: Her kanalin conversion'a katki oranini hesapla function calculateRemovalEffect( matrix: TransitionMatrix, channels: string[] ): Record<string, number> { const baseConversionRate = simulateConversions(matrix, channels); const effects: Record<string, number> = {}; for (const channel of channels) { const withoutChannel = channels.filter(c => c !== channel); const reducedRate = simulateConversions(matrix, withoutChannel); effects[channel] = (baseConversionRate - reducedRate) / baseConversionRate; } // Normalize to sum to 1 const total = Object.values(effects).reduce((a, b) => a + b, 0); for (const channel of channels) { effects[channel] = effects[channel] / total; } return effects; }
typescriptinterface CACMetrics { totalMarketingSpend: number; // Toplam marketing harcamasi totalSalesSpend: number; // Toplam sales harcamasi (maas dahil) newCustomers: number; // Kazanilan musteri sayisi period: string; // "2026-Q1" } function calculateCAC(metrics: CACMetrics): { blendedCAC: number; paidCAC: number; organicCAC: number; } { const totalSpend = metrics.totalMarketingSpend + metrics.totalSalesSpend; return { blendedCAC: totalSpend / metrics.newCustomers, paidCAC: metrics.totalMarketingSpend / (metrics.newCustomers * 0.6), // %60 paid organicCAC: (metrics.totalSalesSpend * 0.3) / (metrics.newCustomers * 0.4), }; }
sqlSELECT channel, SUM(spend) AS total_spend, COUNT(DISTINCT conversion_user_id) AS new_customers, ROUND(SUM(spend) / NULLIF(COUNT(DISTINCT conversion_user_id), 0), 2) AS cac, ROUND(AVG(first_order_value), 2) AS avg_first_order FROM ( SELECT a.channel, a.spend, c.user_id AS conversion_user_id, c.revenue AS first_order_value FROM ad_spend a LEFT JOIN conversions c ON c.attributed_channel = a.channel AND c.conversion_date BETWEEN a.date AND a.date + INTERVAL '30 days' WHERE a.date >= CURRENT_DATE - INTERVAL '90 days' ) channel_data GROUP BY channel ORDER BY cac;
| Industry | Median CAC | Iyi CAC | Target LTV:CAC | |----------|-----------|---------|---------------| | SaaS B2B (SMB) | $200-500 | < $200 | 3:1+ | | SaaS B2B (Enterprise) | $5K-20K | < $5K | 5:1+ | | SaaS B2C | $20-100 | < $30 | 3:1+ | | E-commerce | $10-50 | < $15 | 3:1+ | | Fintech | $100-500 | < $100 | 4:1+ | | Marketplace | $50-200 | < $50 | 3:1+ |
typescriptfunction calculateROAS( revenue: number, adSpend: number ): { roas: number; roasPercentage: number; profitable: boolean } { const roas = revenue / adSpend; return { roas: Math.round(roas * 100) / 100, roasPercentage: Math.round(roas * 100), profitable: roas > 1, }; } // Hedef ROAS hesapla (break-even icin) function targetROAS(grossMargin: number): number { // Minimum ROAS = 1 / Gross Margin // %70 margin -> minimum 1.43 ROAS return Math.round((1 / grossMargin) * 100) / 100; }
sqlSELECT campaign_name, channel, SUM(impressions) AS impressions, SUM(clicks) AS clicks, ROUND(100.0 * SUM(clicks) / NULLIF(SUM(impressions), 0), 2) AS ctr_pct, SUM(spend) AS spend, SUM(conversions) AS conversions, ROUND(SUM(spend) / NULLIF(SUM(conversions), 0), 2) AS cost_per_conversion, SUM(revenue) AS revenue, ROUND(SUM(revenue) / NULLIF(SUM(spend), 0), 2) AS roas, ROUND(SUM(revenue) - SUM(spend), 2) AS profit FROM campaign_performance WHERE date >= CURRENT_DATE - INTERVAL '30 days' GROUP BY campaign_name, channel ORDER BY roas DESC;
| Platform | Ortalama ROAS | Iyi ROAS | Mukemmel ROAS | |----------|-------------|---------|-------------| | Google Search | 2:1 | 4:1 | 8:1+ | | Google Display | 0.5:1 | 1.5:1 | 3:1+ | | Facebook/Instagram | 1.5:1 | 3:1 | 6:1+ | | LinkedIn | 1:1 | 2.5:1 | 5:1+ | | TikTok | 1:1 | 2:1 | 4:1+ | | Email Marketing | 10:1 | 30:1 | 40:1+ |
typescriptinterface ConversionEvent { event_name: string; value: number; currency: string; conversion_type: "micro" | "macro"; attribution_window_days: number; } const conversionEvents: ConversionEvent[] = [ // Macro conversions (primary goals) { event_name: "purchase_completed", value: 0, currency: "USD", conversion_type: "macro", attribution_window_days: 30 }, { event_name: "subscription_started", value: 0, currency: "USD", conversion_type: "macro", attribution_window_days: 30 }, // Micro conversions (leading indicators) { event_name: "trial_started", value: 0, currency: "USD", conversion_type: "micro", attribution_window_days: 14 }, { event_name: "demo_requested", value: 50, currency: "USD", conversion_type: "micro", attribution_window_days: 7 }, { event_name: "email_subscribed", value: 5, currency: "USD", conversion_type: "micro", attribution_window_days: 7 }, ]; // Server-side conversion tracking async function trackConversion( event: ConversionEvent, userId: string, metadata: Record<string, unknown> ): Promise<void> { // 1. Internal analytics await analytics.track(event.event_name, { ...metadata, conversion_type: event.conversion_type, value: metadata.value || event.value, }); // 2. Facebook Conversions API await sendFacebookConversion(event, userId, metadata); // 3. Google Ads offline conversion await sendGoogleOfflineConversion(event, userId, metadata); }
sql-- Marketing funnel: Visit -> Lead -> MQL -> SQL -> Customer SELECT 'Visit' AS stage, COUNT(DISTINCT session_id) AS count, 100.0 AS pct FROM sessions WHERE date >= CURRENT_DATE - INTERVAL '30 days' UNION ALL SELECT 'Lead', COUNT(DISTINCT user_id), ROUND(100.0 * COUNT(DISTINCT user_id) / (SELECT COUNT(DISTINCT session_id) FROM sessions WHERE date >= CURRENT_DATE - INTERVAL '30 days'), 1) FROM leads WHERE created_at >= CURRENT_DATE - INTERVAL '30 days' UNION ALL SELECT 'MQL', COUNT(DISTINCT user_id), ROUND(100.0 * COUNT(DISTINCT user_id) / (SELECT COUNT(DISTINCT user_id) FROM leads WHERE created_at >= CURRENT_DATE - INTERVAL '30 days'), 1) FROM leads WHERE status = 'mql' AND created_at >= CURRENT_DATE - INTERVAL '30 days' UNION ALL SELECT 'SQL', COUNT(DISTINCT user_id), ROUND(100.0 * COUNT(DISTINCT user_id) / (SELECT COUNT(DISTINCT user_id) FROM leads WHERE status = 'mql' AND created_at >= CURRENT_DATE - INTERVAL '30 days'), 1) FROM leads WHERE status = 'sql' AND created_at >= CURRENT_DATE - INTERVAL '30 days' UNION ALL SELECT 'Customer', COUNT(DISTINCT user_id), ROUND(100.0 * COUNT(DISTINCT user_id) / (SELECT COUNT(DISTINCT user_id) FROM leads WHERE status = 'sql' AND created_at >= CURRENT_DATE - INTERVAL '30 days'), 1) FROM conversions WHERE date >= CURRENT_DATE - INTERVAL '30 days' ORDER BY CASE stage WHEN 'Visit' THEN 1 WHEN 'Lead' THEN 2 WHEN 'MQL' THEN 3 WHEN 'SQL' THEN 4 WHEN 'Customer' THEN 5 END;
| Metrik | Formul | Iyi Deger | |--------|--------|----------| | Bounce Rate | single_page_sessions / total_sessions | < %40 | | Conversion Rate | conversions / visitors | %3-5 (B2C), %2-3 (B2B) | | Time on Page | avg(exit_time - entry_time) | > 60 saniye | | Scroll Depth | avg(max_scroll_percentage) | > %60 | | CTA Click Rate | cta_clicks / visitors | > %5 | | Form Completion | form_submits / form_starts | > %30 |
typescriptinterface LandingPageTest { name: string; hypothesis: string; element: "headline" | "cta" | "hero_image" | "social_proof" | "pricing" | "layout"; control: string; treatment: string; primary_metric: string; traffic_split: number; duration_days: number; } const tests: LandingPageTest[] = [ { name: "headline_benefit_vs_feature", hypothesis: "Benefit-focused headline, feature-focused'a gore %15 daha yuksek conversion verir", element: "headline", control: "AI-Powered Analytics Dashboard", treatment: "Get Insights 10x Faster With AI", primary_metric: "cta_click_rate", traffic_split: 0.5, duration_days: 14, }, ];
| Metrik | Formul | Iyi Deger | Aksiyonlar | |--------|--------|----------|-----------| | Open Rate | opens / delivered | %20-30 | Subject line A/B test | | CTR | clicks / delivered | %2-5 | CTA ve icerik optimize | | CTOR | clicks / opens | %10-15 | Icerik kalitesini olc | | Unsubscribe Rate | unsubs / delivered | < %0.5 | Frekans ve segmentasyon | | Bounce Rate | bounces / sent | < %2 | Liste temizligi | | Conversion Rate | conversions / clicks | %1-5 | Landing page optimize | | Revenue per Email | total_revenue / delivered | Varies | Segmentasyon iyilestir |
sqlSELECT campaign_name, sent_at::date AS send_date, COUNT(*) AS sent, SUM(CASE WHEN delivered THEN 1 ELSE 0 END) AS delivered, SUM(CASE WHEN opened THEN 1 ELSE 0 END) AS opens, ROUND(100.0 * SUM(CASE WHEN opened THEN 1 ELSE 0 END) / NULLIF(SUM(CASE WHEN delivered THEN 1 ELSE 0 END), 0), 1) AS open_rate, SUM(CASE WHEN clicked THEN 1 ELSE 0 END) AS clicks, ROUND(100.0 * SUM(CASE WHEN clicked THEN 1 ELSE 0 END) / NULLIF(SUM(CASE WHEN delivered THEN 1 ELSE 0 END), 0), 1) AS ctr, SUM(CASE WHEN converted THEN 1 ELSE 0 END) AS conversions, SUM(revenue) AS total_revenue, ROUND(SUM(revenue) / NULLIF(SUM(CASE WHEN delivered THEN 1 ELSE 0 END), 0), 2) AS revenue_per_email FROM email_campaigns WHERE sent_at >= CURRENT_DATE - INTERVAL '90 days' GROUP BY campaign_name, send_date ORDER BY send_date DESC;
| Platform | Key Metrics | Engagement Formula | |----------|------------|-------------------| | Twitter/X | Impressions, Engagement Rate, Link Clicks | (likes + retweets + replies) / impressions | | LinkedIn | Impressions, CTR, Follower Growth | (likes + comments + shares + clicks) / impressions | | Instagram | Reach, Saves, Shares | (likes + comments + saves + shares) / followers | | TikTok | Views, Watch Time, Shares | (likes + comments + shares) / views | | YouTube | Views, Watch Time, CTR | (likes + comments) / views |
typescriptinterface SocialROI { platform: string; totalSpend: number; // paid + organic (time cost) impressions: number; engagements: number; websiteTraffic: number; conversions: number; revenue: number; } function calculateSocialROI(data: SocialROI): { cpm: number; // Cost per 1000 impressions cpe: number; // Cost per engagement cpc: number; // Cost per click (to website) cpa: number; // Cost per acquisition roi: number; // Return on Investment % } { return { cpm: (data.totalSpend / data.impressions) * 1000, cpe: data.totalSpend / data.engagements, cpc: data.totalSpend / data.websiteTraffic, cpa: data.totalSpend / data.conversions, roi: ((data.revenue - data.totalSpend) / data.totalSpend) * 100, }; }
| Metrik | Kaynak | Hedef | |--------|--------|-------| | Organic Traffic | Google Search Console / GA | +10% MoM | | Keyword Rankings | Ahrefs / SEMrush | Top 10 icin hedef keyword | | Click-Through Rate | Search Console | > %3 ortalama | | Domain Authority | Ahrefs / Moz | Rakiplerden yuksek | | Backlink Growth | Ahrefs | +5% MoM | | Core Web Vitals | PageSpeed Insights | LCP < 2.5s, CLS < 0.1, INP < 200ms | | Indexed Pages | Search Console | Sitemap'teki sayfa sayisina yakin | | Organic Conversion Rate | GA | > %2 |
typescriptinterface ContentScore { url: string; organic_traffic_30d: number; avg_position: number; ctr: number; conversions: number; backlinks: number; word_count: number; last_updated: string; } function scoreContent(content: ContentScore): { score: number; action: "keep" | "update" | "consolidate" | "remove"; } { let score = 0; // Traffic (0-30) if (content.organic_traffic_30d > 1000) score += 30; else if (content.organic_traffic_30d > 100) score += 20; else if (content.organic_traffic_30d > 10) score += 10; // Rankings (0-25) if (content.avg_position <= 3) score += 25; else if (content.avg_position <= 10) score += 15; else if (content.avg_position <= 20) score += 5; // Conversions (0-25) if (content.conversions > 10) score += 25; else if (content.conversions > 1) score += 15; else if (content.conversions > 0) score += 5; // Freshness (0-10) const daysSinceUpdate = (Date.now() - new Date(content.last_updated).getTime()) / 86400000; if (daysSinceUpdate < 90) score += 10; else if (daysSinceUpdate < 180) score += 5; // Backlinks (0-10) if (content.backlinks > 10) score += 10; else if (content.backlinks > 0) score += 5; let action: "keep" | "update" | "consolidate" | "remove"; if (score >= 70) action = "keep"; else if (score >= 40) action = "update"; else if (score >= 20) action = "consolidate"; else action = "remove"; return { score, action }; }
TOFU (Awareness) MOFU (Consideration) BOFU (Decision)
------------------- ---------------------- ------------------
Impressions Email subscribers Demo requests
Website visitors Content downloads Trial signups
Social followers Webinar attendees Quote requests
Blog readers Return visitors Free trial users
Newsletter opens Pricing page visitssqlSELECT channel, SUM(spend) AS spend, COUNT(DISTINCT visitor_id) AS visitors, COUNT(DISTINCT lead_id) AS leads, COUNT(DISTINCT customer_id) AS customers, ROUND(SUM(spend) / NULLIF(COUNT(DISTINCT visitor_id), 0), 2) AS cost_per_visit, ROUND(SUM(spend) / NULLIF(COUNT(DISTINCT lead_id), 0), 2) AS cost_per_lead, ROUND(SUM(spend) / NULLIF(COUNT(DISTINCT customer_id), 0), 2) AS cac, ROUND(100.0 * COUNT(DISTINCT lead_id) / NULLIF(COUNT(DISTINCT visitor_id), 0), 1) AS visit_to_lead_pct, ROUND(100.0 * COUNT(DISTINCT customer_id) / NULLIF(COUNT(DISTINCT lead_id), 0), 1) AS lead_to_customer_pct, SUM(customer_revenue) AS revenue, ROUND(SUM(customer_revenue) / NULLIF(SUM(spend), 0), 2) AS roas FROM marketing_data WHERE date >= CURRENT_DATE - INTERVAL '90 days' GROUP BY channel ORDER BY roas DESC;
| Anti-Pattern | Dogru Yol | |-------------|-----------| | UTM'siz kampanya | Her kampanyada tutarli UTM kullan | | Sadece last-touch attribution | Multi-touch modelleme yap | | CAC'i toplam baz al | Kanal bazli CAC hesapla | | ROAS'i revenue ile hesapla | Profit-based ROAS (POAS) kullan | | Vanity metrics raporu (impressions) | Conversion-focused metriklere odaklan | | Email herkese ayni icerik | Segmentasyon + kisisellesetirme | | SEO sadece keyword | Technical SEO + Content + Backlink | | Kanal silolari | Cross-channel attribution |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 17,167 | 12,889 | -25% | 1 | 1 | 0% | 3,730 | 9,105 | +144% | 0 | 0 | — |
case-12 | fail→fail | 15,301 | 17,937 | +17% | 1 | 1 | 0% | 2,985 | 10,266 | +244% | 0 | 0 | — |
case-02 | fail→fail | 14,638 | 9,871 | -33% | 1 | 1 | 0% | 2,801 | 8,307 | +197% | 0 | 0 | — |
case-03 | pass→pass | 9,233 | 8,176 | -11% | 1 | 1 | 0% | 2,036 | 7,948 | +290% | 0 | 0 | — |
case-04 | fail→pass | 9,109 | 12,071 | +33% | 1 | 1 | 0% | 1,784 | 8,780 | +392% | 0 | 0 | — |
case-05 | fail→fail | 7,941 | 7,709 | -3% | 1 | 1 | 0% | 1,604 | 7,807 | +387% | 0 | 0 | — |
case-06 | pass→pass | 16,974 | 15,279 | -10% | 1 | 1 | 0% | 3,759 | 9,569 | +155% | 0 | 0 | — |
case-07 | pass→pass | 9,679 | 9,122 | -6% | 1 | 1 | 0% | 2,210 | 8,166 | +270% | 0 | 0 | — |
case-08 | fail→fail | 16,599 | 17,005 | +2% | 1 | 1 | 0% | 3,503 | 9,149 | +161% | 0 | 0 | — |
case-09 | pass→pass | 11,616 | 9,400 | -19% | 1 | 1 | 0% | 2,591 | 8,387 | +224% | 0 | 0 | — |
case-10 | pass→pass | 14,765 | 7,237 | -51% | 1 | 1 | 0% | 3,072 | 7,775 | +153% | 0 | 0 | — |
case-11 | pass→pass | 11,965 | 6,275 | -48% | 1 | 1 | 0% | 2,259 | 7,341 | +225% | 0 | 0 | — |
case-13 | fail→pass | 13,926 | 6,318 | -55% | 1 | 1 | 0% | 2,207 | 7,238 | +228% | 0 | 0 | — |
case-14 | fail→pass | 11,895 | 2,573 | -78% | 1 | 1 | 0% | 1,964 | 6,609 | +237% | 0 | 0 | — |
case-15 | pass→pass | 14,445 | 9,171 | -37% | 1 | 1 | 0% | 1,994 | 7,947 | +299% | 0 | 0 | — |
case-16 | fail→pass | 8,009 | 3,571 | -55% | 1 | 1 | 0% | 1,516 | 6,705 | +342% | 0 | 0 | — |
case-17 | pass→pass | 12,339 | 9,151 | -26% | 1 | 1 | 0% | 2,450 | 8,070 | +229% | 0 | 0 | — |
case-18 | pass→pass | 11,048 | 2,423 | -78% | 1 | 1 | 0% | 2,027 | 6,528 | +222% | 0 | 0 | — |
case-19 | fail→pass | 10,940 | 4,077 | -63% | 1 | 1 | 0% | 1,873 | 6,893 | +268% | 0 | 0 | — |
case-20 | pass→pass | 11,361 | 11,007 | -3% | 1 | 1 | 0% | 1,895 | 7,897 | +317% | 0 | 0 | — |
case-21 | pass→pass | 12,243 | 12,682 | +4% | 1 | 1 | 0% | 2,587 | 9,009 | +248% | 0 | 0 | — |
case-22 | pass→pass | 23,535 | 21,938 | -7% | 1 | 1 | 0% | 5,234 | 11,132 | +113% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/29/2026 | +23% |
Other measured skills in the registry, with their headline benchmark lift.