[{"data":1,"prerenderedAt":1598},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fen\u002Fmarketing\u002Fcreative-operations-bidding-algorithm-variation-strategy":13},{"i18nKey":4,"paths":5},"marketing-005-2026-05",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fmarketing\u002Fcreative-operations-variation-strategie-fuer-bidding-algorithmen","\u002Fen\u002Fmarketing\u002Fcreative-operations-bidding-algorithm-variation-strategy","\u002Fes\u002Fmarketing\u002Fcreative-operations-variaciones-algoritmo-bidding","\u002Ffr\u002Fmarketing\u002Fstrategie-des-variations-pour-l-algorithme-d-encheres","\u002Fit\u002Fmarketing\u002Fcreative-operations-bidding-algoritmi-per-variations","\u002Fru\u002Fmarketing\u002Fcreative-operations-bidding-algoritmasina-beslenecek-variation-stratejisi","\u002Ftr\u002Fmarketing\u002Fcreative-operations-bidding-algoritmasina-beslenecek-variation-stratej",{"_path":7,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":1592,"_id":1593,"_source":1594,"_file":1595,"_stem":1596,"_extension":1597},"marketing",false,"","Creative Operations: Variation Strategy for the Bidding Algorithm","Creative testing architecture in Performance Max and Advantage+ campaigns: generating signals for algorithms, building variation systems, scaling winners.","2026-05-16",[21,22,23,24,25],"creative-operations","performance-max","advantage-plus","bidding-algorithm","creative-testing",8,"Roibase",{"type":29,"children":30,"toc":1584},"root",[31,39,46,51,56,72,78,83,88,93,563,569,574,579,707,712,717,723,728,733,759,772,778,783,842,847,1513,1519,1524,1568,1573,1578],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","In Google Performance Max and Meta Advantage+ campaigns, creative is no longer just messaging—it's the algorithm's learning material. Machine bidding power correlates directly with the richness of the variation set it ingests. Yet most teams still hand creative to the design department and wait for \"beautiful visuals.\" The result: campaigns starve for signal for two weeks, the algorithm gets stuck in narrow local optimization, CPA climbs. Creative operations—engineering creative production, test architecture, and signal feeding processes with discipline—breaks this cycle.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"creative-is-now-an-iteration-problem-not-a-design-problem",[44],{"type":37,"value":45},"Creative is now an iteration problem, not a design problem",{"type":32,"tag":33,"props":47,"children":48},{},[49],{"type":37,"value":50},"In automated campaign formats like Performance Max and Advantage+, creative has become a daily operation as critical as bid adjustment. Feeding a campaign three visuals plus five headlines and waiting \"14-day learning phase\" doesn't even build the minimum data pool the algorithm needs to make reasonable decisions. Google's own guidance recommends at least 4 asset groups per Performance Max campaign, each with 5–15 visuals plus 5 headline combinations—the reason is that algorithms need sufficient variety to balance exploration and exploitation.",{"type":32,"tag":33,"props":52,"children":53},{},[54],{"type":37,"value":55},"But the issue isn't just quantity. Without meaningful differences between creatives, the algorithm still spins in a narrow space. Five product photos shot from different angles are the same signal cluster to a machine. Instead, build variation across different value propositions (price vs. delivery vs. social proof), formats (static vs. carousel vs. video), and audience proxies (lifestyle vs. product-focused). Creative production must move from the designer's Adobe file into the growth team's template-by-variable matrix.",{"type":32,"tag":33,"props":57,"children":58},{},[59,61,70],{"type":37,"value":60},"In Roibase's ",{"type":32,"tag":62,"props":63,"children":67},"a",{"href":64,"rel":65},"https:\u002F\u002Fwww.roibase.com.tr\u002Fen\u002Fdijitalpazarlama",[66],"nofollow",[68],{"type":37,"value":69},"digital marketing",{"type":37,"value":71}," practice, we structure creative operations this way: weekly creative sprints, each sprint produces 8–12 new variations, each variation tests a hypothesis (angle shift, hook test, CTA iteration). Designers don't slow the process—Figma component libraries, variable sets, and bulk export accelerate it. A campaign can ingest 20+ unique creatives in 2 weeks, giving the algorithm enough variation to find the winning cluster by week two.",{"type":32,"tag":40,"props":73,"children":75},{"id":74},"signal-production-for-test-architecture-cohort-holdout",[76],{"type":37,"value":77},"Signal production for test architecture: cohort + holdout",{"type":32,"tag":33,"props":79,"children":80},{},[81],{"type":37,"value":82},"Producing creative variation isn't enough—you must organize it so the algorithm can learn from it. In Performance Max, each asset group works like a separate test cell, but if you just randomly distribute variations, you can't see which won because asset group performance stays in Google's black box. Instead, we build cohort-based test architecture: each period (e.g., two weeks) creates a new asset group, feeds that period's variation set into it, old winners stay in the \"control\" group. After two weeks, compare the new group's performance (ROAS, CVR, CPA) against control and scale winning variations.",{"type":32,"tag":33,"props":84,"children":85},{},[86],{"type":37,"value":87},"This structure pairs with Bayesian testing logic: each asset group generates its own distribution, posterior update computes instantly (you pull conversion and cost data via Google Ads API and calculate yourself). If a variation hits 95% confidence within seven days, move it immediately to the main budget asset group. If not, wait until day 14, then close that cohort. Instead of static \"campaign setup,\" you create a continuous signal pipeline.",{"type":32,"tag":33,"props":89,"children":90},{},[91],{"type":37,"value":92},"On Meta Advantage+, the mechanics differ slightly—asset-level performance appears in Meta's Ads Reporting interface, but at the breakdown level. Here holdout cells are more critical: to test new creatives, split into a test campaign (new creatives) vs. control campaign (old winners), allocating budget 20\u002F80. For one week, ensure both tap the same audience targeting (CBO on, placements auto, lookalike broad). On day seven, if the test campaign's CPA is 15%+ lower than control's, declare the new set a winner and migrate the control campaign to the new creative too.",{"type":32,"tag":94,"props":95,"children":99},"pre",{"className":96,"code":97,"language":98,"meta":16,"style":16},"language-python shiki shiki-themes github-dark","# Simple Bayesian winner calculation (once you pull conversions + cost from Google Ads API)\nimport numpy as np\nfrom scipy import stats\n\ndef bayesian_winner(conversions_a, cost_a, conversions_b, cost_b, prior_alpha=1, prior_beta=1):\n    # Beta distribution for conversion rate posterior\n    posterior_a = stats.beta(prior_alpha + conversions_a, prior_beta + (cost_a\u002F10 - conversions_a))\n    posterior_b = stats.beta(prior_alpha + conversions_b, prior_beta + (cost_b\u002F10 - conversions_b))\n    \n    # Monte Carlo: P(B > A)\n    samples = 10000\n    prob_b_wins = np.mean(posterior_b.rvs(samples) > posterior_a.rvs(samples))\n    \n    return prob_b_wins\n\n# Example: Asset Group A: 120 conversions, $2,400 spend vs. B: 95 conversions, $1,800 spend\nprob = bayesian_winner(120, 2400, 95, 1800)\nprint(f\"Probability B wins: {prob:.2%}\")\n# If > 0.95, B is the winner—shift budget to B\n","python",[100],{"type":32,"tag":101,"props":102,"children":103},"code",{"__ignoreMap":16},[104,116,142,165,175,224,233,290,341,350,359,377,405,413,427,435,444,500,554],{"type":32,"tag":105,"props":106,"children":109},"span",{"class":107,"line":108},"line",1,[110],{"type":32,"tag":105,"props":111,"children":113},{"style":112},"--shiki-default:#6A737D",[114],{"type":37,"value":115},"# Simple Bayesian winner calculation (once you pull conversions + cost from Google Ads API)\n",{"type":32,"tag":105,"props":117,"children":119},{"class":107,"line":118},2,[120,126,132,137],{"type":32,"tag":105,"props":121,"children":123},{"style":122},"--shiki-default:#F97583",[124],{"type":37,"value":125},"import",{"type":32,"tag":105,"props":127,"children":129},{"style":128},"--shiki-default:#E1E4E8",[130],{"type":37,"value":131}," numpy ",{"type":32,"tag":105,"props":133,"children":134},{"style":122},[135],{"type":37,"value":136},"as",{"type":32,"tag":105,"props":138,"children":139},{"style":128},[140],{"type":37,"value":141}," np\n",{"type":32,"tag":105,"props":143,"children":145},{"class":107,"line":144},3,[146,151,156,160],{"type":32,"tag":105,"props":147,"children":148},{"style":122},[149],{"type":37,"value":150},"from",{"type":32,"tag":105,"props":152,"children":153},{"style":128},[154],{"type":37,"value":155}," scipy ",{"type":32,"tag":105,"props":157,"children":158},{"style":122},[159],{"type":37,"value":125},{"type":32,"tag":105,"props":161,"children":162},{"style":128},[163],{"type":37,"value":164}," stats\n",{"type":32,"tag":105,"props":166,"children":168},{"class":107,"line":167},4,[169],{"type":32,"tag":105,"props":170,"children":172},{"emptyLinePlaceholder":171},true,[173],{"type":37,"value":174},"\n",{"type":32,"tag":105,"props":176,"children":178},{"class":107,"line":177},5,[179,184,190,195,200,206,211,215,219],{"type":32,"tag":105,"props":180,"children":181},{"style":122},[182],{"type":37,"value":183},"def",{"type":32,"tag":105,"props":185,"children":187},{"style":186},"--shiki-default:#B392F0",[188],{"type":37,"value":189}," bayesian_winner",{"type":32,"tag":105,"props":191,"children":192},{"style":128},[193],{"type":37,"value":194},"(conversions_a, cost_a, conversions_b, cost_b, prior_alpha",{"type":32,"tag":105,"props":196,"children":197},{"style":122},[198],{"type":37,"value":199},"=",{"type":32,"tag":105,"props":201,"children":203},{"style":202},"--shiki-default:#79B8FF",[204],{"type":37,"value":205},"1",{"type":32,"tag":105,"props":207,"children":208},{"style":128},[209],{"type":37,"value":210},", prior_beta",{"type":32,"tag":105,"props":212,"children":213},{"style":122},[214],{"type":37,"value":199},{"type":32,"tag":105,"props":216,"children":217},{"style":202},[218],{"type":37,"value":205},{"type":32,"tag":105,"props":220,"children":221},{"style":128},[222],{"type":37,"value":223},"):\n",{"type":32,"tag":105,"props":225,"children":227},{"class":107,"line":226},6,[228],{"type":32,"tag":105,"props":229,"children":230},{"style":112},[231],{"type":37,"value":232},"    # Beta distribution for conversion rate posterior\n",{"type":32,"tag":105,"props":234,"children":236},{"class":107,"line":235},7,[237,242,246,251,256,261,265,270,275,280,285],{"type":32,"tag":105,"props":238,"children":239},{"style":128},[240],{"type":37,"value":241},"    posterior_a ",{"type":32,"tag":105,"props":243,"children":244},{"style":122},[245],{"type":37,"value":199},{"type":32,"tag":105,"props":247,"children":248},{"style":128},[249],{"type":37,"value":250}," stats.beta(prior_alpha ",{"type":32,"tag":105,"props":252,"children":253},{"style":122},[254],{"type":37,"value":255},"+",{"type":32,"tag":105,"props":257,"children":258},{"style":128},[259],{"type":37,"value":260}," conversions_a, prior_beta ",{"type":32,"tag":105,"props":262,"children":263},{"style":122},[264],{"type":37,"value":255},{"type":32,"tag":105,"props":266,"children":267},{"style":128},[268],{"type":37,"value":269}," (cost_a",{"type":32,"tag":105,"props":271,"children":272},{"style":122},[273],{"type":37,"value":274},"\u002F",{"type":32,"tag":105,"props":276,"children":277},{"style":202},[278],{"type":37,"value":279},"10",{"type":32,"tag":105,"props":281,"children":282},{"style":122},[283],{"type":37,"value":284}," -",{"type":32,"tag":105,"props":286,"children":287},{"style":128},[288],{"type":37,"value":289}," conversions_a))\n",{"type":32,"tag":105,"props":291,"children":292},{"class":107,"line":26},[293,298,302,306,310,315,319,324,328,332,336],{"type":32,"tag":105,"props":294,"children":295},{"style":128},[296],{"type":37,"value":297},"    posterior_b ",{"type":32,"tag":105,"props":299,"children":300},{"style":122},[301],{"type":37,"value":199},{"type":32,"tag":105,"props":303,"children":304},{"style":128},[305],{"type":37,"value":250},{"type":32,"tag":105,"props":307,"children":308},{"style":122},[309],{"type":37,"value":255},{"type":32,"tag":105,"props":311,"children":312},{"style":128},[313],{"type":37,"value":314}," conversions_b, prior_beta ",{"type":32,"tag":105,"props":316,"children":317},{"style":122},[318],{"type":37,"value":255},{"type":32,"tag":105,"props":320,"children":321},{"style":128},[322],{"type":37,"value":323}," (cost_b",{"type":32,"tag":105,"props":325,"children":326},{"style":122},[327],{"type":37,"value":274},{"type":32,"tag":105,"props":329,"children":330},{"style":202},[331],{"type":37,"value":279},{"type":32,"tag":105,"props":333,"children":334},{"style":122},[335],{"type":37,"value":284},{"type":32,"tag":105,"props":337,"children":338},{"style":128},[339],{"type":37,"value":340}," conversions_b))\n",{"type":32,"tag":105,"props":342,"children":344},{"class":107,"line":343},9,[345],{"type":32,"tag":105,"props":346,"children":347},{"style":128},[348],{"type":37,"value":349},"    \n",{"type":32,"tag":105,"props":351,"children":353},{"class":107,"line":352},10,[354],{"type":32,"tag":105,"props":355,"children":356},{"style":112},[357],{"type":37,"value":358},"    # Monte Carlo: P(B > A)\n",{"type":32,"tag":105,"props":360,"children":362},{"class":107,"line":361},11,[363,368,372],{"type":32,"tag":105,"props":364,"children":365},{"style":128},[366],{"type":37,"value":367},"    samples ",{"type":32,"tag":105,"props":369,"children":370},{"style":122},[371],{"type":37,"value":199},{"type":32,"tag":105,"props":373,"children":374},{"style":202},[375],{"type":37,"value":376}," 10000\n",{"type":32,"tag":105,"props":378,"children":380},{"class":107,"line":379},12,[381,386,390,395,400],{"type":32,"tag":105,"props":382,"children":383},{"style":128},[384],{"type":37,"value":385},"    prob_b_wins ",{"type":32,"tag":105,"props":387,"children":388},{"style":122},[389],{"type":37,"value":199},{"type":32,"tag":105,"props":391,"children":392},{"style":128},[393],{"type":37,"value":394}," np.mean(posterior_b.rvs(samples) ",{"type":32,"tag":105,"props":396,"children":397},{"style":122},[398],{"type":37,"value":399},">",{"type":32,"tag":105,"props":401,"children":402},{"style":128},[403],{"type":37,"value":404}," posterior_a.rvs(samples))\n",{"type":32,"tag":105,"props":406,"children":408},{"class":107,"line":407},13,[409],{"type":32,"tag":105,"props":410,"children":411},{"style":128},[412],{"type":37,"value":349},{"type":32,"tag":105,"props":414,"children":416},{"class":107,"line":415},14,[417,422],{"type":32,"tag":105,"props":418,"children":419},{"style":122},[420],{"type":37,"value":421},"    return",{"type":32,"tag":105,"props":423,"children":424},{"style":128},[425],{"type":37,"value":426}," prob_b_wins\n",{"type":32,"tag":105,"props":428,"children":430},{"class":107,"line":429},15,[431],{"type":32,"tag":105,"props":432,"children":433},{"emptyLinePlaceholder":171},[434],{"type":37,"value":174},{"type":32,"tag":105,"props":436,"children":438},{"class":107,"line":437},16,[439],{"type":32,"tag":105,"props":440,"children":441},{"style":112},[442],{"type":37,"value":443},"# Example: Asset Group A: 120 conversions, $2,400 spend vs. B: 95 conversions, $1,800 spend\n",{"type":32,"tag":105,"props":445,"children":447},{"class":107,"line":446},17,[448,453,457,462,467,472,477,481,486,490,495],{"type":32,"tag":105,"props":449,"children":450},{"style":128},[451],{"type":37,"value":452},"prob ",{"type":32,"tag":105,"props":454,"children":455},{"style":122},[456],{"type":37,"value":199},{"type":32,"tag":105,"props":458,"children":459},{"style":128},[460],{"type":37,"value":461}," bayesian_winner(",{"type":32,"tag":105,"props":463,"children":464},{"style":202},[465],{"type":37,"value":466},"120",{"type":32,"tag":105,"props":468,"children":469},{"style":128},[470],{"type":37,"value":471},", ",{"type":32,"tag":105,"props":473,"children":474},{"style":202},[475],{"type":37,"value":476},"2400",{"type":32,"tag":105,"props":478,"children":479},{"style":128},[480],{"type":37,"value":471},{"type":32,"tag":105,"props":482,"children":483},{"style":202},[484],{"type":37,"value":485},"95",{"type":32,"tag":105,"props":487,"children":488},{"style":128},[489],{"type":37,"value":471},{"type":32,"tag":105,"props":491,"children":492},{"style":202},[493],{"type":37,"value":494},"1800",{"type":32,"tag":105,"props":496,"children":497},{"style":128},[498],{"type":37,"value":499},")\n",{"type":32,"tag":105,"props":501,"children":503},{"class":107,"line":502},18,[504,509,514,519,525,530,535,540,545,550],{"type":32,"tag":105,"props":505,"children":506},{"style":202},[507],{"type":37,"value":508},"print",{"type":32,"tag":105,"props":510,"children":511},{"style":128},[512],{"type":37,"value":513},"(",{"type":32,"tag":105,"props":515,"children":516},{"style":122},[517],{"type":37,"value":518},"f",{"type":32,"tag":105,"props":520,"children":522},{"style":521},"--shiki-default:#9ECBFF",[523],{"type":37,"value":524},"\"Probability B wins: ",{"type":32,"tag":105,"props":526,"children":527},{"style":202},[528],{"type":37,"value":529},"{",{"type":32,"tag":105,"props":531,"children":532},{"style":128},[533],{"type":37,"value":534},"prob",{"type":32,"tag":105,"props":536,"children":537},{"style":122},[538],{"type":37,"value":539},":.2%",{"type":32,"tag":105,"props":541,"children":542},{"style":202},[543],{"type":37,"value":544},"}",{"type":32,"tag":105,"props":546,"children":547},{"style":521},[548],{"type":37,"value":549},"\"",{"type":32,"tag":105,"props":551,"children":552},{"style":128},[553],{"type":37,"value":499},{"type":32,"tag":105,"props":555,"children":557},{"class":107,"line":556},19,[558],{"type":32,"tag":105,"props":559,"children":560},{"style":112},[561],{"type":37,"value":562},"# If > 0.95, B is the winner—shift budget to B\n",{"type":32,"tag":40,"props":564,"children":566},{"id":565},"format-diversity-static-carousel-video-collection",[567],{"type":37,"value":568},"Format diversity: static, carousel, video, collection",{"type":32,"tag":33,"props":570,"children":571},{},[572],{"type":37,"value":573},"Format variation is where algorithms extract the most signal. Testing the same message as static, video, and carousel teaches the machine different user behavior patterns. In Performance Max, video assets typically serve in Discovery and YouTube placements, static in Display—but you don't know which drives better ROAS, the algorithm does. If you don't give it options, it uses the default placement mix and misses the optimal allocation.",{"type":32,"tag":33,"props":575,"children":576},{},[577],{"type":37,"value":578},"Practically, structure the creative pipeline like this:",{"type":32,"tag":580,"props":581,"children":582},"table",{},[583,612],{"type":32,"tag":584,"props":585,"children":586},"thead",{},[587],{"type":32,"tag":588,"props":589,"children":590},"tr",{},[591,597,602,607],{"type":32,"tag":592,"props":593,"children":594},"th",{},[595],{"type":37,"value":596},"Format",{"type":32,"tag":592,"props":598,"children":599},{},[600],{"type":37,"value":601},"Production time",{"type":32,"tag":592,"props":603,"children":604},{},[605],{"type":37,"value":606},"Test time",{"type":32,"tag":592,"props":608,"children":609},{},[610],{"type":37,"value":611},"Win rate (Roibase avg.)",{"type":32,"tag":613,"props":614,"children":615},"tbody",{},[616,640,663,686],{"type":32,"tag":588,"props":617,"children":618},{},[619,625,630,635],{"type":32,"tag":620,"props":621,"children":622},"td",{},[623],{"type":37,"value":624},"Static (5 variations)",{"type":32,"tag":620,"props":626,"children":627},{},[628],{"type":37,"value":629},"2 days",{"type":32,"tag":620,"props":631,"children":632},{},[633],{"type":37,"value":634},"7 days",{"type":32,"tag":620,"props":636,"children":637},{},[638],{"type":37,"value":639},"40% (at least one winner usually emerges)",{"type":32,"tag":588,"props":641,"children":642},{},[643,648,653,658],{"type":32,"tag":620,"props":644,"children":645},{},[646],{"type":37,"value":647},"Carousel (3 sets, 3 cards each)",{"type":32,"tag":620,"props":649,"children":650},{},[651],{"type":37,"value":652},"3 days",{"type":32,"tag":620,"props":654,"children":655},{},[656],{"type":37,"value":657},"10 days",{"type":32,"tag":620,"props":659,"children":660},{},[661],{"type":37,"value":662},"25% (fewer winners, but lift is substantial when they do)",{"type":32,"tag":588,"props":664,"children":665},{},[666,671,676,681],{"type":32,"tag":620,"props":667,"children":668},{},[669],{"type":37,"value":670},"Video (15 sec, 3 variations)",{"type":32,"tag":620,"props":672,"children":673},{},[674],{"type":37,"value":675},"5 days",{"type":32,"tag":620,"props":677,"children":678},{},[679],{"type":37,"value":680},"14 days",{"type":32,"tag":620,"props":682,"children":683},{},[684],{"type":37,"value":685},"50% (winners drive ~20%+ cost reduction)",{"type":32,"tag":588,"props":687,"children":688},{},[689,694,698,702],{"type":32,"tag":620,"props":690,"children":691},{},[692],{"type":37,"value":693},"Collection (1 hero + 4 products)",{"type":32,"tag":620,"props":695,"children":696},{},[697],{"type":37,"value":629},{"type":32,"tag":620,"props":699,"children":700},{},[701],{"type":37,"value":634},{"type":32,"tag":620,"props":703,"children":704},{},[705],{"type":37,"value":706},"30% (strong for e-commerce)",{"type":32,"tag":33,"props":708,"children":709},{},[710],{"type":37,"value":711},"Video looks like 5 days, but this isn't professional shooting—it's template-based: stock footage + product shot + text overlay. Tools like CapCut and Canva already auto-assemble with AI. What matters isn't cinematography; it's a hook in the first three seconds and a clear CTA. Meta's own Creative Guidance looks at 3-second watch rate—below 50% means the video isn't working.",{"type":32,"tag":33,"props":713,"children":714},{},[715],{"type":37,"value":716},"With carousel, the critical point: each card carries an independent message. \"Card 1: product, Card 2: price, Card 3: delivery\" as sequential narrative doesn't generate signal for Meta's algorithm because users don't swipe past card one 80% of the time. Instead, each card should show a different value prop or SKU, so the algorithm infers: \"this user clicked card two, so they care about that feature.\"",{"type":32,"tag":40,"props":718,"children":720},{"id":719},"incrementality-measurement-winner-creative-or-audience-shift",[721],{"type":37,"value":722},"Incrementality measurement: winner creative or audience shift?",{"type":32,"tag":33,"props":724,"children":725},{},[726],{"type":37,"value":727},"The biggest trap interpreting creative test results: ROAS climbs after launching new creatives, you declare victory—but the algorithm just shifted to easier-to-convert audience segments; total conversion volume fell. Call this pseudo-winner. Block it with incrementality checks: as you test new creatives, confirm total conversions (not just ROAS) don't drop. If ROAS rises 20% but conversions fall 15%, the algorithm has narrowed focus to a sliver—a scaling liability long-term.",{"type":32,"tag":33,"props":729,"children":730},{},[731],{"type":37,"value":732},"Two methods:",{"type":32,"tag":734,"props":735,"children":736},"ol",{},[737,749],{"type":32,"tag":738,"props":739,"children":740},"li",{},[741,747],{"type":32,"tag":742,"props":743,"children":744},"strong",{},[745],{"type":37,"value":746},"Holdout geo test:",{"type":37,"value":748}," Split by state in the US (e.g., California + Texas get new creatives, Florida + New York keep old). After two weeks, check total conversion lift. If the new-creative geos show 10%+ more conversions, it's real lift.",{"type":32,"tag":738,"props":750,"children":751},{},[752,757],{"type":32,"tag":742,"props":753,"children":754},{},[755],{"type":37,"value":756},"Budget pacing check:",{"type":37,"value":758}," Test campaign gets 20% budget, control gets 80%. If the test campaign burns budget fast and hits \"limited by budget\" status while maintaining high ROAS, it's a real winner. If budget depletes slowly and ROAS stays high, the algorithm is circling a narrow segment.",{"type":32,"tag":33,"props":760,"children":761},{},[762,763,770],{"type":37,"value":60},{"type":32,"tag":62,"props":764,"children":767},{"href":765,"rel":766},"https:\u002F\u002Fwww.roibase.com.tr\u002Fen\u002Fppc",[66],[768],{"type":37,"value":769},"performance marketing",{"type":37,"value":771}," projects, we mandate geo-based incrementality tests—especially above $50K monthly budget. A simple Python script pulls conversion data from Google Ads API + BigQuery, splits by geo dimension, and runs a t-test. If we see 95%-confidence lift, the creative is a winner; otherwise, iteration continues.",{"type":32,"tag":40,"props":773,"children":775},{"id":774},"automation-figma-api-bulk-upload-pipeline",[776],{"type":37,"value":777},"Automation: Figma API + bulk upload pipeline",{"type":32,"tag":33,"props":779,"children":780},{},[781],{"type":37,"value":782},"Manual creative uploads don't scale. 20 variations × 3 formats = 60 assets; uploading each to Google Ads individually takes two hours. Instead, build an automation pipeline:",{"type":32,"tag":734,"props":784,"children":785},{},[786,796,806,832],{"type":32,"tag":738,"props":787,"children":788},{},[789,794],{"type":32,"tag":742,"props":790,"children":791},{},[792],{"type":37,"value":793},"Figma → Export:",{"type":37,"value":795}," Figma component library auto-exports via plugin (Figma REST API). Each variation becomes a JSON + PNG\u002FMP4 export.",{"type":32,"tag":738,"props":797,"children":798},{},[799,804],{"type":32,"tag":742,"props":800,"children":801},{},[802],{"type":37,"value":803},"Metadata injection:",{"type":37,"value":805}," Tag each variation in JSON (angle, format, audience proxy). These tags drive asset group assignment later.",{"type":32,"tag":738,"props":807,"children":808},{},[809,814,816,822,824,830],{"type":32,"tag":742,"props":810,"children":811},{},[812],{"type":37,"value":813},"Google Ads \u002F Meta bulk upload:",{"type":37,"value":815}," Use Google Ads API's ",{"type":32,"tag":101,"props":817,"children":819},{"className":818},[],[820],{"type":37,"value":821},"AssetService",{"type":37,"value":823}," endpoint for batch upload. On Meta, use Campaign Creation API; create ",{"type":32,"tag":101,"props":825,"children":827},{"className":826},[],[828],{"type":37,"value":829},"ad_creative",{"type":37,"value":831}," objects per creative.",{"type":32,"tag":738,"props":833,"children":834},{},[835,840],{"type":32,"tag":742,"props":836,"children":837},{},[838],{"type":37,"value":839},"Auto asset group assignment:",{"type":37,"value":841}," Automatically assign new variations to the asset group with lowest impressions (speeds up testing).",{"type":32,"tag":33,"props":843,"children":844},{},[845],{"type":37,"value":846},"This pipeline cuts upload from two hours to 15 minutes. You can even cron a job to auto-promote last week's winners to the main asset group every Monday morning.",{"type":32,"tag":94,"props":848,"children":852},{"className":849,"code":850,"language":851,"meta":16,"style":16},"language-javascript shiki shiki-themes github-dark","\u002F\u002F Figma REST API to export components (Node.js example)\nconst axios = require('axios');\nconst fs = require('fs');\n\nconst FIGMA_TOKEN = process.env.FIGMA_TOKEN;\nconst FILE_KEY = 'your-figma-file-key';\n\nasync function exportVariations() {\n  const response = await axios.get(`https:\u002F\u002Fapi.figma.com\u002Fv1\u002Ffiles\u002F${FILE_KEY}`, {\n    headers: { 'X-Figma-Token': FIGMA_TOKEN }\n  });\n  \n  const components = response.data.document.children\n    .filter(node => node.type === 'COMPONENT')\n    .map(node => ({ id: node.id, name: node.name }));\n\n  for (const comp of components) {\n    const imageUrl = await axios.get(`https:\u002F\u002Fapi.figma.com\u002Fv1\u002Fimages\u002F${FILE_KEY}?ids=${comp.id}&format=png`, {\n      headers: { 'X-Figma-Token': FIGMA_TOKEN }\n    });\n    \n    \u002F\u002F Download and upload to Google Cloud Storage\n    const image = await axios.get(imageUrl.data.images[comp.id], { responseType: 'arraybuffer' });\n    fs.writeFileSync(`.\u002Fexports\u002F${comp.name}.png`, image.data);\n  }\n}\n\nexportVariations();\n","javascript",[853],{"type":32,"tag":101,"props":854,"children":855},{"__ignoreMap":16},[856,864,901,934,941,972,997,1004,1027,1083,1110,1118,1126,1147,1194,1223,1230,1262,1333,1357,1366,1374,1383,1427,1473,1482,1491,1499],{"type":32,"tag":105,"props":857,"children":858},{"class":107,"line":108},[859],{"type":32,"tag":105,"props":860,"children":861},{"style":112},[862],{"type":37,"value":863},"\u002F\u002F Figma REST API to export components (Node.js example)\n",{"type":32,"tag":105,"props":865,"children":866},{"class":107,"line":118},[867,872,877,882,887,891,896],{"type":32,"tag":105,"props":868,"children":869},{"style":122},[870],{"type":37,"value":871},"const",{"type":32,"tag":105,"props":873,"children":874},{"style":202},[875],{"type":37,"value":876}," axios",{"type":32,"tag":105,"props":878,"children":879},{"style":122},[880],{"type":37,"value":881}," =",{"type":32,"tag":105,"props":883,"children":884},{"style":186},[885],{"type":37,"value":886}," require",{"type":32,"tag":105,"props":888,"children":889},{"style":128},[890],{"type":37,"value":513},{"type":32,"tag":105,"props":892,"children":893},{"style":521},[894],{"type":37,"value":895},"'axios'",{"type":32,"tag":105,"props":897,"children":898},{"style":128},[899],{"type":37,"value":900},");\n",{"type":32,"tag":105,"props":902,"children":903},{"class":107,"line":144},[904,908,913,917,921,925,930],{"type":32,"tag":105,"props":905,"children":906},{"style":122},[907],{"type":37,"value":871},{"type":32,"tag":105,"props":909,"children":910},{"style":202},[911],{"type":37,"value":912}," fs",{"type":32,"tag":105,"props":914,"children":915},{"style":122},[916],{"type":37,"value":881},{"type":32,"tag":105,"props":918,"children":919},{"style":186},[920],{"type":37,"value":886},{"type":32,"tag":105,"props":922,"children":923},{"style":128},[924],{"type":37,"value":513},{"type":32,"tag":105,"props":926,"children":927},{"style":521},[928],{"type":37,"value":929},"'fs'",{"type":32,"tag":105,"props":931,"children":932},{"style":128},[933],{"type":37,"value":900},{"type":32,"tag":105,"props":935,"children":936},{"class":107,"line":167},[937],{"type":32,"tag":105,"props":938,"children":939},{"emptyLinePlaceholder":171},[940],{"type":37,"value":174},{"type":32,"tag":105,"props":942,"children":943},{"class":107,"line":177},[944,948,953,957,962,967],{"type":32,"tag":105,"props":945,"children":946},{"style":122},[947],{"type":37,"value":871},{"type":32,"tag":105,"props":949,"children":950},{"style":202},[951],{"type":37,"value":952}," FIGMA_TOKEN",{"type":32,"tag":105,"props":954,"children":955},{"style":122},[956],{"type":37,"value":881},{"type":32,"tag":105,"props":958,"children":959},{"style":128},[960],{"type":37,"value":961}," process.env.",{"type":32,"tag":105,"props":963,"children":964},{"style":202},[965],{"type":37,"value":966},"FIGMA_TOKEN",{"type":32,"tag":105,"props":968,"children":969},{"style":128},[970],{"type":37,"value":971},";\n",{"type":32,"tag":105,"props":973,"children":974},{"class":107,"line":226},[975,979,984,988,993],{"type":32,"tag":105,"props":976,"children":977},{"style":122},[978],{"type":37,"value":871},{"type":32,"tag":105,"props":980,"children":981},{"style":202},[982],{"type":37,"value":983}," FILE_KEY",{"type":32,"tag":105,"props":985,"children":986},{"style":122},[987],{"type":37,"value":881},{"type":32,"tag":105,"props":989,"children":990},{"style":521},[991],{"type":37,"value":992}," 'your-figma-file-key'",{"type":32,"tag":105,"props":994,"children":995},{"style":128},[996],{"type":37,"value":971},{"type":32,"tag":105,"props":998,"children":999},{"class":107,"line":235},[1000],{"type":32,"tag":105,"props":1001,"children":1002},{"emptyLinePlaceholder":171},[1003],{"type":37,"value":174},{"type":32,"tag":105,"props":1005,"children":1006},{"class":107,"line":26},[1007,1012,1017,1022],{"type":32,"tag":105,"props":1008,"children":1009},{"style":122},[1010],{"type":37,"value":1011},"async",{"type":32,"tag":105,"props":1013,"children":1014},{"style":122},[1015],{"type":37,"value":1016}," function",{"type":32,"tag":105,"props":1018,"children":1019},{"style":186},[1020],{"type":37,"value":1021}," exportVariations",{"type":32,"tag":105,"props":1023,"children":1024},{"style":128},[1025],{"type":37,"value":1026},"() {\n",{"type":32,"tag":105,"props":1028,"children":1029},{"class":107,"line":343},[1030,1035,1040,1044,1049,1054,1059,1063,1068,1073,1078],{"type":32,"tag":105,"props":1031,"children":1032},{"style":122},[1033],{"type":37,"value":1034},"  const",{"type":32,"tag":105,"props":1036,"children":1037},{"style":202},[1038],{"type":37,"value":1039}," response",{"type":32,"tag":105,"props":1041,"children":1042},{"style":122},[1043],{"type":37,"value":881},{"type":32,"tag":105,"props":1045,"children":1046},{"style":122},[1047],{"type":37,"value":1048}," await",{"type":32,"tag":105,"props":1050,"children":1051},{"style":128},[1052],{"type":37,"value":1053}," axios.",{"type":32,"tag":105,"props":1055,"children":1056},{"style":186},[1057],{"type":37,"value":1058},"get",{"type":32,"tag":105,"props":1060,"children":1061},{"style":128},[1062],{"type":37,"value":513},{"type":32,"tag":105,"props":1064,"children":1065},{"style":521},[1066],{"type":37,"value":1067},"`https:\u002F\u002Fapi.figma.com\u002Fv1\u002Ffiles\u002F${",{"type":32,"tag":105,"props":1069,"children":1070},{"style":202},[1071],{"type":37,"value":1072},"FILE_KEY",{"type":32,"tag":105,"props":1074,"children":1075},{"style":521},[1076],{"type":37,"value":1077},"}`",{"type":32,"tag":105,"props":1079,"children":1080},{"style":128},[1081],{"type":37,"value":1082},", {\n",{"type":32,"tag":105,"props":1084,"children":1085},{"class":107,"line":352},[1086,1091,1096,1101,1105],{"type":32,"tag":105,"props":1087,"children":1088},{"style":128},[1089],{"type":37,"value":1090},"    headers: { ",{"type":32,"tag":105,"props":1092,"children":1093},{"style":521},[1094],{"type":37,"value":1095},"'X-Figma-Token'",{"type":32,"tag":105,"props":1097,"children":1098},{"style":128},[1099],{"type":37,"value":1100},": ",{"type":32,"tag":105,"props":1102,"children":1103},{"style":202},[1104],{"type":37,"value":966},{"type":32,"tag":105,"props":1106,"children":1107},{"style":128},[1108],{"type":37,"value":1109}," }\n",{"type":32,"tag":105,"props":1111,"children":1112},{"class":107,"line":361},[1113],{"type":32,"tag":105,"props":1114,"children":1115},{"style":128},[1116],{"type":37,"value":1117},"  });\n",{"type":32,"tag":105,"props":1119,"children":1120},{"class":107,"line":379},[1121],{"type":32,"tag":105,"props":1122,"children":1123},{"style":128},[1124],{"type":37,"value":1125},"  \n",{"type":32,"tag":105,"props":1127,"children":1128},{"class":107,"line":407},[1129,1133,1138,1142],{"type":32,"tag":105,"props":1130,"children":1131},{"style":122},[1132],{"type":37,"value":1034},{"type":32,"tag":105,"props":1134,"children":1135},{"style":202},[1136],{"type":37,"value":1137}," components",{"type":32,"tag":105,"props":1139,"children":1140},{"style":122},[1141],{"type":37,"value":881},{"type":32,"tag":105,"props":1143,"children":1144},{"style":128},[1145],{"type":37,"value":1146}," response.data.document.children\n",{"type":32,"tag":105,"props":1148,"children":1149},{"class":107,"line":415},[1150,1155,1160,1164,1170,1175,1180,1185,1190],{"type":32,"tag":105,"props":1151,"children":1152},{"style":128},[1153],{"type":37,"value":1154},"    .",{"type":32,"tag":105,"props":1156,"children":1157},{"style":186},[1158],{"type":37,"value":1159},"filter",{"type":32,"tag":105,"props":1161,"children":1162},{"style":128},[1163],{"type":37,"value":513},{"type":32,"tag":105,"props":1165,"children":1167},{"style":1166},"--shiki-default:#FFAB70",[1168],{"type":37,"value":1169},"node",{"type":32,"tag":105,"props":1171,"children":1172},{"style":122},[1173],{"type":37,"value":1174}," =>",{"type":32,"tag":105,"props":1176,"children":1177},{"style":128},[1178],{"type":37,"value":1179}," node.type ",{"type":32,"tag":105,"props":1181,"children":1182},{"style":122},[1183],{"type":37,"value":1184},"===",{"type":32,"tag":105,"props":1186,"children":1187},{"style":521},[1188],{"type":37,"value":1189}," 'COMPONENT'",{"type":32,"tag":105,"props":1191,"children":1192},{"style":128},[1193],{"type":37,"value":499},{"type":32,"tag":105,"props":1195,"children":1196},{"class":107,"line":429},[1197,1201,1206,1210,1214,1218],{"type":32,"tag":105,"props":1198,"children":1199},{"style":128},[1200],{"type":37,"value":1154},{"type":32,"tag":105,"props":1202,"children":1203},{"style":186},[1204],{"type":37,"value":1205},"map",{"type":32,"tag":105,"props":1207,"children":1208},{"style":128},[1209],{"type":37,"value":513},{"type":32,"tag":105,"props":1211,"children":1212},{"style":1166},[1213],{"type":37,"value":1169},{"type":32,"tag":105,"props":1215,"children":1216},{"style":122},[1217],{"type":37,"value":1174},{"type":32,"tag":105,"props":1219,"children":1220},{"style":128},[1221],{"type":37,"value":1222}," ({ id: node.id, name: node.name }));\n",{"type":32,"tag":105,"props":1224,"children":1225},{"class":107,"line":437},[1226],{"type":32,"tag":105,"props":1227,"children":1228},{"emptyLinePlaceholder":171},[1229],{"type":37,"value":174},{"type":32,"tag":105,"props":1231,"children":1232},{"class":107,"line":446},[1233,1238,1243,1247,1252,1257],{"type":32,"tag":105,"props":1234,"children":1235},{"style":122},[1236],{"type":37,"value":1237},"  for",{"type":32,"tag":105,"props":1239,"children":1240},{"style":128},[1241],{"type":37,"value":1242}," (",{"type":32,"tag":105,"props":1244,"children":1245},{"style":122},[1246],{"type":37,"value":871},{"type":32,"tag":105,"props":1248,"children":1249},{"style":202},[1250],{"type":37,"value":1251}," comp",{"type":32,"tag":105,"props":1253,"children":1254},{"style":122},[1255],{"type":37,"value":1256}," of",{"type":32,"tag":105,"props":1258,"children":1259},{"style":128},[1260],{"type":37,"value":1261}," components) {\n",{"type":32,"tag":105,"props":1263,"children":1264},{"class":107,"line":502},[1265,1270,1275,1279,1283,1287,1291,1295,1300,1304,1309,1314,1319,1324,1329],{"type":32,"tag":105,"props":1266,"children":1267},{"style":122},[1268],{"type":37,"value":1269},"    const",{"type":32,"tag":105,"props":1271,"children":1272},{"style":202},[1273],{"type":37,"value":1274}," imageUrl",{"type":32,"tag":105,"props":1276,"children":1277},{"style":122},[1278],{"type":37,"value":881},{"type":32,"tag":105,"props":1280,"children":1281},{"style":122},[1282],{"type":37,"value":1048},{"type":32,"tag":105,"props":1284,"children":1285},{"style":128},[1286],{"type":37,"value":1053},{"type":32,"tag":105,"props":1288,"children":1289},{"style":186},[1290],{"type":37,"value":1058},{"type":32,"tag":105,"props":1292,"children":1293},{"style":128},[1294],{"type":37,"value":513},{"type":32,"tag":105,"props":1296,"children":1297},{"style":521},[1298],{"type":37,"value":1299},"`https:\u002F\u002Fapi.figma.com\u002Fv1\u002Fimages\u002F${",{"type":32,"tag":105,"props":1301,"children":1302},{"style":202},[1303],{"type":37,"value":1072},{"type":32,"tag":105,"props":1305,"children":1306},{"style":521},[1307],{"type":37,"value":1308},"}?ids=${",{"type":32,"tag":105,"props":1310,"children":1311},{"style":128},[1312],{"type":37,"value":1313},"comp",{"type":32,"tag":105,"props":1315,"children":1316},{"style":521},[1317],{"type":37,"value":1318},".",{"type":32,"tag":105,"props":1320,"children":1321},{"style":128},[1322],{"type":37,"value":1323},"id",{"type":32,"tag":105,"props":1325,"children":1326},{"style":521},[1327],{"type":37,"value":1328},"}&format=png`",{"type":32,"tag":105,"props":1330,"children":1331},{"style":128},[1332],{"type":37,"value":1082},{"type":32,"tag":105,"props":1334,"children":1335},{"class":107,"line":556},[1336,1341,1345,1349,1353],{"type":32,"tag":105,"props":1337,"children":1338},{"style":128},[1339],{"type":37,"value":1340},"      headers: { ",{"type":32,"tag":105,"props":1342,"children":1343},{"style":521},[1344],{"type":37,"value":1095},{"type":32,"tag":105,"props":1346,"children":1347},{"style":128},[1348],{"type":37,"value":1100},{"type":32,"tag":105,"props":1350,"children":1351},{"style":202},[1352],{"type":37,"value":966},{"type":32,"tag":105,"props":1354,"children":1355},{"style":128},[1356],{"type":37,"value":1109},{"type":32,"tag":105,"props":1358,"children":1360},{"class":107,"line":1359},20,[1361],{"type":32,"tag":105,"props":1362,"children":1363},{"style":128},[1364],{"type":37,"value":1365},"    });\n",{"type":32,"tag":105,"props":1367,"children":1369},{"class":107,"line":1368},21,[1370],{"type":32,"tag":105,"props":1371,"children":1372},{"style":128},[1373],{"type":37,"value":349},{"type":32,"tag":105,"props":1375,"children":1377},{"class":107,"line":1376},22,[1378],{"type":32,"tag":105,"props":1379,"children":1380},{"style":112},[1381],{"type":37,"value":1382},"    \u002F\u002F Download and upload to Google Cloud Storage\n",{"type":32,"tag":105,"props":1384,"children":1386},{"class":107,"line":1385},23,[1387,1391,1396,1400,1404,1408,1412,1417,1422],{"type":32,"tag":105,"props":1388,"children":1389},{"style":122},[1390],{"type":37,"value":1269},{"type":32,"tag":105,"props":1392,"children":1393},{"style":202},[1394],{"type":37,"value":1395}," image",{"type":32,"tag":105,"props":1397,"children":1398},{"style":122},[1399],{"type":37,"value":881},{"type":32,"tag":105,"props":1401,"children":1402},{"style":122},[1403],{"type":37,"value":1048},{"type":32,"tag":105,"props":1405,"children":1406},{"style":128},[1407],{"type":37,"value":1053},{"type":32,"tag":105,"props":1409,"children":1410},{"style":186},[1411],{"type":37,"value":1058},{"type":32,"tag":105,"props":1413,"children":1414},{"style":128},[1415],{"type":37,"value":1416},"(imageUrl.data.images[comp.id], { responseType: ",{"type":32,"tag":105,"props":1418,"children":1419},{"style":521},[1420],{"type":37,"value":1421},"'arraybuffer'",{"type":32,"tag":105,"props":1423,"children":1424},{"style":128},[1425],{"type":37,"value":1426}," });\n",{"type":32,"tag":105,"props":1428,"children":1430},{"class":107,"line":1429},24,[1431,1436,1441,1445,1450,1454,1458,1463,1468],{"type":32,"tag":105,"props":1432,"children":1433},{"style":128},[1434],{"type":37,"value":1435},"    fs.",{"type":32,"tag":105,"props":1437,"children":1438},{"style":186},[1439],{"type":37,"value":1440},"writeFileSync",{"type":32,"tag":105,"props":1442,"children":1443},{"style":128},[1444],{"type":37,"value":513},{"type":32,"tag":105,"props":1446,"children":1447},{"style":521},[1448],{"type":37,"value":1449},"`.\u002Fexports\u002F${",{"type":32,"tag":105,"props":1451,"children":1452},{"style":128},[1453],{"type":37,"value":1313},{"type":32,"tag":105,"props":1455,"children":1456},{"style":521},[1457],{"type":37,"value":1318},{"type":32,"tag":105,"props":1459,"children":1460},{"style":128},[1461],{"type":37,"value":1462},"name",{"type":32,"tag":105,"props":1464,"children":1465},{"style":521},[1466],{"type":37,"value":1467},"}.png`",{"type":32,"tag":105,"props":1469,"children":1470},{"style":128},[1471],{"type":37,"value":1472},", image.data);\n",{"type":32,"tag":105,"props":1474,"children":1476},{"class":107,"line":1475},25,[1477],{"type":32,"tag":105,"props":1478,"children":1479},{"style":128},[1480],{"type":37,"value":1481},"  }\n",{"type":32,"tag":105,"props":1483,"children":1485},{"class":107,"line":1484},26,[1486],{"type":32,"tag":105,"props":1487,"children":1488},{"style":128},[1489],{"type":37,"value":1490},"}\n",{"type":32,"tag":105,"props":1492,"children":1494},{"class":107,"line":1493},27,[1495],{"type":32,"tag":105,"props":1496,"children":1497},{"emptyLinePlaceholder":171},[1498],{"type":37,"value":174},{"type":32,"tag":105,"props":1500,"children":1502},{"class":107,"line":1501},28,[1503,1508],{"type":32,"tag":105,"props":1504,"children":1505},{"style":186},[1506],{"type":37,"value":1507},"exportVariations",{"type":32,"tag":105,"props":1509,"children":1510},{"style":128},[1511],{"type":37,"value":1512},"();\n",{"type":32,"tag":40,"props":1514,"children":1516},{"id":1515},"scaling-the-winner-creative-refresh-cycle",[1517],{"type":37,"value":1518},"Scaling the winner: creative refresh cycle",{"type":32,"tag":33,"props":1520,"children":1521},{},[1522],{"type":37,"value":1523},"Indefinite use of a winning creative is wrong—creative fatigue is real. On Meta, average frequency hits 3.5+ after 14 days, CTR drops 30%+. Performance Max fatigues slower (placement diversity helps) but still declines by day 30. Run a creative refresh cycle:",{"type":32,"tag":1525,"props":1526,"children":1527},"ul",{},[1528,1538,1548,1558],{"type":32,"tag":738,"props":1529,"children":1530},{},[1531,1536],{"type":32,"tag":742,"props":1532,"children":1533},{},[1534],{"type":37,"value":1535},"Days 0–14:",{"type":37,"value":1537}," Test new variations, identify winner.",{"type":32,"tag":738,"props":1539,"children":1540},{},[1541,1546],{"type":32,"tag":742,"props":1542,"children":1543},{},[1544],{"type":37,"value":1545},"Days 14–30:",{"type":37,"value":1547}," Scale winner to 70% budget, keep control at 30%.",{"type":32,"tag":738,"props":1549,"children":1550},{},[1551,1556],{"type":32,"tag":742,"props":1552,"children":1553},{},[1554],{"type":37,"value":1555},"Days 30–45:",{"type":37,"value":1557}," Test micro-iterations of the winner (same angle, different visuals).",{"type":32,"tag":738,"props":1559,"children":1560},{},[1561,1566],{"type":32,"tag":742,"props":1562,"children":1563},{},[1564],{"type":37,"value":1565},"Days 45+:",{"type":37,"value":1567}," Retire winner, restart the cycle.",{"type":32,"tag":33,"props":1569,"children":1570},{},[1571],{"type":37,"value":1572},"This cycle ensures campaigns never depend on a single creative; signal flow stays continuous. Some verticals (fashion, gaming especially) need faster cycles—refresh every seven days. Detect this through live CTR drop: if a creative's last-3-days CTR falls 20%+ versus its first-3-days CTR, fatigue has started.",{"type":32,"tag":33,"props":1574,"children":1575},{},[1576],{"type":37,"value":1577},"Turning creative operations into a disciplined system means supplying the algorithm-driven campaign with its essential fuel. Moving variation production to weekly sprints, building test architecture on cohort principles, measuring incrementality, and automating with infrastructure—these four pillars feed the algorithm the material it needs to learn without interruption. Result: machine bidding finds optimal allocation by week two, CPA drops, scale becomes possible.",{"type":32,"tag":1579,"props":1580,"children":1581},"style",{},[1582],{"type":37,"value":1583},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":16,"searchDepth":144,"depth":144,"links":1585},[1586,1587,1588,1589,1590,1591],{"id":42,"depth":118,"text":45},{"id":74,"depth":118,"text":77},{"id":565,"depth":118,"text":568},{"id":719,"depth":118,"text":722},{"id":774,"depth":118,"text":777},{"id":1515,"depth":118,"text":1518},"markdown","content:en:marketing:creative-operations-bidding-algorithm-variation-strategy.md","content","en\u002Fmarketing\u002Fcreative-operations-bidding-algorithm-variation-strategy.md","en\u002Fmarketing\u002Fcreative-operations-bidding-algorithm-variation-strategy","md",1778940269387]