プロスペクティングキャンペーン(新規顧客の獲得)を最適化するために、AppLovinは注文履歴データをAppLovinに提供することを強く推奨します。 これにより、AppLovinは既存顧客の正確なモデルを構築し、価値の高い新しいユーザーを見つけることができます。
AppLovin Shopifyアプリをインストールし、それをAds Managerアカウントに連携しているShopifyユーザーであれば、すでに準備は完了しています!
それ以外の場合は、以下の要件に従って、このデータをCSV形式でアップロードしてください。
AppLovinへの顧客データの提供は、必要な通知や同意を含む、お客様自身のプライバシーコンプライアンス要件に従うものとします。
transaction_id に基づいて自動的に注文を重複排除します。
AppLovinは、システム内にすでに存在する transaction_id を持つデータ行を無視します。
単一のファイル内に重複する transaction_id を持つ行が存在する場合、AppLovinは最も古い event_timestamp を持つ行を保持し、残りを破棄します。CSVファイルには、以下にリストされている必須ヘッダーをすべて含める必要がありますが、特定のフィールドへの入力は任意です。
列の順序は問いませんが、ヘッダー名は完全に一致する必要があります。
イベント期間: AppLovinは、利用可能なすべての注文履歴をアップロードすることを強くお勧めします。
| フィールド | 値の入力は必須? | タイプ | 説明 | 値の例 |
|---|---|---|---|---|
country_code | はい | String | ISO 3166 国コード | US |
currency | はい | String | ISO 4217 形式の取引通貨(3文字のコード) | USD |
email | はい | String | 顧客のメールアドレス。プレーンテキストのメールアドレスを提供してください。AppLovin側でハッシュ化します。 | customer@example.com |
event_name | はい | String | purchase である必要があります | purchase |
event_timestamp | はい | String | 購入が発生した日時
|
|
transaction_id | はい | String | 注文の一意の識別子(注文ID、チェックアウトIDなど)。これは重複排除に不可欠です。 | txn_12345 |
user_id | はい | String | お客様の社内顧客ID。 | user_abc123 |
value | はい | Double | 取引の総額。0以上の数値である必要があります。通貨記号は含めないでください。 | 99.99 |
zip | いいえ | String | 顧客の郵便番号。これは取引の請求先郵便番号である必要があります。米国の郵便番号の場合は、最初の5桁のみを含めてください。 | 12345 |
idfv | いいえ | String | ユーザーの identifier for vendors。 | f325g3gb-12fc-352f-c6c3-dz52f0f690d8 |
ifa | いいえ | String | ユーザーの identifier for advertisers。これは IDFA または GAID のいずれかです。 | 918f1d4f-d195-4a8b-af47-44683fe11db9 |
phone | いいえ | String | 顧客の電話番号。国コード(例: +1)を含める必要があります。プレーンテキストの番号を提供してください。AppLovin側でハッシュ化します。 | +14155551234 |
AppLovinは、提供されたプレーンテキストのメールアドレスと電話番号をハッシュ化します。
ご自身でハッシュ化を行いたい場合は、以下のガイドラインに慎重に従って行ってください。
emailphone1)。
その後、SHA256でハッシュ化します。
例(メールアドレスの場合):
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
#include <algorithm>
#include <openssl/sha.h>
std::string normalizeAndHash(const std::string& email) {
std::string normalized = email;
normalized.erase(0, normalized.find_first_not_of(" \t\n\r"));
normalized.erase(normalized.find_last_not_of(" \t\n\r") + 1);
std::transform(normalized.begin(), normalized.end(), normalized.begin(), ::tolower);
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256((unsigned char*)normalized.c_str(), normalized.size(), hash);
std::ostringstream oss;
for (int i = 0; i < SHA256_DIGEST_LENGTH; ++i)
oss << std::hex << std::setw(2) << std::setfill('0') << (int)hash[i];
return oss.str();
}
int main() {
std::cout << normalizeAndHash(" John_Smith@gmail.com") << std::endl;
}
using System;
using System.Text;
using System.Security.Cryptography;
class Program {
static string NormalizeAndHash(string email) {
string normalized = email.Trim().ToLower();
using (SHA256 sha256 = SHA256.Create()) {
byte[] bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(normalized));
StringBuilder sb = new StringBuilder();
foreach (byte b in bytes)
sb.Append(b.ToString("x2"));
return sb.ToString();
}
}
static void Main() {
Console.WriteLine(NormalizeAndHash(" John_Smith@gmail.com"));
}
}
import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;
public class HashEmail {
public static String normalizeAndHash(String email) throws Exception {
String normalized = email.trim().toLowerCase();
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(normalized.getBytes(StandardCharsets.UTF_8));
StringBuilder hex = new StringBuilder();
for (byte b : hash) hex.append(String.format("%02x", b));
return hex.toString();
}
public static void main(String[] args) throws Exception {
System.out.println(normalizeAndHash(" John_Smith@gmail.com"));
}
}
import { createHash } from "crypto";
function normalizeAndHash(email) {
const normalized = email.trim().toLowerCase();
return createHash("sha256").update(normalized).digest("hex");
}
// Example
console.log(normalizeAndHash(" John_Smith@gmail.com"));
import java.security.MessageDigest
fun normalizeAndHash(email: String): String {
val normalized = email.trim().lowercase()
val bytes = MessageDigest.getInstance("SHA-256").digest(normalized.toByteArray())
return bytes.joinToString("") { "%02x".format(it) }
}
fun main() {
println(normalizeAndHash(" John_Smith@gmail.com"))
}
import hashlib
def normalize_and_hash(email):
normalized = email.strip().lower()
return hashlib.sha256(normalized.encode()).hexdigest()
# Example
print(normalize_and_hash(" John_Smith@gmail.com"))
import Foundation
import CryptoKit
func normalizeAndHash(_ email: String) -> String {
let normalized = email.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
let hash = SHA256.hash(data: normalized.data(using: .utf8)!)
return hash.map { String(format: "%02x", $0) }.joined()
}
print(normalizeAndHash(" John_Smith@gmail.com"))
62a14e44f765419d10fea99367361a727c12365e2520f32218d505ed9aa0f62f
user_id と email が含まれている必要があります。
AppLovinは、これらの列の値が欠落している行を拒否します。event_name 列が存在し、その値が purchase である必要があります。value 列には、0以上の非負の数値(≥0)が含まれている必要があります。AX — オーランド諸島AD — アンドラAT — オーストリアBE — ベルギーDK — デンマークFO — フェロー諸島FI — フィンランドFR — フランスDE — ドイツGI — ジブラルタルGR — ギリシャGG — ガーンジーIS — アイスランドIE — アイルランドIM — マン島IT — イタリアJE — ジャージーLI — リヒテンシュタインLU — ルクセンブルクMT — マルタMC — モナコNL — オランダNO — ノルウェーPT — ポルトガルSM — サンマリノES — スペインSJ — スヴァールバル諸島およびヤンマイエン島SE — スウェーデンCH — スイスGB — イギリス有効なCSVファイルの例を以下に示します。
event_name,user_id,phone,email,event_timestamp,value,currency,transaction_id,country_code,zip,idfv,ifa
purchase,user_abc123,+14155551234,user@example.com,2025-11-10T16:45:00Z,99.99,USD,txn_12345,US,12345,f325g3gb-12fc-352f-c6c3-dz52f0f690d8,918f1d4f-d195-4a8b-af47-44683fe11db9
purchase,user_def456,+14155555678,customer@example.com,2025-11-10T16:45:00Z,149.5,USD,txn_67890,US,12345,f325g3gb-12fc-352f-c6c3-dz52f0f690d8,918f1d4f-d195-4a8b-af47-44683fe11db9
purchase,user_ghi789,+14155559012,shopper@example.com,2025-11-10T17:20:00Z,75,EUR,txn_11223,US,12345,f325g3gb-12fc-352f-c6c3-dz52f0f690d8,918f1d4f-d195-4a8b-af47-44683fe11db9