Skip to content

feat(ads): disclose ads as "Ad" behind the ad_label experiment - #6379

Open
tsahimatsliah wants to merge 2 commits into
mainfrom
claude/ad-label-experiment
Open

feat(ads): disclose ads as "Ad" behind the ad_label experiment#6379
tsahimatsliah wants to merge 2 commits into
mainfrom
claude/ad-label-experiment

Conversation

@tsahimatsliah

@tsahimatsliah tsahimatsliah commented Jul 27, 2026

Copy link
Copy Markdown
Member

Ad cards name the advertiser under the creative ("Promoted by Vercel") and carry an "Advertise here" self-promo. This experiment hides the advertiser and discloses with a plain "Ad" instead, to measure what the disclosure wording does to ad CTR.

Flag

ad_label (string) — default control, so nothing changes until GrowthBook ramps it.

Arm Attribution "Advertise here"
control Promoted by {advertiser} shown
ad Ad shown
ad_only Ad removed from the feed cards

Measurement

No new instrumentation. The cards already emit the impression and click events built by adLogEvent with target_type: "ad", so CTR = ad clicks / ad impressions split by arm. Guardrails: revenue per mille, and the advertise here cta click rate that ad_only removes.

Scope

The label swap lives in the shared AdAttribution, so it also covers the signal card and the post sidebar widget. The "Advertise here" removal is scoped to AdGrid/AdList, where CTR is measured.

Three gaps are deliberate and left for a follow-up once the direction is picked:

  • AdAsComment builds its own "Promoted by {source}" string instead of using AdAttribution, so the flag does not reach it.
  • The signal card and sidebar widget print ad.company separately, so the advertiser is still named there.
  • The advertiser logo renders in every arm. Dropping it too would be a stronger "de-brand the ad" test.

Review

Storybook → Experiments → Ad label. Nine stories render every ad surface and card use case (no CTA, no referral link, network creative, long copy, matching tags, Plus subscriber) with all three arms side by side, plus an experiment brief and control/treatment reference pages.

Per-arm rendering needed a FeatureOverrides provider in the Storybook GrowthBook mock; the useConditionalFeature mock now reads the same overrides and is aliased like the provider, falling back to each flag's own default so existing stories are unaffected.

🤖 Generated with Claude Code

Preview domain

https://claude-ad-label-experiment.preview.app.daily.dev

tsahimatsliah and others added 2 commits July 27, 2026 16:45
Control names the advertiser under the creative ("Promoted by Vercel").
The treatments hide the advertiser and disclose with a plain "Ad", so we
can measure what the disclosure wording does to ad CTR.

Arms: control, ad (advertise link kept), ad_only (advertise link dropped
from the feed cards). Default stays control — GrowthBook ramps the arms.

CTR needs no new instrumentation: the cards already emit the impression
and click events built by adLogEvent with target_type "ad".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Every ad surface (feed grid + list, signal card, post sidebar card and
inline, ad as comment) and card use case (no CTA, no referral link,
network creative, long copy, matching tags, Plus) rendered per arm.

The GrowthBook mock gains a FeatureOverrides provider so one story can
pin a different flag value per subtree; the useConditionalFeature mock
reads the same overrides and is now aliased like the provider, falling
back to the flag's own default so existing stories are unaffected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
daily-webapp Ready Ready Preview Jul 27, 2026 1:56pm
storybook Building Building Preview Jul 27, 2026 1:56pm

Request Review

@capJavert capJavert left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First-pass review is clear: I found no blocking code issue, and the current CI checks are green. Holding the formal approval for the final reviewer.

@capJavert capJavert left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved after first-pass review; no blocking code issues found and CI was green.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants