Visão geral: use URIs para obter seus relatórios agregados da AppsFlyer em arquivos CSV.
Procurando dados brutos da Pull API?
Características dos dados agregados da Pull API
- Os relatórios retornam como arquivos CSV.
- As taxas de atualização dos dados são iguais às do relatório equivalente na página de Exportar Dados e na página de Visão Geral do dashboard. Considere que o custo pode ser atualizado com um atraso de várias horas e isso depende do parceiro fornecer os dados de custo.
- Filtrar por opções disponíveis: fonte de mídia e intervalo de datas.
- Os recursos adicionais da Pull API são:
- Capacidade de filtrar por tipo de toque de atribuição
- Fuso horário selecionável
- A Pull API é adequada para uso por usuários de contas e desenvolvedores de BI;
- Para receber relatórios, os usuários da conta devem colar as URIs em seus navegadores. Os templates de URI estão disponíveis no dashboard. Vá para Integração > Acesso à API.
- Desenvolvedores de BI obtêm relatórios ao incorporar os URIs em scripts.
Categoria | UA | Retargeting* | Protect360 |
---|---|---|---|
Parceiros (fonte de mídia) | ✓ | ✓ | ✓ |
Parceiros por data |
✓ | ✓ | ✓ |
Diariamente |
✓ | ✓ | ✓ |
Geolocalização |
✓ | ✓ | ✓ |
Relatório de geolocalização por data |
✓ | ✓ | ✓ |
* Para relatórios de redirecionamento, adicione |
Leitura relacionada:
- Descrições e exemplos de relatórios agregados
- Selecionando a ferramenta de entrega de dados correta para dados agregados
Terminologia
Termo | Descrição |
---|---|
Pull API |
Solução para baixar relatórios CSV usando URIs. |
Chamada de API ou chamada |
Enviando o URI à AppsFlyer colando-o na barra de endereços do navegador ou usando scripts. |
URI |
|
Guia para usuários da conta
Sobre templates de URI
- Os templates de URI disponíveis no dev hub são preenchidos com a identificação do aplicativo e o tipo de relatório.
- Eles possuem espaços reservados (placeholders) para o token da API V1.0 e para datas de/até (from/to) que você deve editar.
- A parte do URI à direita do ponto de interrogação (?) contém parâmetros. Cada parâmetro começa com um "e" comercial ((&). Os parâmetros são usados para definir filtros, especificar campos adicionais a serem incluídos, moeda e fuso horário. Por exemplo, em relatórios agregados para limitar (filtrar por) uma fonte de mídia específica, use o parâmetro media_source:
&media_source=facebook
- Para entender melhor a Pull API, termine o tutorial a seguir.
Como obter seu primeiro tutorial de relatório da Pull API
Antes de começar:- Peça a um usuário administrador para lhe fornecer o token V1.0.
Para fazer download de um relatório do dev hub:
-
Vá para a referência da API do dev hub na AppsFlyer.
-
Selecione um tipo de relatório no menu à esquerda.Por exemplo, Relatórios de dados brutos (não-orgânicos) > Instalações.
Consulte a tabela abaixo para obter uma lista de todos os tipos de relatórios. - Preencha todos os campos obrigatórios
- O template de URI é exibido à direita.
- Copie o URI clicando no ícone de cópia.
- Abra uma nova aba no seu navegador e cole o URI.
- Clique em <Enter> para enviar a chamada da API.
O relatório é baixado.
Relatório | Descrição | Taxa de atualização |
---|---|---|
Relatórios de dados brutos (não orgânicos) | ||
Instalações | Registra as instalações não orgânicas. O registro é gerado quando um usuário abre o aplicativo pela primeira vez. |
em tempo real |
Eventos in-app | Registra os eventos realizados pelos usuários. |
em tempo real |
Desinstalações | Registra quando um usuário desinstala o aplicativo. |
Diariamente |
Reinstalações |
Registra os usuários que, após desinstalar o aplicativo, engajam com uma fonte de mídia UA e reinstalam o aplicativo durante a janela de reatribuição. | em tempo real |
Relatórios de dados brutos (orgânicos) |
||
Instalações orgânicas |
Registra quando o aplicativo é aberto por um usuário pela primeira vez. |
Contínuo |
Eventos in-app orgânicos |
Registra informações sobre os eventos realizados pelos usuários. |
Contínuo |
Desinstalações orgânicas |
Registra os usuários desinstalando o aplicativo. |
Diariamente |
Reinstalações orgânicas |
Registra a receita publicitária para usuários atribuída a uma fonte de mídia de retargeting durante a janela de reengajamento. |
Diariamente |
Dados brutos da receita publicitária |
||
Receita publicitária atribuída |
Registra receita publicitária para os usuários atribuída a uma fonte de mídia. | Diariamente |
Receita publicitária orgânica | Registra receita publicitária para usuários não atribuídos a uma fonte de mídia. | Diariamente |
Fraude Protect360 | ||
Instalações | Registra instalações identificadas como fraudulentas e, portanto, não atribuídas a nenhuma fonte de mídia. | em tempo real |
Instalações pós-atribuição | Registra eventos in-app de instalações fraudulentas e, portanto, não são atribuídos de forma alguma. | em tempo real |
Eventos in-app | Registra eventos in-app identificados como fraudulentos pelo Protect360. | Diariamente |
Eventos in-app de pós-atribuição | Registra eventos in-app para instalações identificadas como fraudulentas após serem atribuídas a uma fonte de mídia ou consideradas fraudulentas sem levar em conta a instalação em si. | Diariamente |
Cliques | Registra cliques realizados por usuários bloqueados pelo Protect360. | Diariamente |
Postbacks de instalação bloqueados | Registra cópias de postbacks enviados para uma fonte de mídia, resultando em uma instalação bloqueada. | em tempo real |
Postbacks | ||
Postbacks de instalação | Registra eventos de instalação gerados quando um usuário abre o aplicativo pela primeira vez. | Diariamente |
Postback de evento in-app | Registra postbacks de eventos in-app enviados à fonte da mídia. | Diariamente |
Retargeting de postbacks de eventos in-app | Registra eventos in-app realizados por usuários durante a janela de reengajamento. | em tempo real |
Retargeting de postbacks de conversão | Registra eventos in-app realizados por usuários durante a janela de reengajamento. | em tempo real |
Parâmetros dos dados agregados da Pull API
URI e parâmetros do relatório agregado
Parâmetro | Descrição |
---|---|
api_token | V1.0 API token. Nas chamadas de exemplo, isso é mostrado como <API TOKEN HERE>. |
from (a partir de) |
|
to (até) |
Data final. Quanto a from
|
Parâmetro | Descrição |
---|---|
media_source |
Use para limitar (filtrar) uma fonte de mídia específica.
|
attribution_touch_type |
Defina este parâmetro como mostrado no exemplo para obter KPIs de atribuição de visualização (VTA). Exemplo: |
currency |
Moeda de receita e custo. Relatórios agregados de Pull API sempre usam a moeda específica do aplicativo. |
reattr |
Obtenha dados de conversões de retargeting.
|
Fuso horário |
[Padrão] Os dados retornam usando UTC.
Observações sobre a seleção de fusos horários
|
Relatório filtrado do Google Ads
https://hq.appsflyer.com/export/com.greatapp/partners_report/v5?api_token=xxxx
&from=2018-04-09&to=2018-05-09&media_source=googleadwords_int
Relatório filtrado do Facebook
https://hq.appsflyer.com/export/com.greatapp/partners_report/v5?api_token=xxxx
&from=2018-04-09&to=2018-05-09&media_source=facebook
Parâmetro | Descrição |
---|---|
URI |
|
PID |
Para filtrar o relatório por uma fonte de mídia específica, use o parâmetro |
Fuso horário |
Seleciona o fuso horário usado para retornar dados. Se timezone não for enviado, os dados serão retornados usando UTC. Templates incluindo o parâmetro timezone. Exemplo: |
KPIs |
Os parâmetros Protect360 são os mesmos na Pull API e na Master API.
|
KPIs de atribuição de exibição (VTA)
- Para obter os KPIs do VTA, adicione o parâmetro attribution_touch_type=impression ao URI do relatório agregado da Pull API, conforme detalhado no exemplo.
- Você pode usar o parâmetro com qualquer um dos relatórios agregados disponíveis. Basta copiar a URI da interface do usuário e anexar o parâmetro.
- Você também pode adicionar o parâmetro &media_source para limitar o relatório a uma fonte de mídia específica, conforme ilustrado no exemplo a seguir.
- Alguns KPIs de VTA, como cliques, impressões e APIs de custo, não têm valores associados a eles e exibem o valor N/A.
Exemplo | Exemplo de URI |
---|---|
Somente VTA | https://hq.appsflyer.com/export/{app_id}/partners_report/v5?api_token={API token}&from=yyyy-mm-dd&to=yyyy-mm-dd&attribution_touch_type=impression |
VTA e fonte de mídia |
https://hq.appsflyer.com/export/{app_id}/partners_report/v5?api_token={API token}&from=yyyy-mm-dd&to=yyyy-mm-dd&attribution_touch_type=impression&media_source=example_ad_network |
Pull API para desenvolvedores
Princípios de implementação
Pré-requisito:
Conheça o Guia da Pull API para usuários da conta.
Considere:
- Para cada tipo de relatório disponível, há um template de URI no dev hub. Selecione um tipo de relatório no menu à esquerda.
- Você pode modificar o template para obter os dados necessários, por exemplo, ao definir intervalos de datas e filtrar por parâmetros.
- Os parâmetros para dados brutos e relatórios de dados agregados diferem e são detalhados nas seções do relatório.
Path |
|
Parâmetros do path |
|
Método HTTP |
|
Parâmetro | Descrição |
---|---|
Exemplo de URI |
|
api_token |
|
Outros parâmetros |
Os parâmetros diferem dependendo |
Exemplo
O exemplo de chamada de URI inclui parâmetros adicionais:
https://hq.appsflyer.com/export/example.app.com/installs_report/v5?
api_token={Account owner API key should be used}&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
Scripts de exemplo
Integre a Pull API nos scripts para recuperar dados.
- Conforme necessário, edite os scripts em termos de tipo de relatório, período e filtros.
- Estes exemplos usam o relatório instalar.
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 apiToken = "<API_TOKEN>";
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 apiToken = '<API_TOKEN>';
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 = {
'api_token': '<API_TOKEN>',
'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 apiToken = "<API_TOKEN>";
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>';
$apiToken = '<API_TOKEN>';
$from = '<FROM_DATE>';
$to = '<TO_DATE>';
$query = http_build_query([
'api_token' => $apiToken,
'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;
}
?>
Informações adicionais
Características e limitações
Característica | Comentários |
---|---|
Tipo de token de API necessário |
![]() |
Acesso da ad network | N |
Acesso das agências | S |
Transparência da agência | S |
Moeda específica do aplicativo | S |
Fuso horário específico do aplicativo | S |
Custo | Os dados de custo são apenas para campanhas de UA; não para retargeting ou campanhas inativas (campanhas sem instalações). |
Atualização de dados | Contínuo |
Dados históricos | S |
Dados não orgânicos | S |
Dados orgânicos | S |
Limitações de taxa | |
Limitações de tamanho |
Atenção! A Pull API para dados brutos aceita 1 milhão de linhas. Os relatórios de dados agregados são limitados a 200 mil linhas. |
Alterações de nome da campanha | Os relatórios de Pull API não são compatíveis com alterações no nome da campanha |
Erro da API e solução de problemas
Status | Código | Sintoma/mensagem | solução |
---|---|---|---|
OK | 200 | Arquivo CSV vazio |
|
OK |
200 |
|
Nenhum token de API encontrado na URI |
Erro na solicitação |
400 |
O histórico de lookback dos relatórios de dados brutos é limitado a 90 dias |
Use |
Erro na solicitação |
400 |
Seu limite de chamadas de API foi atingido para o tipo de relatório fornecido |
- |
Não autorizado |
401 |
O token da API fornecido é inválido |
Peça o token atual para um administrador. |
Não autorizado |
401 |
A conta pode ser suspensa |
Faça login no painel e verifique o status da conta. |
Não encontrado |
404 |
A página com a mensagem de erro 404 da AppsFlyer é exibida |
|