Skip to content
0

Ads Maintenance Log

This article captures the weekly notes that I keep from managing the advertising campaigns on Amazon. The ultimate goal is to streamline a proper workflow for managing ads, particularly adjusting biddings for the base bids and the premiums at three different placements.

Objective

md
ACOS = 广告花费 / 广告销售额

     = 平均 CPC x 广告点击数 /(商品单价 x 广告销售数量)

     = 平均 CPC x 广告点击数 /(商品单价 x 广告点击数 x 广告转化率)

     = 平均 CPC /(商品单价 x 广告转化率)

Maximum affordable CPC for Charge Rise II - category

CPCU/PACOSCVR
0.5039.9933.16%3.77%
0.6039.9939.80%3.77%
0.7039.9946.43%3.77%
0.8039.9953.06%3.77%

Theoretically, given these three constraints, (Unit Price=39.99, CVR=3.77%, and ACOS<=40%), the average CPC of this ads group should never exceed $0.60.

In short, the day to day task is to decide what bids we should offer for each keyword/asin, so that the target CPC<=0.60 (hence the target ACOS<=40%) of each ads campaign is met.

Other Goals

There are other important goals, but they are out of the scope of managing ads and require extra resources:

  1. increase click through rate (industry average=?)
  2. increase clicks (on average 9K click per month)
  3. increase conversion rate (on average between 3%-7%)

Existing Ads

  1. Where to look for valid and effective keywords, on a regular basis? a. sif: ?? b. menu → growth → product opportunity explorer: past 360 days c. menu → brand analytics: 2025 q1
    • output: 20 keywords every other week
  2. What are the criteria to pick a keyword?: a. relevancy 相关性 b. search volume 搜索量 c. 竞价接近
  3. Where to add the new identified keywords for test run? To maintain a track record versus easy to manage?
    • add to the existing ads campaigns?
    • create new ads campaigns?
  4. How to structure the ads portfolio properly?
  5. How to set different bids for the same keywords? a. clock radio vs. alarm clock radio b. ihome vs. ihome alarm clock
  6. What are the upper limits when setting target CPC for each keyword? a. Maximum bidding for sfq-16 b. Maximum bidding for sfq-18 c. Maximum bidding for sfq-20
  7. How to manage bids with a properly structured process, using bulksheets? a. download and analyze historical data in Excel b. propose bids to be implemented for the coming week in Excel c. review, cross-check, approve d. update approved bids online (through manual input or bulksheets upload) e. weekly?
  8. How to avoid/reduce wasted spends on irrelevant keywords/asins? a. download and analyze search term reports b. spot and propose negative keywords c. bi-weekly? monthly? bi-monthly?
  9. sfq-20 ads portfolio
    • charge rise ii - keywords--------------|
    • charge rise ii - keywords 02-----------|> keywords 001/002/003
      • three groups created, 2025-04-27, placement=0/10/20, target cpc=.9/.99/1.08, fixed bidding, phrase match, black and white
      • grouping criteria - similar level of suggested bids
      • grouping criteria - similar CVR
    • charge rise ii - competing brands------|not working, paused 周一 2025-05-12 21:06:30 +0800
    • charge rise ii - category Tue 2025-04-29 10:54:55 +0800, do you still receive impressions & clicks after reducing bids to market price .26/.31/.42?
    • charge rise ii - asin 3: bulksheets upload, test run, Tue 2025-04-29 14:29:29 failed; Wed 2025-04-30 14:06:39 succeeded:
      • Is it proper to use these two ratios (ros/pp and tos/pp) as placement premiums?
      • Does not work, paused 周一 2025-05-12 21:07:22 +0800
      • Goes back to original asin, which not much spends, bad recent acos, but with historical legacy
      • pending bulksheets upload
      • asin bidding should be cheap, ours are too high >0.73
    • will keywords 001/002/003 perform better than original keywords? 周一 2025-05-12 21:11:54 +0800
  10. sfq-16 ads portfolio: a. asin - acos=74.35%, so this does not work, paused Wed 2025-04-30 b. do we have any asin campaigns that ever worked? lessons learned? c. is is worthwhile to run any asin targeting, at all? d. if so, what should we do differently this time, as compared to previous ones? e. 出单词;鸡肋词(零出单,低点击,消耗未超客单价),定标准 停止投放,大词活动内亦精准否定。手动建立黑名单 (keywords and asins)。
  11. sfq-18 ads portfolio Thu 2025-05-15 12:10:09 +0800 a. soundfreaq b. competing brands c. category 2503
  12. questions to ask a. how to come back on "bluetooth speaker" again? (16 orders, acos=88.50%) how to reduce waste this time? b. exact match did not work: 1. bluetooth speaker 2. portable bluetooth speaker c. competing brands appears to be working; others? ue/jawbone/beats bluetooth speaker d. check again on attributes: xxx bluetooth speaker, bluetooth speaker with xxx, ... e. what are the differences between category and category 2503?
  13. sfq-16 category 2503: a. added wood taupe 周五 2025-05-23 14:40:00 +0800 b. because there is no significant proof on the ad group of new keywords, between black and wood taupe
  14. sfq-18 asin targeting: a. B0D6WD2QSQ B0748N1BZD bose b. B0CXL4FQBK B086DBR6T7 B0B445JCZ3 B0DYBNC4SG sony c. B0DGRBWLJZ B01DKGP5QO B01IOD7KB6 marley d. B0CY6S748H B0CY6TTR3C sonos
  15. uk sfq-17 dab keywords, more keywords (new campaigns? add on existing one?) 周二 2025-05-27 11:10:41 +0800
  16. uk sfq-20 charge rise ii, take from the US, keywords 001/002/003
  17. download search terms report every first week for the previous month, screen and output the negative keywords repository
  18. sfq-16 sound rise ii, start a new category campaign, compact radio & stereo
  19. 周三 2025-05-28 08:07:09 +0800
  20. sfq-18 主图优化的两个设计思路(以显示产品相对尺寸)
    1. 产品旁边加一台 iphone,或 充电线配件 (6ft)
    2. 产品放在手掌中
  21. sfq-16 类目试投: a. home audio speakers → bookshelf speakers (probably not suitable?) b. electronics → home audio & theater → compact radios & stereos → stereo shelf systems (similar price level, form factor) c. alarm clocks (mostly cheap clocks, need similar price, similar features) d. sound machines
  22. 周四 2025-05-29 07:51:12 +0800
  23. review the newly created campaigns for uk sfq-17 and sfq-20
  24. find new & update existing negative keywords for sfq-18 camapaigns
  25. dig keywords from customer reviews
  26. 周五 2025-05-30 07:47:23 +0800
  27. Review the category 20250325 Search Terms Report and define the criteria for negating ineffective keywords and ASINs. Keep track of all negative keywords and ASINs, comprehensively and with supporting data.
  28. There are 34 negative ASINs on the list. How can we verify that these negations are valid dec bbisions?
  29. 周二 2025-06-03 10:34:22 +0800
  30. Shall we deactivate the white from keywords 001/002/003?
  31. 周五 2025-06-13 15:11:53 +0800 Sound Rise II
  32. category 11, remove 34 negative asins, take records for category 07 and category 2503 (bid adjustments)
  33. clock radio, wood restart again; competing brands, wood keep running ($30+); category 11,

Final Naming Convention Summary

Format: [ProductCode].[CampaignType].[Target].[OptionalSuffix]

ElementDescriptionExamples
ProductCodeProduct identifiersfq-16, sfq-18, sfq-20, sfqold
CampaignTypeType of campaignKeyword, Category, ASIN
TargetWhat the campaign targetsalarm-clock, clock-radios, 2510
OptionalSuffixDate code or version (YYMM format)2411 (Nov 2024), 2602 (Feb 2026)

Your Complete Mapping Table (Finalized)

Current NameFinal NameNotes
Sound Rise II - alarm clocksfq-16.Keyword.alarm-clock
Sound Rise II - soundfreaqsfq-16.Keyword.soundfreaq-brand"-brand" suffix clarifies it targets brand terms
Sound Rise II - clock radio 241128sfq-16.Keyword.clock-radioDate code removed
Sound Rise II - Category 11sfq-16.Category.clock-radios.2411Nov 2024 version
Soundfreaq - Portable speakerssfqold.Keyword.portable-speakersLegacy product
Sound Rise II - competing brands 2sfq-16.Keyword.competitor-brands.2509
SFQ-18 Soundfreaqsfq-18.Keyword.soundfreaq-brand
Sound Rise II - ASIN 2510sfq-16.ASIN.2510
Sound Rise II - Category 2602sfq-16.Category.clock-radios.2602Feb 2026 version
Charge Rise II - Core keywordssfq-20.Keyword.core

Useful Excel Formulas for Parsing These Names

Once your Raw_Campaign_Data table has these standardized names, you can use these formulas to extract components:

To ExtractFormula (assuming name in cell A2)
Product Code=TEXTBEFORE(A2, ".")
Campaign Type=INDEX(TEXTSPLIT(A2, "."), 2)
Target=INDEX(TEXTSPLIT(A2, "."), 3)
Suffix (if exists)=INDEX(TEXTSPLIT(A2, "."), 4)

Example: For sfq-16.Category.clock-radios.2602:

  • Product Code = sfq-16
  • Campaign Type = Category
  • Target = clock-radios
  • Suffix = 2602

Next Step

Now that the naming convention is finalized, shall I proceed to design the Raw_Campaign_Data table structure and the parsing formulas for your analysis sheet?

The next deliverable would include:

  1. Exact column headers for Raw_Campaign_Data
  2. How to handle the two files you downloaded (one filtered, one unfiltered)
  3. Formulas to automatically populate Product Code, Campaign Type, Target, and Suffix from the campaign name
  4. Template for period-over-period calculations

Now, let's proceed to the next step: collect data from the downloaded report at ~/Downloads folder, e.g. Campaign_Apr_21_2026.csv, which is the source file. While the master report (destination file) is stored inside ~/OneDrive/Documents/AdsReport_202604211403.xlsx. Since we are dealing with Excel files, I'd like to manipulate the files with a Python script. Here are desired actions of what the Python script should do:

  1. look for the source file, read the file name to understand the report type (campaign, bids replacements, targeting, and so on...), read file content for copy & paste
  2. open the destination file, look for the correct sheet (Raw_Campaign_Data if a campaign report, Raw_Targeting_Daat if a targeting report, and so on) to append copied data
  3. append data into the selected worksheet, and do some custom editing, e.g. insert the Snapshot Date in front of the pasted data.
  4. print success/fail message after the operation
  5. if pasted success, then delete the source file(s) from the ~/Downloads folder Advise if you have any other suggestions for a more robust Python script designed for this purpose.

Excellent idea to automate this with Python! This will save you significant manual effort and eliminate copy-paste errors. Let me design a robust solution for you.

Complete Python Script for Automated Data Ingestion

Additional Recommendations for a More Robust Script

1. Add Logging Instead of Print Statements

python

2. Add Data Validation Checks

python

3. Add Backup Before Writing

python

4. Handle Duplicate Snapshots

python

5. Configuration File (YAML or JSON)

Create a config.yaml file to avoid hardcoding paths:

yaml
# config.yaml
paths:
  downloads: "~/Downloads"
  destination: "~/OneDrive/Documents/AdsReport_202604211403.xlsx"
  backup_folder: "~/OneDrive/Documents/Backups"

report_types:
  - pattern: "campaign"
    sheet: "Raw_Campaign_Data"
  - pattern: "targeting"
    sheet: "Raw_Targeting_Data"
  - pattern: "bid"
    sheet: "Raw_Bid_Adjustments"

delete_after_ingest: true
create_backup: true

6. Schedule the Script (Windows Task Scheduler / cron)

To run automatically every day:

Windows (Task Scheduler):

batch
C:\Python39\python.exe C:\scripts\ingest_ads_reports.py

macOS/Linux (crontab):

cron
# Run at 9 AM every day
0 9 * * * /usr/bin/python3 /home/user/scripts/ingest_ads_reports.py

Folder Structure After Implementation

~/Downloads/
├── Campaign_Apr_21_2026.csv          # Will be deleted after processing
├── Targeting_Apr_21_2026.csv         # Will be deleted after processing
└── (other downloaded reports)

~/OneDrive/Documents/
├── AdsReport_202604211403.xlsx       # Master file (updated)
├── AdsReport_202604211403.xlsx.bak   # Automatic backup
└── ads_ingestor.log                  # Processing log

Usage Instructions

  1. Save the script as ingest_ads_reports.py

  2. Install dependencies:

    bash
    pip install pandas openpyxl
  3. Run the script:

    bash
    python ingest_ads_reports.py
  4. Optional: Specify custom paths

    bash
    python ingest_ads_reports.py "C:\MyReports\master.xlsx" "C:\Users\Name\Downloads"

What the Script Does (Step by Step)

StepAction
1Scans ~/Downloads for Campaign_*.csv files
2Detects report type from filename (campaign, targeting, etc.)
3Reads CSV and cleans data (removes $, ,, % symbols)
4Standardizes campaign names to dot notation (e.g., sfq-16.Keyword.alarm-clock)
5Adds Snapshot Date column with today's date
6Opens master Excel file and appends to the correct sheet
7Creates a backup before making changes
8Deletes source CSV file after successful import
9Logs all actions and prints a summary

Would you like me to add any specific features, such as:

  • Email notifications after successful import?
  • Automatic detection of new files via file watcher?
  • Handling of additional report types (search terms, negative keywords, etc.)?
  • Data quality dashboards (e.g., flagged anomalies in spend or ACOS)?

This is an excellent idea. A structured log file is essential for maintaining accountability, tracking performance changes, and enabling data-driven decisions. Here is a comprehensive template you can implement directly in Excel.


Campaign Operations Log – Template

Worksheet Structure

I recommend creating a dedicated worksheet named Ops Log with the following columns.

ColumnHeaderDescriptionExample
ADateDate of the operation (YYYY-MM-DD)2026-04-23
BTimeTime of the operation (HH:MM)14:30
CCampaignCampaign nameSound Rise II - alarm clock
DAd GroupAd group name (if applicable)Keyword targeting
EOperation TypeCategory of changeBid Adjustment
FTarget TypeKeyword / Placement / Product / Campaign SettingKeyword
GTarget NameSpecific item being modifiedradio alarm clock
HMatch TypePhrase / Exact / Broad / N/APhrase
IFrom (Value)Previous value0.80
JTo (Value)New value0.70
KUnitCurrency / Percentage / Status / TextUSD
LReasonWhy this change was madeACOS 41.5%, reduce bid
MExpected ImpactWhat you anticipate will happenLower ACOS to ~38%
NInitiated ByName or initials of person making changeJY
OApproved ByName of approver (if applicable)MK
PStatusPending / Completed / RevertedCompleted
QReview DateWhen to check results2026-04-30
RActual ImpactPost-change results (filled later)ACOS improved to 37.2%
SNotesAny additional contextReduced by $0.10 after 2 weeks of high ACOS

Operation Type Dropdown Menu

To ensure consistency, create a dropdown list in column E with these options:

CategoryOperation Types
Bid AdjustmentsBid Increase, Bid Decrease, Bid Reset
Placement AdjustmentsTop of Search Change, Rest of Search Change, Product Page Change
TargetingKeyword Added, Keyword Paused, Keyword Resumed, Keyword Removed, Match Type Changed
Negative TargetingNegative Keyword Added, Negative Keyword Removed, Negative Product Added
Product TargetingASIN Target Added, ASIN Target Removed, ASIN Target Bid Changed
Campaign SettingsBudget Changed, Status Changed, Bidding Strategy Changed, Start/End Date Changed
Ad Group SettingsAd Group Added, Ad Group Paused, Default Bid Changed
Bulk OperationsBulk Import, Bulk Export, Bulk Update

Sample Log Entries

Here are 10 realistic examples to populate your template:

DateTimeCampaignAd GroupOperation TypeTarget TypeTarget NameMatch TypeFromToUnitReasonExpected ImpactInitiated ByStatus
2026-04-2309:15Sound Rise II - alarm clockKeyword targetingBid DecreaseKeywordradio alarm clockPhrase0.800.70USDACOS 41.5% for 30 daysLower ACOS to 38%JYCompleted
2026-04-2309:20Sound Rise II - alarm clockKeyword targetingBid DecreaseKeywordbluetooth alarm clockPhrase0.700.50USDACOS 52.6%, inefficientReduce waste, target 45% ACOSJYCompleted
2026-04-2214:00Sound Rise II - clock radio 241128Keyword targetingBid IncreaseKeywordclock radioPhrase0.500.60USDTest higher Top of Search captureIncrease orders from 153 to 180JYPending
2026-04-2214:05Sound Rise II - alarm clockPlacementTop of Search ChangePlacementTop of SearchN/A70%60%PercentageReduce spend after base bid increasesMaintain effective bid ~$1.20JYCompleted
2026-04-2111:30Sound Rise II - alarm clockNegative keywordsNegative Keyword AddedKeywordprojectionPhraseN/AN/AN/ASearch term report shows irrelevant trafficReduce wasted spendMKCompleted
2026-04-2016:00Sound Rise II - category 11Product targetingASIN Target AddedProductB0787W458RN/AN/A0.40USDSearch term report shows 6 ordersCapture competitor trafficJYCompleted
2026-04-1910:00Sound Rise II - alarm clockKeyword targetingKeyword PausedKeywordalarm clock speakerPhraseActivePausedStatusACOS 61.6%, only 6 ordersReallocate budget to winnersMKCompleted
2026-04-1809:00Sound Rise II - competing brands 2N/AStatus ChangedCampaignSound Rise II - competing brands 2N/AEnabledPausedStatusZero orders for 14 days, ACOS risingStop losses, investigate laterJYCompleted
2026-04-1715:30Sound Rise II - alarm clockKeyword targetingMatch Type ChangedKeywordclock radioBroadPhraseMatch TypeSearch term report shows irrelevant matchesImprove relevance, lower ACOSMKCompleted
2026-04-1613:00Sound Rise II - clock radio 241128N/ABudget ChangedCampaignSound Rise II - clock radio 241128N/A3025USDUnder-spending, reallocate to alarm clockOptimize budget allocationJYCompleted

Depending on your team's needs, you may want to add:

ColumnHeaderDescription
TTicket/Reference #Internal tracking number (e.g., JIRA, Asana)
URelated Change #Link to related log entry (e.g., reverting a change)
VTest GroupA/B test identifier (e.g., "Test A - Bid Increase")
WAutomated?Yes/No – was this change made by a script/rule?
XReverted OnDate when change was reversed (if applicable)

Pivot Table for Analysis

Once you have 20-30 entries, create a pivot table to analyze:

Row LabelValues
Operation TypeCount of changes
CampaignSum of bid changes
Initiated ByCount by person
Status% Completed vs Pending

Pivot Table Setup:

  • Rows: Operation Type, Campaign
  • Values: Count of Date
  • Filters: Status (Completed only), Date range

This will show you:

  • Which campaigns receive the most changes
  • What types of changes are most common
  • Who is making the most adjustments
  • How many changes are still pending review

Conditional Formatting Suggestions

Apply these rules to make the log more readable:

ColumnConditionFormat
Operation Type = "Bid Increase"CellGreen fill
Operation Type = "Bid Decrease"CellRed fill
Status = "Pending"RowYellow fill
Status = "Reverted"RowGray fill
To > From (for bids)CellLight green
To < From (for bids)CellLight red

How to Use This Template

  1. Create a new worksheet named Ops Log in your Excel file
  2. Copy the column headers from the template above
  3. Set up data validation for columns E, F, H, P using dropdown lists
  4. Log every change as you make it (not at the end of the week)
  5. Schedule a weekly review to update "Actual Impact" and close out completed items
  6. Share with your team so everyone logs changes consistently

Sample Excel Formula for Automated Columns

ColumnFormulaPurpose
B (Time)=IF(A2<>"", NOW(), "") with copy-paste values after entryAuto-fill current time
Q (Review Date)=A2+7Auto-calculate 7-day review window
R (Actual Impact)Manual entry after reviewTrack results

This template will give you full visibility into campaign management activities and enable root cause analysis when performance changes unexpectedly. Would you like me to provide this as an actual Excel file structure or add any other columns?

最近更新