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 script is designed to optimize advertising campaigns by identifying and pausing ad groups that are underperforming. 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. This is contingent on the ad groups having been active for at least 30 days. By pausing these low-performing groups, the script helps in reallocating resources to more effective campaigns, thereby improving the overall efficiency and return on investment of the advertising efforts.
Walking Through the Code
- Data Preparation
- The script begins by accessing a primary data source, which is expected to be a DataFrame (
inputDf
) containing campaign data. - It includes a commented-out section for adjusting the DataFrame’s header row, ensuring the correct columns are used for processing.
- The script begins by accessing a primary data source, which is expected to be a DataFrame (
- Column Verification and Output Preparation
- The script checks if the necessary columns (
Account
,Campaign
,Group
) are present in the DataFrame. - If these columns exist, it creates a new DataFrame (
outputDf
) with the same columns and sets theStatus
andGroup Status
to “PAUSED” for each entry, indicating that these ad groups should be paused. - If the required columns are not found, it raises a
ValueError
to alert the user of the issue.
- The script checks if the necessary columns (
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-02-21 10:25:25 GMT