Skip to content

Modules

RevenueReport

Detailed documentation for this API can be found at: Revenue Report API

Source code in applovin_report/revenue_reporting_api.py
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
class RevenueReport:
    """
    Detailed documentation for this API can be found at: [Revenue Report API](https://dash.applovin.com/documentation/mediation/reporting-api/max-ad-revenue)
    """

    ENDPOINT = "https://r.applovin.com/maxReport"

    def __init__(self, api_key: str | list[str]):
        """
        Args:
            api_key: API key(s) to use for the report

        Returns:
            None

        Doc Author:
            minhpc@ikameglobal.com
        """
        self.api_key = api_key

    def get_report(
        self,
        start_date: str = None,
        end_date: str = None,
        columns: list[str] = None,
        limit: int = 100000,
        max_retries: int = 3,
        retry_interval: int = 30,
        **kwargs,
    ) -> DataFrame:
        """
        Retrieve a report from the MAX Revenue Report API.


        Args:
            start_date: YYYY-MM-DD, within the last 45 days
            end_date: YYYY-MM-DD, within the last 45 days
            columns: List of columns to include in the report
            limit: Set the number of rows to return
            max_retries: Set the number of retries
            retry_interval: Set the number of seconds to wait between retries
            **kwargs: Additional parameters to pass to the API

        Returns:
            A pandas DataFrame containing the report data

        Doc Author:
            minhpc@ikameglobal.com
        """
        if not start_date or not end_date:
            start_date = (datetime.now() - timedelta(days=2)).strftime("%Y-%m-%d")
            end_date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")

        params = {
            "api_key": self.api_key,
            "start": start_date,
            "end": end_date,
            "columns": ",".join(columns),
            "format": "json",
            "limit": limit,
            **kwargs,
        }

        for i in range(max_retries + 1):
            response = requests.get(url=RevenueReport.ENDPOINT, params=params)

            if response.status_code == 200:
                return DataFrame(response.json()["results"])
            else:
                print(f"Retrying... ({i + 1}/{max_retries})")
                time.sleep(retry_interval)

        print(traceback.format_exc())
        raise Exception(f"Error: {response.status_code}")

    def get_report_batch(
        self,
        start_date: str = None,
        end_date: str = None,
        columns: list[str] = None,
        batch_size: int = 100000,
        max_retries: int = 3,
        retry_interval: int = 30,
        **kwargs,
    ) -> Iterator[DataFrame]:
        """
        Retrieve a report from the MAX Revenue Report API in batches.

        Args:
            start_date: YYYY-MM-DD, within the last 45 days
            end_date: YYYY-MM-DD, within the last 45 days
            columns: List of columns to include in the report
            batch_size: Number of rows to return per batch
            max_retries: Number of retries
            retry_interval: Number of seconds to wait between retries
            **kwargs: Additional parameters to pass to the API

        Returns:
            A generator that yields a pandas DataFrame containing the report data

        Doc Author:
            minhpc@ikameglobal.com
        """
        if not start_date or not end_date:
            start_date = (datetime.now() - timedelta(days=2)).strftime("%Y-%m-%d")
            end_date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")

        offset = 0
        has_next_batch = True
        while has_next_batch:
            params = {
                "api_key": self.api_key,
                "start": start_date,
                "end": end_date,
                "columns": ",".join(columns),
                "format": "json",
                "offset": offset,
                "limit": batch_size,
                **kwargs,
            }

            response = None
            for i in range(max_retries + 1):
                response = requests.get(url=RevenueReport.ENDPOINT, params=params)
                if response.status_code == 200:
                    break
                print(f"Retrying... ({i + 1}/{max_retries})")
                time.sleep(retry_interval)
            if response.status_code != 200:
                print(traceback.format_exc())
                raise Exception(f"Error: {response.status_code}\nLast offset: {offset}\nBatch size: {batch_size}")

            results = response.json()["results"]
            has_next_batch = len(results) == batch_size
            offset += batch_size
            yield DataFrame(results)

__init__(api_key)

Parameters:

Name Type Description Default
api_key str | list[str]

API key(s) to use for the report

required

Returns:

Type Description

None

Doc Author

minhpc@ikameglobal.com

Source code in applovin_report/revenue_reporting_api.py
17
18
19
20
21
22
23
24
25
26
27
28
def __init__(self, api_key: str | list[str]):
    """
    Args:
        api_key: API key(s) to use for the report

    Returns:
        None

    Doc Author:
        minhpc@ikameglobal.com
    """
    self.api_key = api_key

get_report(start_date=None, end_date=None, columns=None, limit=100000, max_retries=3, retry_interval=30, **kwargs)

Retrieve a report from the MAX Revenue Report API.

Parameters:

Name Type Description Default
start_date str

YYYY-MM-DD, within the last 45 days

None
end_date str

YYYY-MM-DD, within the last 45 days

None
columns list[str]

List of columns to include in the report

None
limit int

Set the number of rows to return

100000
max_retries int

Set the number of retries

3
retry_interval int

Set the number of seconds to wait between retries

30
**kwargs

Additional parameters to pass to the API

{}

Returns:

Type Description
DataFrame

A pandas DataFrame containing the report data

Doc Author

minhpc@ikameglobal.com

Source code in applovin_report/revenue_reporting_api.py
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
def get_report(
    self,
    start_date: str = None,
    end_date: str = None,
    columns: list[str] = None,
    limit: int = 100000,
    max_retries: int = 3,
    retry_interval: int = 30,
    **kwargs,
) -> DataFrame:
    """
    Retrieve a report from the MAX Revenue Report API.


    Args:
        start_date: YYYY-MM-DD, within the last 45 days
        end_date: YYYY-MM-DD, within the last 45 days
        columns: List of columns to include in the report
        limit: Set the number of rows to return
        max_retries: Set the number of retries
        retry_interval: Set the number of seconds to wait between retries
        **kwargs: Additional parameters to pass to the API

    Returns:
        A pandas DataFrame containing the report data

    Doc Author:
        minhpc@ikameglobal.com
    """
    if not start_date or not end_date:
        start_date = (datetime.now() - timedelta(days=2)).strftime("%Y-%m-%d")
        end_date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")

    params = {
        "api_key": self.api_key,
        "start": start_date,
        "end": end_date,
        "columns": ",".join(columns),
        "format": "json",
        "limit": limit,
        **kwargs,
    }

    for i in range(max_retries + 1):
        response = requests.get(url=RevenueReport.ENDPOINT, params=params)

        if response.status_code == 200:
            return DataFrame(response.json()["results"])
        else:
            print(f"Retrying... ({i + 1}/{max_retries})")
            time.sleep(retry_interval)

    print(traceback.format_exc())
    raise Exception(f"Error: {response.status_code}")

get_report_batch(start_date=None, end_date=None, columns=None, batch_size=100000, max_retries=3, retry_interval=30, **kwargs)

Retrieve a report from the MAX Revenue Report API in batches.

Parameters:

Name Type Description Default
start_date str

YYYY-MM-DD, within the last 45 days

None
end_date str

YYYY-MM-DD, within the last 45 days

None
columns list[str]

List of columns to include in the report

None
batch_size int

Number of rows to return per batch

100000
max_retries int

Number of retries

3
retry_interval int

Number of seconds to wait between retries

30
**kwargs

Additional parameters to pass to the API

{}

Returns:

Type Description
Iterator[DataFrame]

A generator that yields a pandas DataFrame containing the report data

Doc Author

minhpc@ikameglobal.com

Source code in applovin_report/revenue_reporting_api.py
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
def get_report_batch(
    self,
    start_date: str = None,
    end_date: str = None,
    columns: list[str] = None,
    batch_size: int = 100000,
    max_retries: int = 3,
    retry_interval: int = 30,
    **kwargs,
) -> Iterator[DataFrame]:
    """
    Retrieve a report from the MAX Revenue Report API in batches.

    Args:
        start_date: YYYY-MM-DD, within the last 45 days
        end_date: YYYY-MM-DD, within the last 45 days
        columns: List of columns to include in the report
        batch_size: Number of rows to return per batch
        max_retries: Number of retries
        retry_interval: Number of seconds to wait between retries
        **kwargs: Additional parameters to pass to the API

    Returns:
        A generator that yields a pandas DataFrame containing the report data

    Doc Author:
        minhpc@ikameglobal.com
    """
    if not start_date or not end_date:
        start_date = (datetime.now() - timedelta(days=2)).strftime("%Y-%m-%d")
        end_date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")

    offset = 0
    has_next_batch = True
    while has_next_batch:
        params = {
            "api_key": self.api_key,
            "start": start_date,
            "end": end_date,
            "columns": ",".join(columns),
            "format": "json",
            "offset": offset,
            "limit": batch_size,
            **kwargs,
        }

        response = None
        for i in range(max_retries + 1):
            response = requests.get(url=RevenueReport.ENDPOINT, params=params)
            if response.status_code == 200:
                break
            print(f"Retrying... ({i + 1}/{max_retries})")
            time.sleep(retry_interval)
        if response.status_code != 200:
            print(traceback.format_exc())
            raise Exception(f"Error: {response.status_code}\nLast offset: {offset}\nBatch size: {batch_size}")

        results = response.json()["results"]
        has_next_batch = len(results) == batch_size
        offset += batch_size
        yield DataFrame(results)