Citeon
측정·전환·매출

성과형(rev-share) 마케팅 대행, 무엇을 합의해야 하나

김태오
김태오 · 그로스·퍼포먼스 리드

성과형(rev-share) 마케팅 대행 계약의 분쟁은 대부분 법적 해석이 아니라 측정 이질성에서 발생한다. 대행사가 GA4 목표 전환으로 집계한 수치와 광고주 결제 DB의 실결제 금액이 20~40% 괴리를 보이는 상황은 실무에서 흔하다. 수익 정의, 어트리뷰션 윈도우, 이벤트 발화 시점, 환불 처리 방식이 계약서가 아닌 픽셀 코드와 서버 로직 안에 묻혀 있기 때문이다. 계약서 서명 전에 기술 스펙을 먼저 합의해야 하는 이유다.

수익(Revenue) 정의를 코드 레벨에서 고정하라

계약서의 "매출의 X%" 문구는 기준이 정의되지 않으면 무의미하다. 아래 항목을 계약 부속서(Technical Specification Addendum)로 문서화해야 한다.

어트리뷰션 모델: 합의 없이는 수치가 없다

어트리뷰션 모델은 동일한 전환에 대해 서로 다른 크레딧 분배를 낳는다. 어느 모델을 쓸지 계약 시점에 고정하지 않으면 대행사는 자사에 유리한 모델을, 광고주는 불리한 모델을 사후에 주장하게 된다.

모델 대행사에 유리한 조건 광고주에 유리한 조건 기술 구현 복잡도
Last-click 대행사 채널이 라스트터치인 경우 직접 방문·브랜드 검색이 마지막일 경우 낮음
First-touch 대행사가 신규 유저 퍼스트터치를 주도하는 경우 브랜드 인지도가 이미 높은 경우 낮음
Data-driven (GA4 DDA) 멀티채널 기여 측정 가능 블랙박스 모델, 재현 불가 중간 (GA4 의존)
선형(Linear) 여러 터치포인트에 균등 분배 기여 낮은 채널도 동일 크레딧 수령 중간

서버사이드 이벤트 스키마를 계약 부속서로 고정하라

클라이언트사이드 픽셀(GA4 gtag, Meta Pixel)은 광고 차단기·브라우저 정책·SPA 라우팅 오류에 취약하다. rev-share 기준 이벤트는 반드시 서버에서 발화해야 하며, 이벤트 스키마 자체가 계약의 일부가 되어야 한다.

// 합의된 purchase 이벤트 스키마 (JSON Schema Draft-07)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "PurchaseEvent",
  "type": "object",
  "required": [
    "event_id", "user_id", "revenue_net",
    "currency", "recognized_at", "attribution_channel"
  ],
  "properties": {
    "event_id": {
      "type": "string",
      "description": "UUID v4 — 중복 발화 방지용 멱등 키"
    },
    "user_id": {
      "type": "string",
      "description": "내부 회원 식별자 (로그인 기준, 익명 세션 불가)"
    },
    "revenue_gross": {
      "type": "number",
      "description": "결제 금액 (VAT 포함, 환불 전)"
    },
    "revenue_net": {
      "type": "number",
      "description": "환불·결제 수수료 차감 후 금액 — rev-share 산정 기준"
    },
    "currency": {
      "type": "string",
      "enum": ["KRW", "USD"]
    },
    "refund_deadline_at": {
      "type": "string",
      "format": "date-time",
      "description": "환불 기간 종료 시각 (ISO 8601)"
    },
    "recognized_at": {
      "type": "string",
      "format": "date-time",
      "description": "수익 인식 시각 (= refund_deadline_at 이후)"
    },
    "attribution_channel": {
      "type": "string",
      "description": "합의된 채널명 (예: meta_cpc, google_brand_search, organic)"
    },
    "attribution_model": {
      "type": "string",
      "enum": ["last_click", "first_touch", "linear"]
    },
    "attribution_window_days": {
      "type": "integer",
      "description": "룩백 윈도우(일) — 계약 부속서 값과 동일해야 함"
    },
    "sku_ids": {
      "type": "array",
      "items": { "type": "string" },
      "description": "계약 포함 SKU 목록만 — 제외 SKU 포함 시 정산 무효"
    }
  }
}

이 스키마를 서버가 발화할 때 대행사에게도 동일한 이벤트 스트림(Webhook 또는 BigQuery 공유 뷰)을 실시간 제공하면 수치 불일치 분쟁을 대부분 예방할 수 있다.

감사(Audit) 절차와 데이터 접근 권한

흔한 함정: 광고 플랫폼 전환 수를 rev-share 기준으로 쓰는 오류

가장 빈번한 함정은 대행사가 Meta Ads Manager나 Google Ads의 전환 이벤트 수를 rev-share 정산 기준으로 제안하는 경우다. 광고 플랫폼 전환은 다음 이유로 실결제와 다르다.

올바른 처리법: rev-share 정산의 단일 진실은 광고주 결제 DB의 실결제 이벤트이어야 한다. 광고 플랫폼 전환 수치는 캠페인 최적화 모니터링용으로만 사용하고, 계약 정산에서는 서버사이드 이벤트 스키마 기준 결제 DB를 기준으로 삼도록 계약에 명기한다.

Q. 대행사가 서버사이드 이벤트 접근 자체를 거부한다면?

이는 방향이 반대로 설정된 경우다. 대행사가 요청하는 정보는 "광고주 서버에서 집계한 채널별 실결제 수"이지, 대행사 시스템에 광고주 DB를 직접 연결하는 것이 아니다. 읽기 전용 API 엔드포인트나 월간 집계 CSV 리포트로 충분하다. 반면 대행사가 광고 플랫폼 전환 수를 기준으로 고집한다면, 뷰스루 오버카운트·셀프서빙 어트리뷰션 구조를 계약 협상 자료로 제시하고, 제3자 MMP 중재 조항을 대안으로 제안한다.

Q. 정산 주기를 월 단위로 할 때 환불 처리 타이밍은 어떻게 맞추나?

두 가지 방식이 있다. 첫째, 환불 기간 후 인식: recognized_at을 환불 기간 종료 시점으로 설정하고 해당 월 정산에서 환불이 완료된 거래만 포함한다. 구현이 단순하나 정산이 최대 14~30일 지연된다. 둘째, 선정산 후 차감: 총결제 기준으로 월 정산 후 다음 달 정산에서 이전 달 환불액을 차감한다. 현금 흐름이 빠른 대신 차감 조항과 마이너스 정산 처리 방식을 계약에 명시해야 한다. 구독 서비스는 통상 전자를, 고가 일회성 구매 비중이 높은 서비스는 후자가 분쟁 위험이 낮다.

참고 자료

이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.

김태오
김태오 · 그로스·퍼포먼스 리드

AI 검색 유입을 전환·매출로 잇는 광고·어트리뷰션을 다룹니다. 숫자로 말하는 걸 좋아합니다.

내 사이트의 AI 검색 점수가 궁금하다면

30초 무료 진단으로 SEO·AEO·GEO 점수와 처방을 받아보세요.

무료 진단 시작
← 블로그 목록으로