huny.log

기술 포스트 · 매체 데이터 알아보기

MMP raw export 컬럼 사전 — Appsflyer, Adjust, Branch가 주는 진짜 데이터

Appsflyer·Adjust·Branch raw export에는 어떤 컬럼이 있고 각 컬럼이 진짜로 무엇을 뜻하는지. media_source·campaign·af_status·reattribution·SKAdNetwork postback 컬럼까지 마케터·데이터팀이 매일 만나는 raw export를 한 글로 정리합니다.

앱 광고 운영자라면 MMP raw export는 매일 만나는 데이터입니다. 그런데 정작 컬럼이 100개가 넘어가는 그 CSV에서 무엇이 진짜 신뢰할 컬럼이고, 무엇이 보조 정보이고, 무엇이 NULL이 많은지를 한 곳에서 정리한 글은 의외로 드물어요. 이 글은 Appsflyer·Adjust·Branch 세 MMP의 raw export 컬럼을 한 표로 정리하고, 각 컬럼이 마케터의 의사결정에서 어떤 의미를 갖는지를 함께 풉니다. 이 글 하나 옆에 두고 raw 데이터 보면 80%의 질문이 끝납니다.

왜 raw export를 직접 봐야 하나

MMP UI 대시보드는 굉장히 잘 만들어졌습니다. 캠페인별 install·revenue·ROAS가 알아서 그려져요. 그런데 운영자가 다음 단계로 가려면 raw export를 직접 만져야 하는 순간이 옵니다.

  • “UI ROAS와 BI ROAS가 다르다, 어디서 깨졌나”
  • “MMM에 넣을 채널별 install·revenue 일자별 데이터”
  • “사내 CDP와 MMP 데이터를 user-level로 매칭”
  • “incrementality 분석을 위한 raw event 추출”
  • “View-through와 click-through를 분리해서 보고”

이 모든 분석의 1번 입력이 MMP raw export입니다. UI는 가공된 요약이라서 원하는 단위·정의로 못 자릅니다.

Appsflyer·Adjust·Branch raw export 컬럼 매핑 인포그래픽
세 MMP의 컬럼은 이름이 다르지만 같은 의미. media_source·campaign·attribution flag·reinstall·postback 5개 그룹으로 매핑하면 한 번에 보인다.

5초 요약 — 세 MMP의 컬럼 매핑 표

의미AppsflyerAdjustBranch
매체 이름media_sourcenetwork_namelast_attributed_touch_data_tilde_channel
캠페인campaigncampaign_name..._tilde_campaign
광고 그룹adset / af_adsetadgroup_name..._tilde_ad_set_name
소재af_adcreative_name..._tilde_ad_name
install 시각install_timeinstalled_atlast_attributed_touch_data_plus_timestamp
클릭 시각click_timeclick_timelast_attributed_touch_data_plus_click_timestamp
사용자 IDappsflyer_id + customer_user_idadid + user_idbranch_id + developer_identity
디바이스 IDidfa/idfv/gaididfa/gps_adididfa/google_advertising_id
매출revenuerevenue_usdlast_attributed_touch_data_plus_revenue
attribution 종류af_status(Organic/Non-Organic)trackerlast_attributed_touch_type
Reattributionis_retargeting + reattribution_statusis_reattributedlast_cta_view_timestamp
첫 설치인가is_first_sessionis_first_session(이벤트 type)

이 표 한 장으로 MMP 간 데이터 매핑 SQL의 90%가 결정됩니다.

Appsflyer 핵심 컬럼

Appsflyer가 글로벌 1위 MMP인 만큼 raw export 컬럼이 가장 풍부하고, 또 많아서 헷갈립니다. 자주 쓰는 컬럼 그룹을 분류해볼게요.

매체·캠페인 식별

  • media_source — 매체 (예: facebook_int, googleadwords_int, organic)
  • campaign / campaign_id — 캠페인
  • adset / adset_id — 광고 그룹
  • af_ad / af_ad_id — 소재
  • af_channel — 매체가 지정한 채널
  • af_keywords — 검색 광고의 키워드

Attribution 결과

  • af_status — Organic / Non-Organic. 가장 중요한 분류 컬럼
  • attribution_type — click_through / view_through / impression
  • match_type — referrer / probabilistic / id_matching
  • is_primary_attribution — 같은 install의 multiple touch 중 1차 attribution 여부

시간

  • install_time — 첫 설치 시각 (가장 중요)
  • event_time — 이 이벤트 시각
  • attributed_touch_time — 마지막 어트리뷰션 터치 시각
  • click_time — 마지막 클릭 시각

식별자

  • appsflyer_id — MMP가 만드는 device-level ID
  • customer_user_id — 광고주가 박는 사용자 ID (CDP 매칭용)
  • idfa / idfv / gaid — 디바이스 광고 ID
  • idfv — iOS는 ATT 동의 안 받으면 idfa는 NULL, idfv만 채워짐

매출과 이벤트

  • event_name — purchase, level_up, tutorial_complete 등 SDK가 보낸 이벤트
  • event_value — 이벤트 페이로드 JSON
  • revenue — 매출 (자사 통화)
  • revenue_in_selected_currency — 보고서 환산 통화의 매출

Adjust 핵심 컬럼

Adjust는 Appsflyer 대비 컬럼이 좀 더 깔끔하고 표준 OpenAPI 친화적입니다. 자주 쓰는 컬럼:

  • tracker — Adjust가 만든 deeplink 트래커 ID
  • network_name / campaign_name / adgroup_name / creative_name — 매체 계층
  • installed_at — 첫 설치 시각
  • click_time — 마지막 클릭 시각
  • impression_time — 마지막 view 시각 (view-through 시)
  • adid — Adjust device ID
  • idfa / idfv / gps_adid
  • user_id — 광고주가 박는 사용자 ID
  • revenue_usd — USD 변환된 매출
  • currency — 원본 통화
  • is_first_session — 첫 설치/재설치 여부
  • is_reattributed — reattribution 여부
  • engagement_type — click / impression / install

Adjust의 강점은 tracker 한 컬럼만 봐도 캠페인 전체 계층(매체·캠페인·광고그룹·소재)을 다 풀어낼 수 있다는 점입니다. 단일 키로 모든 매핑을 할 수 있어 SQL이 깔끔해요.

Branch 핵심 컬럼

Branch는 deeplink·attribution을 한 번에 다루는 회사라 컬럼 이름이 길고 nested합니다. 그런데 그만큼 한 이벤트의 attribution 맥락 전체가 한 row에 들어있어요.

  • last_attributed_touch_data_tilde_channel — 매체
  • last_attributed_touch_data_tilde_campaign — 캠페인
  • last_attributed_touch_data_tilde_ad_set_name — 광고 그룹
  • last_attributed_touch_data_tilde_ad_name — 소재
  • last_attributed_touch_data_plus_timestamp — 마지막 touch 시각
  • last_attributed_touch_data_plus_click_timestamp — 마지막 클릭 시각
  • last_attributed_touch_type — click / impression / referrer
  • last_attributed_touch_data_plus_revenue — 매출
  • branch_id — Branch device ID
  • developer_identity — 광고주 박은 사용자 ID
  • last_cta_view_timestamp — 마지막 CTA view 시각

Branch는 단일 row 안에 first touch / last touch 정보가 다 들어있어 multi-touch attribution을 한 SQL로 짤 수 있다는 게 강점입니다.

SKAdNetwork postback 컬럼

iOS 14.5 이후 attribution은 SKAdNetwork(SKAN) 기반 conversion value postback이 표준이 됐습니다. MMP raw에 추가로 들어오는 컬럼들이에요.

컬럼 의미AppsflyerAdjustBranch
Conversion valueconversion_value (0~63)conversion_valueconversion_value
Redownloadredownloadredownloadredownload
App versionsource_app_idsource_appapp_version
Postback 시각event_time (postback 도착 시각)postback_atpostback_received_at

SKAN 데이터는 다음 두 가지 특성이 있어 raw 처리할 때 주의가 필요해요.

  • 24~48시간 지연 후 도착 (lag)
  • 일정 수 이하의 install은 privacy threshold로 NULL (k-anonymity)
  • conversion value 6비트(0~63)에 자사 정의한 의미 매핑이 필요 (compressed value)

깊은 SKAN 다루는 skan-postback-decoding·ios-att-skadnetwork-aem에서 더 자세히 정리했으니 SKAN 운영하시면 같이 보시면 좋습니다.

Reinstall·Reattribution 컬럼이 가장 헷갈리는 자리

같은 user가 앱을 지웠다가 다시 설치하면 그건 새 install인가, 재설치인가. 이걸 어떻게 카운팅하느냐에 따라 ROAS가 달라집니다.

MMP의 룰:

  • 첫 설치 후 24시간 이내 재설치 → reinstall (is_first_session=true, is_reattributed=false)
  • 첫 설치 후 24시간 이상 후 재설치 → reattribution (is_first_session=false, is_reattributed=true)
  • 둘 다 새 install로 매체에 attribution은 됨

마케터 시선에서는 이걸 분리해서 봐야 해요.

  • is_first_session=true AND is_reattributed=false → 진짜 신규
  • is_reattributed=true → 재유입 (재마케팅 효과)

이걸 안 나누면 reattribution이 신규로 잡혀 ROAS가 부풀려져 보입니다.

환경 노이즈를 거르는 필터

raw export에는 자주 보이는 노이즈가 몇 가지 있습니다. 다음 필터를 기본으로 적용하고 분석을 시작하면 시간이 절약돼요.

  • attribution_type IS NOT NULL — attribution 실패 row 제외
  • media_source <> 'organic' — 광고 분석 시 organic 제외
  • is_first_session = true — 신규 설치만 본다면
  • app_version >= '최신 버전' — 구버전 데이터의 가짜 attribution 제외
  • event_time BETWEEN install_time AND install_time + INTERVAL '30 days' — 이상치 제외

사내 CDP와 매칭하는 키 우선순위

MMP 데이터를 사내 CDP·DW와 매칭할 때 어느 키를 쓸지 표준화가 필요합니다.

  1. customer_user_id (Appsflyer) / user_id (Adjust) / developer_identity (Branch) — 광고주가 박은 사내 ID. 가장 강함.
  2. idfa / gaid — 디바이스 ID. ATT 거부면 NULL.
  3. appsflyer_id / adid / branch_id — MMP device ID. 약하지만 유일.
  4. idfv — iOS 앱별 ID. 한 앱 안에서만 유효.

CDP를 운영한다면 사내 user_id를 MMP SDK 초기화 때 즉시 박는 게 표준입니다. 이걸 빠뜨리면 attribution은 잡혀도 CDP 매칭이 안 돼서 한 단계 더 분석을 할 수 없어요.

마치며

MMP raw export는 컬럼이 많지만 분류 매핑 한 번 해두면 SQL 짜는 게 단순해집니다. 위 표를 옆에 두고 새 분석을 시작할 때마다 컬럼 매핑 먼저 정리하시면 됩니다.

다음 글에서는 매체 자체 raw data — Meta·Google·TikTok·Naver export의 진짜 컬럼들 raw-data-meta-google-tiktok-naver로 이어집니다.

참고

매체 데이터 알아보기 카테고리의 다른 글

전체 보기 →