概要:URIを使用して、AppsFlyer集計レポートをCSVファイルで取得しましょう。
Pull API ローデータをお探しですか?
Pull API集計データの特性
- レポートはCSVファイルとして生成されます。
- データ更新頻度 は、「データエクスポート」画面および「オーバービュー」ダッシュボード画面の同等レポートと同じです。コストは数時間の遅れで更新される可能性があり、これはコストデータを提供するパートナーの仕様に依存することを考慮してください。
- 利用できるオプションによるフィルタ:メディアソースと日付範囲。
- Pull APIの追加機能は次のとおりです:
- アトリビューションタッチタイプ で絞り込む機能
- 選択可能なタイムゾーン
- Pull APIは、アカウントユーザーやBI開発者の利用に向いています。
Pull APIで利用できる集計パフォーマンスレポート
カテゴリ | ユーザー獲得 | リターゲティング | Protect360 |
---|---|---|---|
パートナー(メディアソース) | ✓ | ✓ | ✓ |
パートナー(日付別) |
✓ | ✓ | ✓ |
日別 |
✓ | ✓ | ✓ |
地域別 |
✓ | ✓ | ✓ |
Geo by Date Report(地域/日付別レポート) |
✓ | ✓ | ✓ |
* リターゲティングレポートの場合は、URIに |
関連記事:
用語
用語 | 説明 |
---|---|
Pull API |
URIを使用してCSVレポートをダウンロードするためのソリューション。 |
APIコールまたは呼び出し |
ブラウザのアドレスバーに貼り付けるか、スクリプトを使用して、URIをAppsFlyerに送信すること。 |
URI |
|
アカウントをお持ちの方へのご案内
URIテンプレートについて
- AppsFlyer公式デベロッパーハブで使用できるURIテンプレートには、アプリIDとレポートの種類が入力されます。
- 編集する必要がある開始 (from) および 終了 (to) 日のプレースホルダーがあります。
- URIのクエスションマーク(?)より右側の部分は、パラメータを含んでいます。各パラメータはアンパサンド(&)で始まります。 パラメータは、フィルタの設定、追加フィールドの追加、通貨やタイムゾーンの指定に使用されます。例えば、ローデータレポートで特定のメディアソースを指定する(絞り込む)場合、「media_source」パラメータを使います:
&media_source=facebook
- Pull API の理解を深めるには、次のチュートリアルを実行してください。
初めてPull APIを使用する際のチュートリアル
はじめに:- アドミンユーザーにPull APIトークンを共有するよう依頼してください。
ディベロッパーハブからレポートをダウンロードする方法:
-
AppsFlyer Dev HubのAPIリファレンスを開いてください。
-
左側のメニューからレポートタイプを選択してください。
例:ローデータレポート(非オーガニック)> インストール。
すべてのレポートの種類の一覧については、以下の表を参照してください。 - 必要な項目を全て入力してください。
- 右側にURIテンプレートが表示されます。
- コピーアイコンをクリックしてURIをコピーしてください。
- ブラウザの新しいタブを開き、URIを貼り付けてください。
- EnterキーをクリックしてAPIコールを送ります。
レポートがダウンロードされます。
Report | 説明 | 更新頻度 |
---|---|---|
ローデータレーポート(非オーガニック) | ||
インストール | 非オーガニックインストールを記録します。ユーザーがアプリを初回起動した際に記録が生成されます。 |
リアルタイム |
アプリ内イベント | ユーザーが実行したイベントを記録します。 |
リアルタイム |
アンインストール | ユーザーがアプリをアンインストールした際に記録します。 |
日別 |
再インストール |
アプリをアンインストールした後、UAメディアソースと接触し、リアトリビューション期間中にアプリを再インストールしたユーザーを記録します。 | リアルタイム |
ローデータレーポート(オーガニック) |
||
オーガニックインストール |
ユーザーがアプリを初回起動した際に記録します。 |
継続的 |
オーガニックアプリ内イベント |
ユーザーが実行したイベントに関する詳細を記録します。 |
継続的 |
オーガニックアンインストール |
ユーザーがアプリをアンインストールしたことを記録します。 |
日別 |
オーガニック再インストール |
リエンゲージメント期間中にリターゲティング媒体へアトリビューションされたユーザーからの広告収益を記録します。 |
毎日 |
広告収益ローデータ |
||
非オーガニックインストールに紐づくアプリ内広告収入 |
メディアソースに紐づくユーザーの広告収益を記録します。 | 日別 |
オーガニックインストールに紐づくアプリ内広告収入 | メディアソースに紐づかないユーザーの広告収益を記録します。 | 日別 |
Protect360不正 | ||
インストール | 不正と識別されたためどのメディアソースの成果にも紐づいていないインストールを記録します。 | リアルタイム |
ポストアトリビューションのインストール | 不正と識別されたため一切計測されなかったアプリ内イベントを記録します。 | リアルタイム |
アプリ内イベント | Protect360により不正と識別されたアプリ内イベントを記録します。 | 日別 |
ポストアトリビューションのアプリ内イベント | 一度メディアソースへアトリビューションされたが不正と判断されたインストールに紐づくアプリ内イベント、もしくはインストール自体に関係なく不正と判定されたアプリ内イベントを記録します。 | 日別 |
Clicks | Protect360によりブロックされたユーザーが実行したクリックを記録します。 | 日別 |
ブロック済みインストールポストバック | ブロックされたインストールと判断されたメディアソースに送信されたポストバックのコピーを記録します。 | リアルタイム |
ポストバック | ||
インストールポストバック | ユーザーがアプリを初回起動した際に生成されるインストールイベントを記録します。 | 日別 |
アプリ内イベントのポストバック | メディアソースに送信されたアプリ内イベントポストバックを記録します。 | 日別 |
リターゲティング アプリ内イベントポストバック | リエンゲージメント期間中にユーザーが実行したアプリ内イベントを記録します。 | リアルタイム |
リターゲティングコンバージョンポストバック | リエンゲージメント期間中にユーザーが実行したアプリ内イベントを記録します。 | リアルタイム |
集計データPull APIパラメーター
パフォーマンスレポートのURIとパラメーター
集計URIの必須パラメーター
パラメーター | 説明 |
---|---|
api_token | API bearer 認証トークン。 |
from |
|
to |
終了日。from を参照
|
Protect360レポートを除く、パフォーマンスデータに関するオプションのフィルタリングと表示パラメータ
パラメーター | 説明 |
---|---|
media_source |
特定のメディアソースに制限(フィルタ)するために使用します。
|
attribution_touch_type |
このパラメーターを例に示すように設定して、ビュースルーアトリビューション (VTA) のKPI を取得します。 例: |
currency |
収益とコストの通貨 集計Pull APIレポートは常にアプリ固有の通貨を使用します。 |
reattr |
リターゲティングのコンバージョンデータを取得します。
|
timezone |
[デフォルト] UTC を使用してデータが返されます。
タイムゾーンの選択に関する注意点
|
Google Adsのフィルタリングされたレポート
https://hq.appsflyer.com/export/com.greatapp/partners_report/v5?
from=2018-04-09&to=2018-05-09&media_source=googleadwords_int
Facebookのフィルタリングされたレポート
https://hq.appsflyer.com/export/com.greatapp/partners_report/v5?
from=2018-04-09&to=2018-05-09&media_source=facebook
パラメーター | 説明 |
---|---|
URI |
|
pid |
特定のメディアソースでレポートをフィルタリングするには、 |
timezone |
生成されるデータで使用するタイムゾーンを選択します。 timezone が送信されない場合、データではUTCが使用されます。 タイムゾーン パラメータを含むテンプレート。 例: |
KPI |
Protect360のパラメーターは、Pull APIとMaster APIと同じです。
|
ビュースルー計測 (VTA) KPI
- ビュースルーのKPIを取得するには、次の例で詳しく説明されているように、パラメーター attribution_touch_type=impression をパフォーマンスレポートPull APIのURIに追加します。
- どの集計レポートでもパラメーターを使用することができます。ユーザーインターフェイスからURIをコピーし、パラメーターを追加するだけです。
- 次の例に示すように、&media_source パラメーターを追加して、レポートを特定のメディアソースに絞り込むこともできます。
- クリック数、インプレッション数、コスト API など、一部のビュースルーKPI には値が関連付けられていないため、代わりにN/Aという値が表示されます。
例 | URIの例 |
---|---|
ビュースルーのみ | https://hq.appsflyer.com/export/{app_id}/partners_report/v5?from=yyyy-mm-dd&to=yyyy-mm-dd&attribution_touch_type=impression |
ビュースルーとメディアソース |
https://hq.appsflyer.com/export/{app_id}/partners_report/v5?from=yyyy-mm-dd&to=yyyy-mm-dd&attribution_touch_type=impression&media_source=example_ad_network |
開発者向け Pull API
実装の原則
前提条件:
アカウントユーザー向けのPull API ガイドをまずご理解ください。
次の点を考慮してください:
- 使用可能なレポートの種類ごとに、 AppsFlyer公式デベロッパーハブにテンプレートURIがあります。左側のメニューからレポートタイプを選択してください。
- テンプレートを変更して必要なデータを取得してください。例えば、日付範囲を設定しパラメーターでデータを絞り込みます。
- ローデータレポートと集計データレポートのパラメータは異なり、レポートセクションで詳しく説明します。
パス |
|
パスのパラメーター |
|
HTTP method |
|
パラメーター | 説明 |
---|---|
URIの例 |
|
api_token |
|
その他のパラメーター |
パラメータは次により異なります: |
例
URIコールの例には追加パラメーターが含まれます:
https://hq.appsflyer.com/export/example.app.com/installs_report/v5?
from=yyyy-mm-dd
&to=yyyy-mm-dd&additional_fields=keyword_id,store_reinstall,
deeplink_url,oaid,install_app_store,contributor1_match_type,
contributor2_match_type,contributor3_match_type,match_type
スクリプトのサンプル
Pull APIをスクリプトに統合してデータを取得します。
- 必要に応じて、レポートの種類、日付範囲、およびフィルタに関してスクリプトを編集します。
- これらの例では、インストールレポートを使用します。
import okhttp3.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.concurrent.TimeUnit;
public class PullApi {
public static void main(String[] args){
String appID = "<APP_ID>";
String reportType = "<REPORT_TYPE>";
String from = "<FROM_DATE>";
String to = "<TO_DATE>";
String requestUrl = "https://hq.appsflyer.com/export/"+ appID + "/" + reportType + "/v5?api_token="+ apiToken + "&from=" + from + "&to=" + to;
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(30,TimeUnit.SECONDS)
.readTimeout(30,TimeUnit.SECONDS)
.build();
Request request = new Request.Builder()
.url(requestUrl)
.addHeader("Accept","text/csv")
.build();
try {
Response response = client.newCall(request).execute();
if(response.code()!= 200) {
if(response.code()== 404) {
System.out.println("There is a problem with the request URL. Please make sure it is correct");
}
else {
assert response.body() != null;
System.out.println("There was a problem retrieving the data: " + response.body().string());
}
} else {
assert response.body() != null;
String data = response.body().string();
BufferedWriter writer;
writer = new BufferedWriter(new FileWriter(appID + "-" + reportType + "-" + from + "-to-" + to + ".csv"));
writer.write("");
writer.write(data);
writer.close();
}
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
request = require('request');
const fs = require('fs');
const appID = '<APP_ID>';
const reportType = '<REPORT_TYPE>';
const from = '<FROM_DATA>';
const to = '<T0_DATE>';
const requestUrl = `https://hq.appsflyer.com/export/${appID}/${reportType}/v5?api_token=${apiToken}&from=${from}&to=${to}`;
request(requestUrl, (error, response, body) => {
if (error) {
console.log('There was a problem retrieving data:', error);
}
else if (response.statusCode != 200) {
if (response.statusCode === 404) {
console.log('There is a problem with the request URL. Make sure that it is correct');
} else {
console.log('There was a problem retrieving data:', response.body);
}
} else {
fs.writeFile(`${appID}-${reportType}-${from}-to-${to}.csv`,response.body,(err) => {
if (err) {
console.log('There was a problem writing to file: ', err);
} else {
console.log('File was saved');
}
});
}
});
import requests
app_id = '<APP_ID>'
report_type = '<REPORT_TYPE>'
params = {
'from': 'FROM_DATE',
'to': 'TO_DATE'
}
request_url = 'https://hq.appsflyer.com/export/{}/{}/v5'.format(app_id, report_type)
res = requests.request('GET', request_url, params=params)
if res.status_code != 200:
if res.status_code == 404:
print('There is a problem with the request URL. Make sure that it is correct')
else:
print('There was a problem retrieving data: ', res.text)
else:
f = open('{}-{}-{}-to-{}.csv'.format(app_id, report_type, params['from'], params['to']), 'w', newline='', encoding="utf-8")
f.write(res.text)
f.close()
using System;
using RestSharp;
using System.Text;
using System.Net;
using System.IO;
namespace Pull_API
{
class PullAPi
{
static void Main(string[] args)
{
var appID = "<APP_ID>";
var reportType = "<REPORT_TYPE>";
var from = "<FROM_DATE>";
var to = "<TO_DATE>";
var requestUrl = "https://hq.appsflyer.com/export/"+ appID + "/" + reportType + "/v5?api_token="+ apiToken + "&from=" + from + "&to=" + to;
var client = new RestClient(requestUrl);
var request = new RestRequest(Method.GET);
request.AddHeader("Accept", "text/csv; charset=UTF-8");
IRestResponse response = client.Execute(request);
HttpStatusCode statusCode = response.StatusCode;
int numericStatusCode = (int)statusCode;
if(numericStatusCode != 200){
if(numericStatusCode == 404){
Console.WriteLine("There is a problem with the request URL. Make sure that it is correct.");
} else {
Console.WriteLine("There was a problem retrieving data: " + response.Content);
}
} else {
System.IO.File.WriteAllText(@"" + appID + "-" + reportType + "-" + from + "-to-" + to + ".csv", response.Content);
Console.WriteLine("Data retrieved succesfully");
}
}
}
}
<?
$appID = '<APP_ID>';
$reportType = '<REPORT_TYPE>';
$from = '<FROM_DATE>';
$to = '<TO_DATE>';
$query = http_build_query([
'from' => $from,
'to' => $to
]);
$requestUrl = 'https://hq.appsflyer.com/export/' .$appID .'/' .$reportType .'/v5?'.$query;
$report = $appID .'-' .$report .'-' .$from .'-to-' .$to;
$curl = curl_init($requestUrl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_ENCODING, "");
curl_setopt($curl, CURLOPT_NOSIGNAL, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 100);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"cache-control: no-cache",
"Accept: text/csv; charset=UTF-8"
));
$response = curl_exec($curl);
$info = curl_getinfo($curl);
$err = curl_error($curl);
curl_close($curl);
var_dump($response);
if ($err) {
echo $info['http_code'];
echo "cURL Error #: " .$err .'. ';
if ($info['http_code'] == 404) {
echo 'There is a problem with the request URL. Make sure that it is correct';
}
if ($info['http_code'] == 401) {
echo 'There was a problem retrieving data: authentication failed.';
}
echo PHP_EOL;
} else {
$fp = fopen($report, 'w+');
fwrite($fp, $response);
fclose($fp);
echo $response;
}
?>
追加情報
特性と制限
特性 | コメント |
---|---|
必要なAPIトークンタイプ |
![]() |
アドネットワークのアクセス | N |
代理店アクセス | Y |
代理店への運用詳細の開示 | Y |
アプリ固有の通貨 | Y |
アプリ固有のタイムゾーン | Y |
コスト | コストデータはユーザー獲得キャンペーンのみで、リターゲティングまたはアクティブではない(インストールが無い)キャンペーンは対象外です。 |
データ更新頻度 | 継続的 |
過去データ | Y |
非オーガニックデータ | Y |
オーガニックデータ | Y |
レート制限 | |
サイズ制限 |
注!ローデータのPull APIは100万行をサポートしています。集計データレポートは20万行に制限されています。 |
キャンペーン名の変更 | Pull APIレポートはキャンペーン名の変更をサポートしていません。 |
APIエラーコードとトラブルシューティング
ステータス | コード | 症状/メッセージ | 解決策 |
---|---|---|---|
OK | 200 | Empty CSV file(CSVファイルが空です) |
|
OK |
200 |
|
URIにAPIトークンが見つかりません |
Bad request |
400 |
ローデータレポートの過去データは最長で過去90日間に制限されています |
|
Bad request |
400 |
指定されたレポートタイプでAPIコールの制限に達しています |
- |
Unauthorized |
401 |
Supplied API token is invalid(指定されたAPIトークンが無効です) |
管理者に現在のトークンを問い合わせる |
Unauthorized |
401 |
アカウントが停止されている可能性があります |
管理画面にログインしアカウントのステータスを確認してください |
Not found |
404 |
AppsFlyer 404エラーメッセージページが表示されます |
|