Skip to main content

Report reference

Written by Dariy

One section per groupBy value. All examples are shortened and synthetic.


Shared metric fields

The Accounts, Brands, Campaigns and Dynamic Variables reports share this metric set, in this order:

Field

Type

Notes

raw_clicks

number

All clicks

unique_clicks

number

Unique clicks

impressions

number

signups

number

first_time_deposits

number

Count of first-time depositors

qualified_first_time_deposit

number

Count of qualified FTDs

installs

number

active_accounts

number

deposits_count

number

Number of deposits

deposits

number

Deposited amount

revenue

number

revenue_share_commission

number

cpa_commission

number

referral_commission

number

total_commission

number

flat_fee

number or numeric string

Flat fees you configured in StatsDrone. Not currency-converted

unique_depositors

number

ftd_amount

number

Value of first-time deposits

bonus_amount

number

gross_revenue

number

deductions

number

fixed_fee

number

total_income

number

total_commission + fixed_fee + flat_fee, rounded to 2 decimals

Plus, on daily rows only:

Field

Type

Notes

date

string YYYY-MM-DD

The day this row covers

last_sync

string

When this row was last refreshed from the affiliate program

and on monthly rows instead:

Field

Type

Notes

month

string YYYY-MM

The month this row covers

Monthly rows carry no date and no last_sync — a single day's date on a row summing a whole month would be misleading, which is what month replaces.

The Players and Geo reports use the same set minus flat_fee. The Postbacks report shares none of it — see its own section.


6.1 Accounts — groupBy=accounts

Purpose. Everything one affiliate account earned, broken down by brand and then campaign. Breakdowns. daily, monthly.

Request

https://app.statsdrone.com/user/reports?apiKey=YOUR_API_KEY&dateFrom=2026-08-01&dateTo=2026-08-31&reportType=daily&groupBy=accounts&reportCurrency=EUR&tags=&matchAny=true

Structure

data → "<account name>" → info
→ stats → "<brand>" → "<campaign>" → "<YYYY-MM-DD>" → row

With reportType=monthly the innermost level becomes an array of month rows instead:

stats → "<brand>" → "<campaign>" → [ row, row, ... ]

Response

{
"success": true,
"data": {
"Acme Partners (main)": {
"info": {
"program_name": "Acme Affiliates",
"program_id": 412,
"software": "Income Access",
"currency": "EUR",
"balance": 1250.4,
"tags": ["tier1", "casino"],
"status": "sync_success",
"error": null,
"last_sync": "2026-08-09 04:15:02",
"account_id": 10021,
"account_name": "Acme Partners (main)"
},
"stats": {
"Acme Casino": {
"Welcome Bonus": {
"2026-08-01": {
"date": "2026-08-01",
"raw_clicks": 412,
"unique_clicks": 388,
"impressions": 5120,
"signups": 21,
"first_time_deposits": 6,
"qualified_first_time_deposit": 5,
"installs": 0,
"active_accounts": 14,
"deposits_count": 9,
"deposits": 2450,
"revenue": 1810.25,
"revenue_share_commission": 452.56,
"last_sync": "2026-08-09 04:15:02",
"cpa_commission": 300,
"referral_commission": 0,
"total_commission": 752.56,
"flat_fee": "0.00",
"unique_depositors": 8,
"ftd_amount": 900,
"bonus_amount": 120,
"gross_revenue": 1930.25,
"deductions": 120,
"fixed_fee": 0,
"total_income": 752.56
}
}
}
}
},
"Bolt Media": {
"info": {
"program_name": "Bolt Affiliates",
"program_id": 733,
"software": "MyAffiliates",
"currency": "USD",
"balance": 0,
"tags": [],
"status": "frozen_report",
"error": null,
"last_sync": "2026-06-30 03:11:47",
"account_id": 10044,
"account_name": "Bolt Media"
},
"stats": {}
}
},
"dataRow": 31,
"row_count": 31
}

Notes

  • Brands and campaigns the program did not name appear under the key "N/A".

  • Bolt Media above is an account with no rows in the period — full context, empty stats.

  • A monthly row looks the same but starts with "month": "2026-08" and has no date/last_sync.


6.2 Brands — groupBy=brands

Purpose. One brand at a time, with each account that reported activity for it underneath. Breakdowns. daily, monthly.

Request

https://app.statsdrone.com/user/reports?apiKey=YOUR_API_KEY&dateFrom=2026-08-01&dateTo=2026-08-31&reportType=monthly&groupBy=brands&reportCurrency=&tags=tier1&matchAny=true

Structure

data → "<brand>" → "<account name>" → info
→ stats → "<YYYY-MM-DD>" → row (daily)
→ stats → [ row, ... ] (monthly)

Response (monthly, shortened)

{
"success": true,
"data": {
"Acme Casino": {
"Acme Partners (main)": {
"info": {
"program_name": "Acme Affiliates",
"program_id": 412,
"software": "Income Access",
"currency": "EUR",
"balance": 1250.4,
"tags": ["tier1", "casino"],
"status": "sync_success",
"error": null,
"last_sync": "2026-08-09 04:15:02",
"account_id": 10021,
"account_name": "Acme Partners (main)"
},
"stats": [
{
"month": "2026-08",
"raw_clicks": 11840,
"unique_clicks": 10322,
"deposits": 74300,
"revenue": 51260.8,
"total_commission": 21402.6,
"flat_fee": 0,
"fixed_fee": 0,
"total_income": 21402.6
}
]
}
},
"N/A": {
"Bolt Media": {
"info": { "…": "…", "account_id": 10044, "account_name": "Bolt Media" },
"stats": []
}
}
},
"dataRow": 1,
"row_count": 1
}

Notes

  • tags filters on brand tags here, not account tags.

  • Accounts with no data for the period appear under "N/A".

  • With labels=true, the top-level keys are your own brand labels wherever you have set one.


6.3 Campaigns — groupBy=campaigns

Identical in every respect to the Brands report, except that the top level is keyed by campaign name and tags filters on campaign tags.

data → "<campaign>" → "<account name>" → { info, stats }

6.4 Dynamic Variables — groupBy=variables

Purpose. The tracking parameters that came back with your traffic, day by day. Breakdowns. daily only. reportType=monthly is refused. Requires. A plan with the Dynamic Variables feature.

Request

https://app.statsdrone.com/user/reports?apiKey=YOUR_API_KEY&dateFrom=2026-08-01&dateTo=2026-08-07&reportType=daily&groupBy=variables&reportCurrency=&tags=&matchAny=true

Structure

data → "<account name>" → info
→ stats → "<YYYY-MM-DD>" → "1" | "2" | … → row

Several rows can share one date, so the innermost level is numbered from "1". Those numbers are positions within the day, nothing more — do not treat them as ids.

Row fields: date, brand, campaign, var1var5, sub_id, pub_id, click_id1, click_id2, utm_campaign, utm_medium, utm_source, then the shared metric set.

Response (shortened)

{
"success": true,
"data": {
"Acme Partners (main)": {
"info": { "…": "…", "account_id": 10021, "account_name": "Acme Partners (main)" },
"stats": {
"2026-08-01": {
"1": {
"date": "2026-08-01",
"brand": "Acme Casino",
"campaign": "Welcome Bonus",
"var1": "newsletter",
"var2": "aug-push",
"var3": null,
"var4": null,
"var5": null,
"sub_id": "sub-118",
"pub_id": null,
"click_id1": "ck_9f2a",
"click_id2": null,
"utm_campaign": "summer26",
"utm_medium": "email",
"utm_source": "mailer",
"raw_clicks": 96,
"unique_clicks": 88,
"deposits": 400,
"revenue": 280.5,
"total_commission": 98.17,
"last_sync": "2026-08-09 04:15:02",
"flat_fee": 0,
"fixed_fee": 0,
"total_income": 98.17
}
}
}
}
},
"dataRow": 7,
"row_count": 23
}

Notes

  • The response above is shortened — one row of one date is shown out of the 23 the counters describe.

  • utm_campaign, utm_medium and utm_source are recent additions — see Article 8.

  • Variables the traffic did not carry are null.

  • This is the one report where dataRow counts dates rather than rows, which is why the two counters disagree here. Use row_count.


6.5 Players — groupBy=players

Purpose. Activity per individual player. Breakdowns. daily, monthly. Requires. A plan with the Players Report feature.

Request

https://app.statsdrone.com/user/reports?apiKey=YOUR_API_KEY&dateFrom=2026-08-01&dateTo=2026-08-07&reportType=daily&groupBy=players&reportCurrency=EUR&tags=&matchAny=true

Structure

data → [ { account_id, account_name, info, stats: [ row, ... ] } ]

data is an array. Accounts are sorted by name; rows are sorted by date, then player, then country, brand and campaign.

Row fields: date (or month), player_id, player_alias, country, brand, campaign, then the shared metric set without flat_fee.

Response (shortened)

{
"success": true,
"data": [
{
"account_id": 10021,
"account_name": "Acme Partners (main)",
"info": {
"program_name": "Acme Affiliates",
"program_id": 412,
"software": "Income Access",
"currency": "EUR",
"balance": 1250.4,
"tags": ["tier1", "casino"],
"status": "sync_success",
"error": null,
"last_sync": "2026-08-09 04:15:02"
},
"stats": [
{
"date": "2026-08-01",
"player_id": "P-88213",
"player_alias": "player_88213",
"country": "DE",
"brand": "Acme Casino",
"campaign": "Welcome Bonus",
"raw_clicks": 3,
"unique_clicks": 3,
"deposits": 250,
"revenue": 180.4,
"revenue_share_commission": 45.1,
"last_sync": "2026-08-09 04:15:02",
"cpa_commission": 0,
"referral_commission": 0,
"total_commission": 45.1,
"unique_depositors": 1,
"ftd_amount": 250,
"bonus_amount": 0,
"gross_revenue": 180.4,
"deductions": 0,
"fixed_fee": 0,
"total_income": 45.1
}
]
}
],
"dataRow": 1,
"row_count": 1
}

Notes

  • player_id and player_alias are whatever the affiliate program supplies — often pseudonymous, and either can be null.

  • country is the program's own country value.

  • Monthly rows start with "month" and drop date and last_sync.

  • This report has no flat_fee field at all — total_income is total_commission + fixed_fee.


6.6 Geo — groupBy=geo

Purpose. Activity by country and city. Breakdowns. daily, monthly. Requires. A plan with the Geo Report feature.

Structure. Identical to the Players report: data is an array of accounts, each with a flat stats list.

Row fields: date (or month), country, city, brand, campaign, then the shared metric set without flat_fee.

Response (one row)

{
"date": "2026-08-01",
"country": "DE",
"city": "Berlin",
"brand": "Acme Casino",
"campaign": "Welcome Bonus",
"raw_clicks": 210,
"unique_clicks": 194,
"deposits": 1200,
"revenue": 840.3,
"total_commission": 210.07,
"last_sync": "2026-08-09 04:15:02",
"fixed_fee": 0,
"total_income": 210.07
}

Notes

  • city is null when the program reported a country but no city.

  • Rows are sorted by date, country, city, brand, campaign.


6.7 Postbacks — groupBy=postbacks

Purpose. The individual postback events affiliate programs sent to your StatsDrone postback URLs. Breakdowns. daily only. reportType=monthly is refused — a postback is a single event with its own timestamp, and there is nothing to sum into a month that would still be a postback. Requires. A plan with the Postbacks feature.

Request

https://app.statsdrone.com/user/reports?apiKey=YOUR_API_KEY&dateFrom=2026-08-01&dateTo=2026-08-07&reportType=daily&groupBy=postbacks&reportCurrency=EUR&tags=&matchAny=true

Structure

data → [ { account_id, account_name, info, stats: [ event, ... ] } ]

stats is a list of events in the order they arrived. There is no aggregation — one entry per event.

How this report differs from the others

  • info.balance is always null. A balance is a figure read off the affiliate program; postbacks are callbacks into StatsDrone and never carry one. Reporting 0.00 would state a zero balance that is simply not something this report knows.

  • There is no total_income and no commission aggregation — the events are not period totals.

  • Currency is per row, not per account. Each event carries its own transaction_currency and commission_currency.

  • labels is ignored. A postback's brand and campaign are values the affiliate program put in the callback, not names StatsDrone scraped, so there is nothing to relabel.

  • tags filters on account tags, as on the Accounts report.

Row fields

Field

Type

Notes

date

string or null

YYYY-MM-DD — the day the event belongs to

event_received

string or null

Full timestamp the event was received

postback_name

string or null

The name you gave the postback in StatsDrone

event_type

string or null

The action type the postback is configured for

brand_name

string or null

The brand you set on the postback

brand

string or null

The brand the event carried

brand_id

string or null

campaign, campaign_id

string or null

affiliate_id, affiliate_name

string or null

deal_id, deal_name

string or null

media_name, media_id

string or null

page_name, page_id

string or null

utm_source, utm_medium, utm_campaign

string or null

conversion_type

string or null

player_name, player_id

string or null

ip_address, user_agent, device_type

string or null

click_id, conversion_id

string or null

click_time, conversion_time

string or null

As the program sent them

country, region, city

string or null

transaction_currency

string or null

Currency of the seven transaction amounts below

transaction_amount

number or null

deposit_amount

number or null

first_deposit_amount

number or null

casino_bet_amount

number or null

sportsbook_bet_amount

number or null

poker_bet_amount

number or null

lottery_bet_amount

number or null

net_revenue

number or null

commission_currency

string or null

Currency of commission_amount

commission_amount

number or null

dynamic_variable_1dynamic_variable_6

string or null

custom_parameter_1/custom_value_1_3

string or null

Parameter name and its value

Response (one event, shortened)

{
"success": true,
"data": [
{
"account_id": 10021,
"account_name": "Acme Partners (main)",
"info": {
"program_name": "Acme Affiliates",
"program_id": 412,
"software": "Income Access",
"currency": "EUR",
"balance": null,
"tags": ["tier1", "casino"],
"status": "sync_success",
"error": null,
"last_sync": "2026-08-09 04:15:02"
},
"stats": [
{
"date": "2026-08-01",
"event_received": "2026-08-01 14:22:07",
"postback_name": "Acme — FTD",
"event_type": "ftd",
"brand_name": "Acme Casino",
"brand": "Acme Casino",
"brand_id": "17",
"campaign": "Welcome Bonus",
"campaign_id": "204",
"affiliate_id": "AF-5512",
"affiliate_name": null,
"deal_id": null,
"deal_name": null,
"media_name": null,
"media_id": null,
"page_name": null,
"page_id": null,
"utm_source": "mailer",
"utm_medium": "email",
"utm_campaign": "summer26",
"conversion_type": "deposit",
"player_name": null,
"player_id": "P-88213",
"ip_address": "203.0.113.10",
"user_agent": "Mozilla/5.0",
"device_type": "mobile",
"click_id": "ck_9f2a",
"conversion_id": "cv_44b1",
"click_time": "2026-08-01 13:58:44",
"conversion_time": "2026-08-01 14:21:59",
"country": "DE",
"region": null,
"city": "Berlin",
"transaction_currency": "EUR",
"transaction_amount": 250,
"deposit_amount": 250,
"first_deposit_amount": 250,
"casino_bet_amount": null,
"sportsbook_bet_amount": null,
"poker_bet_amount": null,
"lottery_bet_amount": null,
"net_revenue": null,
"commission_currency": "EUR",
"commission_amount": 75,
"dynamic_variable_1": "newsletter",
"dynamic_variable_2": null,
"dynamic_variable_3": null,
"dynamic_variable_4": null,
"dynamic_variable_5": null,
"dynamic_variable_6": null,
"custom_parameter_1": null,
"custom_value_1": null,
"custom_parameter_2": null,
"custom_value_2": null,
"custom_parameter_3": null,
"custom_value_3": null
}
]
}
],
"dataRow": 1,
"row_count": 1
}

Notes on nulls and currency

  • Every field the event did not carry is null, never "" and never 0. A deposit_amount of null means the event reported no deposit; 0 would mean it reported a deposit of zero.

  • With reportCurrency, amounts are converted and rounded to 2 decimals, and the row's currency field is rewritten to the currency you asked for. If a row's currency has no available rate, or the event never said which currency it was in, that row is left alone and its currency field keeps naming the currency the amount is actually in.

  • brand_name and brand are two different things and are both reported on purpose.

Did this answer your question?