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 |
| number | All clicks |
| number | Unique clicks |
| number |
|
| number |
|
| number | Count of first-time depositors |
| number | Count of qualified FTDs |
| number |
|
| number |
|
| number | Number of deposits |
| number | Deposited amount |
| number |
|
| number |
|
| number |
|
| number |
|
| number |
|
| number or numeric string | Flat fees you configured in StatsDrone. Not currency-converted |
| number |
|
| number | Value of first-time deposits |
| number |
|
| number |
|
| number |
|
| number |
|
| number |
|
Plus, on daily rows only:
Field | Type | Notes |
| string | The day this row covers |
| string | When this row was last refreshed from the affiliate program |
and on monthly rows instead:
Field | Type | Notes |
| string | 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 Mediaabove is an account with no rows in the period — full context, emptystats.A monthly row looks the same but starts with
"month": "2026-08"and has nodate/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
tagsfilters 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, var1–var5, 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_mediumandutm_sourceare recent additions — see Article 8.Variables the traffic did not carry are
null.This is the one report where
dataRowcounts dates rather than rows, which is why the two counters disagree here. Userow_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_idandplayer_aliasare whatever the affiliate program supplies — often pseudonymous, and either can benull.countryis the program's own country value.Monthly rows start with
"month"and dropdateandlast_sync.This report has no
flat_feefield at all —total_incomeistotal_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
cityisnullwhen 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.balanceis alwaysnull. A balance is a figure read off the affiliate program; postbacks are callbacks into StatsDrone and never carry one. Reporting0.00would state a zero balance that is simply not something this report knows.There is no
total_incomeand no commission aggregation — the events are not period totals.Currency is per row, not per account. Each event carries its own
transaction_currencyandcommission_currency.labelsis 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.tagsfilters on account tags, as on the Accounts report.
Row fields
Field | Type | Notes |
| string or |
|
| string or | Full timestamp the event was received |
| string or | The name you gave the postback in StatsDrone |
| string or | The action type the postback is configured for |
| string or | The brand you set on the postback |
| string or | The brand the event carried |
| string or |
|
| string or |
|
| string or |
|
| string or |
|
| string or |
|
| string or |
|
| string or |
|
| string or |
|
| string or |
|
| string or |
|
| string or |
|
| string or | As the program sent them |
| string or |
|
| string or | Currency of the seven transaction amounts below |
| number or |
|
| number or |
|
| number or |
|
| number or |
|
| number or |
|
| number or |
|
| number or |
|
| number or |
|
| string or | Currency of |
| number or |
|
| string or |
|
| string or | 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 never0. Adeposit_amountofnullmeans the event reported no deposit;0would 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_nameandbrandare two different things and are both reported on purpose.
