Campaign History Report

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.

DimensionWhat it showsMandatory filtersOptional filters
by_campaignOne change event per row for a single campaign.start_date, end_date, campaign_paramactivity_code, performer
by_accountOne change event per row for all campaigns (or a campaign group).start_date, end_dateactivity_code, performer, campaigns_group_id
by_day_countActivity counts aggregated by day (one row per day, with child rows per activity type and count).start_date, end_datecampaign_param, activity_code, performer
  • campaign_param is required for by_campaign and disabled for by_account.
  • campaigns_group_id applies to by_account only and is disabled for by_campaign.

Query param filters

📘

See the Dimension cheat sheet above to see which dimensions support which filters.

ParameterTypeDescription
start_datestringStart date (yyyy-MM-dd).
end_datestringEnd date (yyyy-MM-dd).
campaign_paramstringCampaign ID to filter by.
activity_codestringFilter by activity code. Use the resources to fetch a list of possible values.
performerstringFilter by performer (partial match, case-insensitive).
campaigns_group_idstringCampaign group ID. Use -1 for all.
pageintegerPage number for pagination.
page_sizeintegerRecords per page.
sortstringSort column and direction.

Response columns

ColumnTypeDescription
idnumberRecord ID.
account_idnumberThe numeric account_id.
account_namestringEither the alphabetic account_id (e.g. "demo_advertiser") or the account display name (e.g. "Demo Advertiser").
campaign_idnumberCampaign ID.
campaign_namestringCampaign name.
change_typestringType of change.
activity_datestringDate of the activity.
activity_codestringActivity code. Use the resources endpoint (below) to fetch a list of possible values.
activity_code_descriptionstringHuman-readable activity description.
activity_details_codestringDetails-level code.
activity_details_descriptionstringHuman-readable details description.
old_valuestringPrevious value.
new_valuestringNew value.
performerstringUser who made the change.
change_timestringTimestamp of the change (yyyy-MM-dd HH:mm:ss.S).
parameters_detailsstringAdditional 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_id is the numeric account_id. account_name may 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 an account_id to 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": {}
}
👍

Dictionary

For more information about the resources endpoint, see: Dictionary Overview