Script 1679: pause low performing groups

Purpose:

The script pauses ad groups with over 100 clicks that have not generated any conversions in the past 30 days, provided they have been active for at least 30 days.

To Elaborate

The Python script is designed to manage advertising campaigns by identifying and pausing underperforming ad groups. Specifically, it targets ad groups that have received more than 100 clicks but have not resulted in any conversions or “Prime Starts” over the past 30 days. Additionally, these ad groups must have been active for at least 30 days to be considered for pausing. This process helps optimize advertising budgets by halting investment in ineffective ad groups, thereby allowing resources to be reallocated to more successful campaigns. The script processes input data to identify such groups and outputs a list of ad groups to be paused, ensuring that the necessary columns are present in the data.

Walking Through the Code

  1. Data Preparation
    • The script begins by defining constants for column names related to campaigns, groups, and accounts.
    • It retrieves the primary data source from a dictionary, dataSourceDict, using the key "1".
    • The script includes commented-out code for shifting the header row of the DataFrame, which suggests that the input data might require adjustment to align headers correctly.
  2. Data Validation and Output Preparation
    • The script checks if the necessary columns (Account, Campaign, Group) exist in the DataFrame after any adjustments.
    • If the columns are present, it creates an output DataFrame with the same columns and sets the Status and Group Status to “PAUSED” for each ad group.
    • If the columns are missing, it raises a ValueError to indicate the issue.
  3. User Changeable Parameters
    • The script allows for user-defined values in the output DataFrame, specifically for the Status and Group Status columns, which are currently set to “PAUSED”.

Vitals

  • Script ID : 1679
  • Client ID / Customer ID: 1306912115 / 69058
  • Action Type: Bulk Upload
  • Item Changed: AdGroup
  • Output Columns: Account, Campaign, Group, Status, Group Status
  • Linked Datasource: FTP/Email Feed
  • Reference Datasource: None
  • Owner: Chris Jetton (cjetton@marinsoftware.com)
  • Created by Chris Jetton on 2025-01-30 16:29
  • Last Updated by Chris Jetton on 2025-02-07 16:34
> See it in Action

Python Code

1
2
3
4
5
6
7
8
9
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
##
## name: pause_low_performing_groups
## description:
##  Pause ad groups with 100+ clicks who have not driven any Prime Starts/Conv in the past 30 days (must have been live for 30 days)
## 
## author: 
## created: 2025-01-30
## 

today = datetime.datetime.now(CLIENT_TIMEZONE).date()


RPT_COL_CAMPAIGN = 'Campaign'
RPT_COL_GROUP = 'Group'
RPT_COL_ACCOUNT = 'Account'

# primary data source and columns
inputDf = dataSourceDict["1"]
    
# Shift the header row to the correct position

#if len(inputDf) > 5:  # Ensure there are at least 6 rows
    #inputDf.columns = inputDf.iloc[5]  # Set the 6th row as headers
    #inputDf = inputDf[6:].reset_index(drop=True)  # Drop previous rows and reset index
#else:
    #raise ValueError("Input CSV file does not have enough rows to shift headers correctly.")


print("Headers after shifting:", inputDf.columns)

# output columns and initial values
BULK_COL_ACCOUNT = 'Account'
BULK_COL_CAMPAIGN = 'Campaign'
BULK_COL_GROUP = 'Group'
BULK_COL_STATUS = 'Status'
BULK_COL_GROUP_STATUS = 'Group Status'
#outputDf[BULK_COL_STATUS] = "<<YOUR VALUE>>"

# user code start here
print(tableize(inputDf.head()))


# Check if the necessary columns exist after the adjustment
if all(col in inputDf.columns for col in [RPT_COL_ACCOUNT, RPT_COL_CAMPAIGN, RPT_COL_GROUP]):
    # Output DataFrame
    outputDf = pd.DataFrame({
        'Account': inputDf[RPT_COL_ACCOUNT],
        'Campaign': inputDf[RPT_COL_CAMPAIGN],
        'Group': inputDf[RPT_COL_GROUP],
        'Status': "PAUSED",
        'Group Status': "PAUSED"
    })
    print(outputDf)
else:
    raise ValueError("The expected columns are not found in the adjusted DataFrame.")

Post generated on 2025-03-11 01:25:51 GMT

comments powered by Disqus