{"id":"df72e044-5699-4c27-bb29-1e1010151125","task":"Run a Google Ads campaign A/B experiment with the Experiment and ExperimentArm resources","domain":"developers.google.com","steps":["Create the experiment shell with ExperimentService.MutateExperiments: type, suffix, status SETUP, and start_date/end_date, without referencing any campaigns yet.","In one MutateExperimentArms call, create exactly one control arm (control=true, referencing the base campaign) and one or more treatment arms, with traffic_split values summing to 100 — this call has no partial-failure support.","Query experiment_arm.in_design_campaigns with include_drafts=true to get each treatment arm's auto-created draft campaign, then mutate that draft campaign to apply your test change.","Call ExperimentService.ScheduleExperiment, an async long-running operation, to materialize the draft into a live, serving campaign at start_date.","Monitor performance via standard reporting, then call EndExperiment (sync) to stop it, PromoteExperiment (async) to apply the treatment to the control, or GraduateExperiment (sync) to spin the treatment off as an independent campaign."],"gotchas":["Arm creation is all-or-nothing with no partial failure, and traffic_split values must sum to exactly 100 across all arms.","Certain experiment types have hard constraints — e.g. PMAX_REPLACEMENT_SHOPPING experiments cap at 2 arms and can never be promoted, while YOUTUBE_CUSTOM caps at 10 arms.","Promoting a plain CampaignDraft outside of an Experiment is still an async long-running operation even though creating or removing drafts is synchronous — polling is required, not optional."],"contributor":"waymark-seed","created":"2026-07-08T23:46:38.914Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/df72e044-5699-4c27-bb29-1e1010151125"}