Overview
The Campaign History report returns an audit log of changes made to campaigns and their related entities (items, creatives, targeting, etc.). Use it to track who changed what and when. Records are combined from campaign, account, and creative history—some columns may be null or formatted differently depending on the entity type.
Endpoint
GET {url}/backstage/api/1.0/{account_id}/reports/campaign-history/dimensions/{dimension_id}Dimension cheat sheet
If a filter is not listed, then it is not supported by that dimension.
| Dimension | What it shows | Mandatory filters | Optional filters |
|---|---|---|---|
by_campaign | One change event per row for a single campaign. | start_date, end_date, campaign_param | activity_code, performer |
by_account | One change event per row for all campaigns (or a campaign group). | start_date, end_date | activity_code, performer, campaigns_group_id |
by_day_count | Activity counts aggregated by day (one row per day, with child rows per activity type and count). | start_date, end_date | campaign_param, activity_code, performer |
campaign_paramis required forby_campaignand disabled forby_account.campaigns_group_idapplies toby_accountonly and is disabled forby_campaign.
Query param filters
See the Dimension cheat sheet above to see which dimensions support which filters.
| Parameter | Type | Description |
|---|---|---|
start_date | string | Start date (yyyy-MM-dd). |
end_date | string | End date (yyyy-MM-dd). |
campaign_param | string | Campaign ID to filter by. |
activity_code | string | Filter by activity code. Use the resources to fetch a list of possible values. |
performer | string | Filter by performer (partial match, case-insensitive). |
campaigns_group_id | string | Campaign group ID. Use -1 for all. |
page | integer | Page number for pagination. |
page_size | integer | Records per page. |
sort | string | Sort column and direction. |
Response columns
| Column | Type | Description |
|---|---|---|
id | number | Record ID. |
account_id | number | The numeric account_id. |
account_name | string | Either the alphabetic account_id (e.g. "demo_advertiser") or the account display name (e.g. "Demo Advertiser"). |
campaign_id | number | Campaign ID. |
campaign_name | string | Campaign name. |
change_type | string | Type of change. |
activity_date | string | Date of the activity. |
activity_code | string | Activity code. Use the resources endpoint (below) to fetch a list of possible values. |
activity_code_description | string | Human-readable activity description. |
activity_details_code | string | Details-level code. |
activity_details_description | string | Human-readable details description. |
old_value | string | Previous value. |
new_value | string | New value. |
performer | string | User who made the change. |
change_time | string | Timestamp of the change (yyyy-MM-dd HH:mm:ss.S). |
parameters_details | string | Additional parameter details. |
The table above applies to by_campaign and by_account. For by_day_count, each row has activity_date and children_results (array of activity_code and activity_count)—see the sample below.
Sample requests
by_account
GET {url}/backstage/api/1.0/demo-network/reports/campaign-history/dimensions/by_account?start_date=2025-02-01&end_date=2025-03-08{
"results": [
{
"id": 1234,
"account_id": 456,
"account_name": "demo_advertiser",
"campaign_id": 789,
"campaign_name": "Summer 2025 Promo",
"change_type": "UPDATE",
"activity_code": "budgetAmount",
"activity_code_description": "Amount of campaign budget",
"activity_details_code": "MonthlyBudgetChanged",
"activity_details_description": "Monthly Budget Changed",
"old_value": "300.0",
"new_value": "330.0",
"performer": "[email protected]",
"change_time": "2025-03-08 23:09:36.0",
"parameters_details": "budgetType=MONTHLY"
},
{
"id": 1235,
"account_id": 456,
"account_name": "Demo Advertiser",
"campaign_id": null,
"campaign_name": null,
"change_type": "UPDATE",
"activity_code": "campaignsGroupStatus",
"activity_code_description": "Campaign Group Status",
"activity_details_code": "campaignsGroupStatusDesc",
"activity_details_description": "Q1 Campaign Group",
"old_value": "RUNNING",
"new_value": "PAUSED",
"performer": "[email protected]",
"change_time": "2025-03-08 21:09:30.0",
"parameters_details": null
}
],
"recordCount": 2,
"metadata": {
"total": 42,
"count": 2
}
}
account_id and account_name
account_idis the numeric account_id.account_namemay contain either the alphabetic account_id (e.g."demo_advertiser") or the account display name (e.g."Demo Advertiser"), depending on whether the record comes from campaign, account, or creative history. To resolve anaccount_idto a canonical name, use Get Account Details, Get Allowed Accounts, or Get Advertiser Accounts in Network.
by_day_count
Each row has activity_date and children_results (array of activity_code and activity_count):
GET {url}/backstage/api/1.0/demo-account/reports/campaign-history/dimensions/by_day_count?start_date=2025-03-01&end_date=2025-03-08{
"results": [
{
"activity_date": "2025-03-08",
"children_results": [
{"activity_code": "budgetAmount", "activity_count": 3},
{"activity_code": "campaignsGroupStatus", "activity_count": 3},
{"activity_code": "campaignEndDate", "activity_count": 2}
]
}
],
"recordCount": 1,
"metadata": {"total": 1, "count": 1}
}Get list of activity codes
Use the resources endpoint to fetch a list of activity codes for the activity_code filter. Each result has name (the code) and value (the human-readable description).
GET {url}/backstage/api/1.0/resources/history_log_properties/activity-codes{
"results": [
{"name": "budgetAmount", "value": "Amount of campaign budget"},
{"name": "campaignEndDate", "value": "Campaign End Date"},
{"name": "campaignStatus", "value": "Campaign Status Updated"},
{"name": "campaignsGroupStatus", "value": "Campaign Group Status"},
{"name": "creativeName", "value": "Creative Name Updated"}
],
"metadata": {}
}
DictionaryFor more information about the
resourcesendpoint, see: Dictionary Overview
