[Beta機能]Data Locker|AppsFlyer Webアトリビューションのレポート出力

概要:Data LockerからAppsFlyer Webアトリビューションのデータを2種類のレポート形式で出力できます。Webサイトのパフォーマンスを目的に応じた粒度で分析できます。エンドユーザーイベントレポートはすべての訪問およびイベントの分析に、コンバージョンレポートは初回訪問、再訪問、ユーザー獲得イベントなど、コンバージョンの起点となったイベントの集計およびアトリビューション分析に利用します。

 重要

Data LockerでAppsFlyer Webアトリビューションのレポートを利用するには、Data Lockerの契約が必要です。

AppsFlyer Webアトリビューションレポートについて

Data Lockerでは、AppsFlyer Webアトリビューション向けにエンドユーザーイベントコンバージョンの2種類のレポートを提供しています。それぞれ用途が異なります。

  • Webエンドユーザーイベントレポートは、Webサイト上のアクティビティを分析するための主要なレポートです。
    • すべてのWebイベントおよびWeb訪問が含まれます。
    • すべての訪問は、アトリビューション済みのSESSIONとして記録されます。
    • 訪問単位およびイベント単位での分析に適しています。
  • コンバージョンレポートは、コンバージョン単位で分析する場合に適しています。コンバージョンとは、マーケティング成果をいつ、どのように紐づけさせるかを決定するアトリビューションアンカー(成果紐づけの起点となるタッチポイント)です。具体的には以下が含まれます:
    • 初回訪問(ユーザーが初めてWebサイトへアクセスした場合)
    • 再訪問(非オーガニック広告へのエンゲージメント後にユーザーが再訪した場合)
    • ユーザー獲得イベント(会員登録や初回入金など、ユーザー獲得を示すカスタムイベント)
  • その後に発生するすべてのユーザーイベントは、これらのコンバージョンに紐づけられ、対応するキャンペーン情報を引き継ぎます。

レポート項目

各レポートに含まれる項目については、以下のサンプルをダウンロードして確認できます。

サンプルレポートには、利用可能なすべてのレポート項目とその値が含まれています。各項目の定義については、項目一覧を参照してください。

レポート作成タイミングとデータの更新頻度

以下では、新しいデータがいつ追加されるか、およびイベントがレポートへ反映されるタイミングについて説明します。

  • レポートの作成頻度:新しいデータは1時間ごとに追加されます。
  • データの更新頻度:イベントは通常、発生から2~3時間以内にレポートへ反映されます。

各バッチ処理は以下のように動作します:

  • 1回のバッチ処理では、1時間30分分のイベントを処理します。
  • このうち最初の1時間分のイベントのみがアトリビューション対象となります。
  • 残り30分間は、アトリビューション済みイベントへCustomer User ID(CUID)を付与するためだけに使用されます。
  • 直近30分間に発生したイベントはまだアトリビューションされず、次回のバッチ処理で処理されます。

イベントはいつレポートへ反映されますか?

イベントは、バッチ処理が完了した後にレポートへ出力されます。例えば、08:00~09:00に発生したイベントは、10:00のバッチでアトリビューションされ、11:00のバージョンレポートに反映されます。

例:AM10:00のバッチ処理の内容

日付 レポート利用可能時刻 アトリビューション対象となるWebイベント(イベント発生時刻) CUID付与のために処理されるWebイベント
2026-01-28 11:00 08:00 – 09:00 09:00 – 09:30
2026-01-28 12:00 09:00 – 10:00 10:00 – 10:30
2026-01-28 13:00 10:00 – 11:00 10:00 – 11:30

クラウドストレージからのレポートデータへのアクセス

クラウドストレージ内のレポートデータへのアクセス方法については、「Data Lockerのフォルダ構造」を参照してください。

BI開発者向けの考慮事項

Webとモバイルの主な違い

Webアトリビューションは、識別子およびデータの取り扱いの両方において、モバイルアトリビューションとは異なります。データの正確性を高めるため、クエリでは以下のフィルターおよびベストプラクティスを適用してください。

項目 モバイル Web
プラットフォームフィルター platform = 'IOS' または platform = 'ANDROID’ platform = 'WEBSITE'
ユーザー識別子(値) appsflyer_id(デバイスベース) appsflyer_id_value(Cookieベース)
識別子の種類 デバイスによって異なる appsflyer_id_typeは常にweb_id
ユーザー獲得イベント Install 初回訪問(First Visit)がデフォルトですが、ユーザー獲得イベントはカスタマイズ可能
リエンゲージメント RE-ENGAGEMENT REVISIT
リアトリビューション 対応 非対応(Webではユーザー獲得と再訪問のみ)
アプリID App ID(例:id123456789 接頭辞のあるドメイン(例:website-www.example.com

どのテーブルを使用すべきか

エンドユーザーイベントレポートは、ほとんどの分析用途に適しています。このレポートには、すべてのWebイベントとWeb訪問が含まれています。また、すべてのWeb訪問はアトリビューション済みのSESSIONとして記録されるため、訪問単位およびイベント単位の分析における主要なデータソースとなります。

一方、コンバージョンのテーブルは、重複したイベントレコードを含めずに、初回訪問、再訪問、およびユーザー獲得を集計したい場合に適しています。

利用目的 使用するテーブル 理由
訪問数/セッション数を集計する end_user_events 各行がセッションまたはイベントを表すため
一意のコンバージョン数を集計する conversions 重複レコードを排除できるため
アプリ内イベントを分析する end_user_eventsend_user_event_type = 'IN_APP' イベント名を持つのはアプリ内イベントのみであるため

クエリフィルターの適用

ローデータを正確に分析するため、以下のフィルターを適用してください。これらを適用しない場合、重複レコードや異なるプラットフォームのデータが混在し、正確な集計結果が得られません。

  • プラットフォームでフィルターする(必須):Web由来のデータのみを対象とし、モバイル、PC、CTVのデータを除外するため、以下の条件を指定してください:WHERE platform = 'WEBSITE'
  • アトリビューションの帰属でフィルターする(必須):AppsFlyerでは、同じユーザーアクションがend_user_eventsに2回記録される場合があります。 これは、レポートビューによって異なるアトリビューションを付与できるためです。

    この状況は、ユーザーに以下の両方が存在する場合に発生します:

    • 元のユーザー獲得(UA)経由の流入
    • その後のリエンゲージメント経由の流入

    この場合、AppsFlyerは同じイベントについて2つのレコードを書き込みます。

    • Primary Attribution:イベントを、最も直近のマーケティング接点へ紐づけます。これは統合ビューとリターゲティングビューで使用されます。

      end_user_eventsの重複集計を防ぐため、通常は以下の条件でPrimary Attributionのみを取得してください:

      WHERE platform = 'WEBSITE'
        AND is_primary_attribution = true
    • Secondary Attribution:イベントを元のユーザー獲得(UA)へアトリビューションします。ユーザー獲得ビューでLTVを分析する際に使用されます。

      同じイベントがPrimary AttributionとSecondary Attributionの2つのレコードとして保存されるため、フィルターを指定せずに集計すると重複カウントになります。

      以下のクエリを、BigQueryなどのBIツールでWebアトリビューションデータを分析する際のテンプレートとして利用してください。

  • コンバージョンタイプでフィルターする(任意):キャンペーン種別ごとに分析する場合は、以下の条件を指定します: WHERE conversion_type = 'USER_ACQUISITION' または WHERE conversion_type = 'RETARGETING'

フィルター一覧

フィルター SQL条件 利用シーン
プラットフォーム指定 WHERE platform = 'WEBSITE' Web由来のデータのみを対象とし、他プラットフォームのデータを除外します。
統合ビュー(重複防止) WHERE is_primary_attribution = true AND platform = 'WEBSITE' 元のUAキャンペーンよりもリターゲティングキャンペーンへの成果紐づけを優先します。重複を避けた一般的なレポートに使用します。
リターゲティングビューのみ WHERE conversion_type = 'RETARGETING' AND platform = 'WEBSITE' リターゲティングキャンペーンのみを分析する場合に使用します。
ユーザー獲得ビューのみ WHERE conversion_type = 'USER_ACQUISITION' AND platform = 'WEBSITE' 初回訪問に紐づくイベントのみを分析するユーザー獲得レポートで使用します。

エンドユーザーの識別と集計

AppsFlyer Webアトリビューションのローデータでは、エンドユーザーが以下の2つの異なる識別子で表示される場合があります。

  • customer_user_id:お客様が設定する安定した識別子です。通常、ログイン済みユーザーに使用されます。
  • appsflyer_id_value:CookieベースのIDで、時間の経過とともに失効する場合があります。

ユニークユーザーを正しく識別し、ユーザーレベルの指標を計算するには、必ず以下を使用してください。

COALESCE(customer_user_id, appsflyer_id_value)

仕組みは以下の通りです。

  • customer_user_id が存在する場合、AppsFlyerはそれを使用します(安定した識別子であるため優先されます)。
  • 存在しない場合、AppsFlyerはappsflyer_id_valueへフォールバックします。

以下を行う場合は、必ず COALESCE(customer_user_id, appsflyer_id_value) を使用してください。

  • ユニークユーザー数を集計する
  • ユーザー単位でグループ化する
  • 特定のユーザーでフィルタリングする
  • ユーザー単位でテーブルを結合する
  • ユーザーレベルの指標を計算する

例:ユニークユーザー数を集計する

SELECT 
  COUNT(DISTINCT COALESCE(customer_user_id, appsflyer_id_value)) AS unique_users
FROM `end_user_events`
WHERE platform = 'WEBSITE'
  AND is_primary_attribution = TRUE

オーガニックトラフィックと非オーガニックトラフィック

is_organicのフィールドを使用します:

トラフィックタイプ フィルタ
オーガニック is_organic = true
非オーガニック is_organic = false

空の値の扱い

データ型 空の値
文字列 ''(空文字列)
数値 NULL

クエリ例

1.メディアソース別の総訪問数(過去7日間)

各メディアソースにアトリビューションされたWebセッション数を集計します。

SELECT media_source, COUNT(*) AS total_visits
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND platform = 'WEBSITE'
  AND unified_app_id = 'website-example.com'
  AND is_primary_attribution = true
  AND end_user_event_type = 'SESSION'
GROUP BY media_source
ORDER BY total_visits DESC

2.キャンペーン別の初回訪問と再訪問

SELECT campaign_name, conversion_name, COUNT(*) AS conversion_count
FROM conversions
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND platform = 'WEBSITE'
  AND unified_app_id = 'website-example.com'
  AND conversion_name IN ('FIRST_VISIT', 'REVISIT')
GROUP BY campaign_name, conversion_name
ORDER BY conversion_count DESC

3.イベント名別の集計(アプリ内イベントのみ)

SELECT
  event_name,
  COUNT(*) AS event_count
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND platform = 'WEBSITE'
  AND unified_app_id = 'website-example.com'
  AND is_primary_attribution = true
  AND end_user_event_type = 'IN_APP'
GROUP BY event_name
ORDER BY event_count DESC

4. メディアソース別のユニークユーザー数

SELECT
  media_source,
  COUNT(DISTINCT COALESCE(customer_user_id, appsflyer_id_value)) AS unique_users
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND platform = 'WEBSITE'
  AND unified_app_id = 'website-example.com'
  AND is_primary_attribution = true
GROUP BY media_source
ORDER BY unique_users DESC

5.コンバージョン率:初回訪問から購入まで(テーブル横断の結合)

WITH first_visits AS (
  SELECT
    COALESCE(customer_user_id, appsflyer_id_value) AS user_id,
    media_source
  FROM conversions
  WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
    AND platform = 'WEBSITE'
    AND unified_app_id = 'website-example.com'
    AND conversion_name = 'FIRST_VISIT'
),
purchases AS (
  SELECT DISTINCT
    COALESCE(customer_user_id, appsflyer_id_value) AS user_id
  FROM end_user_events
  WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
    AND platform = 'WEBSITE'
    AND unified_app_id = 'website-example.com'
    AND is_primary_attribution = true
    AND end_user_event_type = 'IN_APP'
    AND event_name = 'purchase'
)
SELECT
  fv.media_source,
  COUNT(DISTINCT fv.user_id) AS first_visit_users,
  COUNT(DISTINCT p.user_id) AS purchasers,
  SAFE_DIVIDE(COUNT(DISTINCT p.user_id), COUNT(DISTINCT fv.user_id)) AS conversion_rate
FROM first_visits fv
LEFT JOIN purchases p ON fv.user_id = p.user_id
GROUP BY fv.media_source
ORDER BY conversion_rate DESC

6.キャンペーン別の売上(過去7日間)

SELECT
  campaign_name,
  media_source,
  SUM(revenue_usd) AS total_revenue_usd,
  COUNT(*) AS revenue_events
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND platform = 'WEBSITE'
  AND unified_app_id = 'website-example.com'
  AND is_primary_attribution = true
  AND revenue_usd IS NOT NULL
  AND revenue_usd <> 0.0
GROUP BY campaign_name, media_source
ORDER BY total_revenue_usd DESC

7.日別のオーガニック/非オーガニック初回訪問

SELECT
  DATE(event_time) AS visit_date,
  CASE WHEN is_organic = true THEN 'Organic' ELSE 'Non-Organic' END AS traffic_type,
  COUNT(*) AS first_visits
FROM conversions
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND platform = 'WEBSITE'
  AND unified_app_id = 'website-example.com'
  AND conversion_name = 'FIRST_VISIT'
GROUP BY visit_date, traffic_type
ORDER BY visit_date, traffic_type

8.ユーザー獲得とリターゲティングの内訳

SELECT
  conversion_type,
  conversion_name,
  COUNT(*) AS conversions
FROM conversions
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND platform = 'WEBSITE'
  AND unified_app_id = 'website-example.com'
GROUP BY conversion_type, conversion_name
ORDER BY conversions DESC

9.クリックIDの分布(Google、Meta、TikTokなど)

SELECT
  click_id_type,
  COUNT(*) AS events_with_click_id
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND platform = 'WEBSITE'
  AND unified_app_id = 'website-example.com'
  AND is_primary_attribution = true
  AND click_id_type != ''
GROUP BY click_id_type
ORDER BY events_with_click_id DESC

10.コンバージョン日別のコホートユーザー数(モバイルのインストール日に相当)

SELECT
  DATE(event_time__conversion) AS cohort_date,
  media_source,
  COUNT(DISTINCT COALESCE(customer_user_id, appsflyer_id_value)) AS cohort_users
FROM end_user_events
WHERE event_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND platform = 'WEBSITE'
  AND unified_app_id = 'website-example.com'
  AND is_primary_attribution = true
GROUP BY cohort_date, media_source
ORDER BY cohort_date, cohort_users DESC

仕様および制限事項

以下のフィールドはWebデータではサポートされておらず、常に空の値となります。

項目 備考
advertising_id_typehardware_id_typeなど 両方のレポート
agencysite_idad_type 両方のレポート
platform_group コンバージョン
app_version__conversion エンドユーザーイベント
すべての __assist_* フィールド コンバージョン