概要: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_events (end_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 DESC4. メディアソース別のユニークユーザー数
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 DESC5.コンバージョン率:初回訪問から購入まで(テーブル横断の結合)
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 DESC6.キャンペーン別の売上(過去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 DESC7.日別のオーガニック/非オーガニック初回訪問
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_type8.ユーザー獲得とリターゲティングの内訳
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 DESC9.クリック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_type、hardware_id_typeなど |
両方のレポート |
agency、site_id、ad_type
|
両方のレポート |
platform_group |
コンバージョン |
app_version__conversion |
エンドユーザーイベント |
すべての __assist_* フィールド |
コンバージョン |