AMZ123跨境卖家导航
拖动LOGO到书签栏,立即收藏AMZ123
首页跨境头条文章详情

如何使用 Python 和批量操作创建完美的亚马逊活动结构?

6241
2022-08-22 19:37
2022-08-22 19:37
6241


今天向大家展示如何利用编程语言 Python 和 Pandas 包来创建处理 Amazon 批量操作所需的电子表格。

  • 什么是亚马逊广告批量操作?

  • 什么是完美的广告系列结构?

  • 如何使用 Python 创建新的批量工作表?

  • 设置一些变量

  • 外部工作表的附加信息

  • 创建活动、广告组等的方法。

  • 启动一切的主要方法

  • 创建我们的亚马逊批量表

  • 概括

一、什么是亚马逊广告批量操作?

亚马逊广告批量操作(我们称之为批量工作表)是 Excel 表格,其中包含完整活动结构,包括相关的绩效指标。我们可以创建新的广告系列或使用批量表格更新现有的广告系列。还可以在此处找到下载和上传批量工作表的页面:


如果想批量创建或批量更新许多活动,而无需为每个活动逐一执行相同的操作,则批量工作表特别方便。

假设我们希望将 ACoS < 20 % 的 400 个商品推广活动中的每个活动的预算增加 10%。虽然我们可以在亚马逊的广告控制台中轻松做到这一点,但使用亚马逊的批量表格会更聪明。

它会像这样工作:

  • 从广告控制台下载最新的批量表

  • 例如 Microsoft Excel 中打开文件,然后转到“赞助产品”工作表

  • 过滤我们感兴趣的活动的工作表

  • 更改预算列,例如,使用临时列

  • 保存文件并将其重新上传到亚马逊

但是,今天我们不想着眼于更新现有的广告系列,而是为产品创建新的广告系列。

二、什么是完美的广告系列结构?

我们通常为单个产品或产品系列创建非常具体的活动。例如我们通常会创建以下手动商品推广活动:

  • 1 个具有通用关键字目标的广告系列(通用意味着关键字不包含任何品牌名称)

  • 1 个带有攻击性关键字目标的广告系列(攻击性意味着我们针对竞争对手的品牌)

  • 1 个具有攻击性产品目标的广告系列(即针对竞争对手的产品)

  • 1 个具有防御性关键字目标的广告系列(防御性意味着我们针对包含我们的品牌或产品名称的关键字)

  • 1 个具有防御性产品目标的广告系列(即针对我们的产品)

这样做是因为进攻性、通用性和防御性广告系列通常会显示非常不同的绩效指标,例如,竞标我们的品牌比竞标竞争对手的品牌“便宜”得多。通用运动通常比“进攻性”运动“昂贵”少,但另一方面,比“防御性”运动更昂贵。这意味着我们需要为每种类型设置不同的性能目标。如果 ACoS 是我们的主要目标,那么与防御活动相比,进攻活动需要更高的 ACoS 目标。

如果我们将所有目标都放在一个广告系列中,那么我们的情况就会好坏参半。当然,我们可以在目标级别管理此广告系列,但我们将如何分配预算?例如,将如何允许我们的防御性活动的预算高于我们的进攻性活动?这是不可能的。这是我们拆分广告系列的另一个原因。但是,为单个产品/产品系列创建这五个活动需要一些工作。这就是我们使用 Python 实现自动化的地方。

三、如何使用 Python 创建新的批量工作表?

要从头开始创建为给定产品创建有意义的活动的批量表,我们首先需要一些信息:

  • 应该宣传哪些 ASIN 或 SKU?

  • 自己和竞争对手的品牌是什么?

  • 要定位的关键字是什么?

  • 要定位的产品是什么?

我们需要组织这些信息,例如,在不同的 Excel-Sheet 或 Google Docs 中。我们将这些信息组织在单独的文本文件中。我们有其他脚本或多或少地自动创建这些文本文件,例如,从现有的(但无组织的)活动中创建。

(产品和关键字数据存储在不同的文本文件中)


我们为每个 ASIN、SKU 或 ASIN/SKU 组创建这些文件。然后脚本将遍历每个文件夹并为每个产品(组)创建这五个活动。因此唯一需要做的就是填充这些文件、运行脚本、上传批量工作表,然后就可以开始了。

以下是脚本的主要组成部分。显示每个代码行会占用太多位置,因此我们将专注于最重要的事情。

四、设置一些变量

由于我们将创建一个新的批量工作表,因此我们需要了解批量工作表及其不同实体的结构。与广告组或关键字目标相比,我们必须为广告系列定义不同的值。

例如,要创建一个新的广告系列,我们需要填写以下字段(如果我们下载,就会找到这些字段,例如,填充的批量表):

emptySpBulksheet ={    "Product":"Sponsored Products",    "Entity":"",    "Operation":"Create",    "Campaign Id":"",    "Ad Group Id":"",    "Portfolio Id":"",    "Ad Id (Read only)":"",    "Keyword Id (Read only)":"",    "Product Targeting Id (Read only)":"",    "Campaign Name":"",    "Ad Group Name":"",    "Start Date":"",    "End Date":"",    "Targeting Type":"",    "State":"",    "Daily Budget":"",    "SKU":"",    "ASIN":"",    "Ad Group Default Bid":"",    "Bid":"",    "Keyword Text":"",    "Match Type":"",    "Bidding Strategy":"",    "Placement":"",    "Percentage":"",    "Product Targeting Expression":""}

这些是需要填写的列。一些列属于特殊实体,例如,每日预算列仅指活动实体,对于品牌推广和展示推广活动,然后我们定义一些变量来定义脚本的行为。这里有些例子:

# CampaigncreateSPCampaigns =TruecampaignStatus ="Enabled"# Enter “Enabled”, “Paused”, or “Archived”campaignDailyBudget =20# EUR or USDcampaignBiddingStrategy ='Dynamic bids - down only'# Enter "Dynamic bids - down only", "Dynamic bids - up and down", or "Fixed bid".campaignStartDate = time.strftime("%Y%m%d")# Today as default, e.g. "20220529"campaignEndDate =""# “yyyymmdd”, can be empty# Adgroup (https://advertising.amazon.com/API/docs/en-us/bulk sheets/sp/sp-entities/sp-entity-ad-group)adgroupMaxBix =1.50 adgroupStatus ="Enabled"# Enter “Enabled”, “Paused”, or “Archived”# KeywordkeywordDefaultMatchType ='broad'negativeKeywordDefaultMatchType ='negativeExact'# negativePhrase or negativeExact# Toggles: Here you can define which type of targets to create (true) or not (false)addKeywordsGeneric   =TrueaddKeywordsDefensive =TrueaddKeywordsOffensive =FalseaddProductsOffensive =FalseaddProductsDefensive =False

我们对其他广告类型(SB、SD)执行相同的操作。

五、外部工作表的附加信息

有时我们还使用带有一些附加信息的 Excel 表格。与文本文件相比,使用 Excel 有时更容易。假设有一个单独的工作表,其中文件名存储在mainInputFile带有两张工作表的变量中:

  • 品牌和产品名称

  • 竞争对手的品牌和产品名称

要将这些品牌添加到我们的 python 脚本中,我们将执行以下操作:

# Read additional data from main input file (Google Doc -> Excel Sheet)xls = pd.ExcelFile(mainInputFile)dfB = pd.read_excel(xls, engine="openpyxl", sheet_name="Our brands")dfC = pd.read_excel(xls, engine="openpyxl", sheet_name="Competitor brands")ownBrands        = dfB['Brand'].unique().tolist()competitorBrands = dfC['Brand'].unique().tolist()# Make sure brands are lowercaseownBrands =list(map(str.lower, ownBrands))competitorBrands =list(map(str.lower, competitorBrands))

我们还做一些数据并将所有内容转换为小写,这使得以后的比较更容易。也可以将其硬编码到脚本中,但这种方法使其更加灵活,如果像我们那样与多个客户端一起工作,就很方便。

六、创建活动、广告组等的方法。

在下一步中需要定义一些函数/辅助方法,以便构建批量工作表。以下是创建结构化广告系列名称的示例,该名称也反映了广告系列的目标:

defgetCampaignName(targeting ="Manual", campaignType ="SP", type1="keyword", type2 ="generic", groupName ="default"):        prefix ="RE-"+ campaignType +"-"        # targeting    if targeting =="Manual":        targetingPrefix ="MANU-"    else:        targetingPrefix ="AUTO-"            # type1    if type1 =="keyword":        type1Prefix ="KW-"    else:        type1Prefix ="PT-"        # type 2    if type2 =="generic":        type2Prefix ="GEN-"    elif type2 =="offensive":        type2Prefix ="OFF-"    else:        type2Prefix ="DEF-"        groupName = groupName.strip()    groupName = groupName[:30].upper()        campaignName = prefix + targetingPrefix + type1Prefix + type2Prefix + groupName +'-'+ randomString        return campaignName

如上所见,我们的广告系列名称以前缀开头,因此可以轻松识别我们的广告系列。然后添加以下字符串:

  • “MANU”或“AUTO”,如果它是手动或自动活动(仅适用于商品推广活动)

  • “KW”或“PT”,如果它是关于关键字或产品定位的

  • 使用“GEN”、“OFF”或“DEF”表示目标类型(通用、进攻或防御)

  • 产品名称(组)

  • 每次运行脚本时都会更改的随机字符串

随机字符串使得过滤在单次运行中创建的活动变得容易,例如。如果犯了错误,我们可以轻松找到这些活动,例如,将它们存档并重新开始。然后我们创建不同的方法来创建实体,例如,这里有一个方法来填充创建活动所需的相关字段:

defcreateSpCampaign(targeting ="Manual", type1="none", type2 ="none", groupName ="none", customerPath ="none", counter =1, fileName =""):    global bulkSheetSp        campaignName = getCampaignName(targeting = targeting, campaignType ="SP", type1=type1, type2 = type2, groupName = groupName)        campaign = copy.deepcopy(emptySpBulksheet)# Create a deep copy        campaign['Entity']           ='Campaign'    campaign['Campaign Id']      = campaignName    campaign['Campaign Name']    = campaignName    campaign['Start Date']       = campaignStartDate    campaign['End Date']         = campaignEndDate    campaign['Targeting Type']   = targeting.upper()    campaign['State']            = campaignStatus    campaign['Daily Budget']     = campaignDailyBudget    campaign['Bidding Strategy']= campaignBiddingStrategy        if((bulkSheetSp['Entity']=='Campaign')&(bulkSheetSp['Campaign Id']== campaignName)).any():        pass# Do nothing, we already have this campaign    else:        bulkSheetSp = bulkSheetSp.append(campaign, ignore_index=True)        # Create adgroup              createSpAdgroup(targeting = targeting, type1=type1, type2 = type2, groupName = groupName, campaignName = campaignName, customerPath = customerPath, counter = counter, fileName = fileName)

首先复制我们的“空批量表”并用所有必要的数据填充它。然后,此方法调用 next 方法createSpAdgroup,该方法执行与上图类似的操作,仅针对广告组。这将传递给广告系列的所有信息也会传递给广告组。

此方法如下所示:

defcreateSpAdgroup(targeting ="Manual", type1="none", type2 ="none", groupName ="none", campaignName ='none', customerPath ="none", counter =1, fileName =""):        counterString =f"{counter:02}"        global bulkSheetSp        adgroupName  = getCampaignName(targeting = targeting, campaignType ="SP", type1=type1, type2 = type2, groupName = groupName)+'-AG'+'-'+ counterString        adgroup = copy.deepcopy(emptySpBulksheet)# Create a deep copy to not alter emptySpBulksheet        adgroup['Entity']        ='Ad Group'    adgroup['Campaign Id']   = campaignName    adgroup['Ad Group Name']= adgroupName    adgroup['Ad Group Id']   = adgroupName    adgroup['State']         = adgroupStatus    adgroup['Ad Group Default Bid']= adgroupMaxBix            bulkSheetSp = bulkSheetSp.append(adgroup, ignore_index=True)    # Create ad        createSpAd(targeting = targeting, type1=type1, type2=type2, groupName=groupName, campaignName=campaignName, adgroupName=adgroupName, customerPath = customerPath)        if type1 =="keyword":        createSpKeywordTarget(targeting = targeting, type1=type1, type2=type2, groupName=groupName, campaignName=campaignName, adgroupName=adgroupName, customerPath = customerPath, fileName = fileName)    if type1 =="product":        createSpProductTarget(targeting = targeting, type1=type1, type2=type2, groupName=groupName, campaignName=campaignName, adgroupName=adgroupName, customerPath = customerPath)

我们以相同的方式定义了创建广告、关键字目标、产品目标、否定关键字等所需的所有其他方法。

七、启动一切的主要方法

然后需要我们的主脚本来启动它。比如这样:

if createSPCampaigns:        # Create empty bulksheet    bulkSheetSp = pd.DataFrame(data=emptySpBulksheet, index=[0])    # Get all products or product groups stored in different folders    productGroups = list_paths(customerPath)    productGroupsLength =len(productGroups)    j =0    randomString = randStr(N=5)# Create a random string    for productGroup in productGroups:                j = j +1                # Check which files are available        all_files =sorted(glob.glob(customerPath  +'/'+ productGroup +'/*.txt'))                counter =0        forfilein all_files:            if(addKeywordsOffensive)&('keywords-offensive.txt'infile):                createSpCampaign(targeting ="Manual", type1="keyword", type2 ="offensive", groupName = productGroup, customerPath = customerPath, fileName =file)                        if(addKeywordsGeneric ==True)&('keywords-generic.txt'infile):                counter = counter +1                createSpCampaign(targeting ="Manual", type1="keyword", type2 ="generic", groupName = productGroup, customerPath = customerPath, counter = counter, fileName =file)                        if(addKeywordsDefensive)&('keywords-defensive.txt'infile):                createSpCampaign(targeting ="Manual", type1="keyword", type2 ="defensive", groupName = productGroup, customerPath = customerPath, fileName =file)                        if(addProductsDefensive)&('products-defensive.txt'infile):                createSpCampaign(targeting ="Manual", type1="product", type2 ="defensive", groupName = productGroup, customerPath = customerPath, fileName =file)                        if(addProductsOffensive)&('products-offensive.txt'infile):                createSpCampaign(targeting ="Manual", type1="product", type2 ="offensive", groupName = productGroup, customerPath = customerPath, fileName =file)

出于教学原因,我删除了一些行,例如,在解析文件之前清理文件(删除空白行、删除重复的关键字等)。如果文件包含超过 1.000 个关键字,我们的脚本也会处理这种情况。如果使用排列,就会很快见效,因为我们想在广泛匹配的情况下使用词组匹配。

八、创建亚马逊批量表

最后但并非最不重要的一点是,我们需要将数据导出到 Excel 表,然后我们可以上传到亚马逊。

这像这样工作:

# Remove empty rowsif createSPCampaigns:    bulkSheetSp['Entity'].replace('', np.nan, inplace=True)    bulkSheetSp.dropna(subset=['Entity'], inplace=True)# Filenametoday = time.strftime("%Y-%m-%d-%H-%M")# Today as defaultoutputFile = customerPath +'/'+ today +'-'+ slugify(customer)+'-campaign-create-bulksheet.xlsx'outputFile = outputFile.replace("input-","")# Export to Excelwith pd.ExcelWriter(outputFile)as writer:      if createSPCampaigns:        bulkSheetSp.to_excel(writer, sheet_name='Sponsored Products Campaigns', index=False)

九、概括

一切就绪后,我们可以发挥创造力来快速填充这些 txt 文件或主输入表。以下是一些帮助大家入门的想法:

  • 根据品牌分析中的搜索词报告快速生成关键字和产品目标创意

  • 在这里也使用我们的亚马逊 SEO 研究中的关键字

如果我们的客户要求重新组织现有的活动并利用表现良好的关键字,例如,我们会解析现有的批量表并提取所有产品,包括。表现良好的目标。然后将每个目标放入正确的存储桶中,并在几分钟内运行脚本。

(免责声明:我们尊重原创。本平台提供的学习资料来源互联网和其它公众平台,主要目的在于分享信息,让更多人获得跨境行业学习资料,版权归原作者所有,内容仅供读者参考,如有侵犯您的权益或版权请及时告知我们,我们将尽快删除!)

免责声明
本文链接:
本文经作者许可发布在AMZ123跨境头条,如有疑问,请联系客服。
最新热门报告作者标签
俄罗斯电商市场快速增长,综合平台优势大于独立站
AMZ123获悉,近日,Euromonitor、EMARKETER及Yakov and Partners发布了《俄罗斯电商市场发展现状》报告。报告基于2020-2024年的数据,对俄罗斯电商市场的发展趋势、综合电商平台与独立电商的竞争格局、各品类表现、未来市场预测进行了系统分析。一、俄罗斯电商趋势1.互联网渗透率增长放缓2020至2024年,俄罗斯互联网使用率从78.1%(约9560万用户)提升至85.5%(约1.04亿用户),四年间增加7.4%(新增约790万用户)。俄罗斯的互联网渗透率增速正在逐年放缓,预计到2029年互联网渗透率将达到89%(约1.08亿用户)。
越南加强进口商品监管,修订多项增值税和海关规则
AMZ123获悉,近日,越南海关公布了2026年对增值税(VAT)、特别消费税(SCT)及电子交易管理的多项修订,核心在于统一税制规则、扩大免税范围并加强跨境与电子化申报管理。此次调整既有减轻企业合规成本、扶持出口与产业链升级的内容,也伴随对部分消费品与临时进口再出口环节的更严监管,直接影响生产、进出口和跨境电商卖家。在增值税方面,新法律将此前零散的官方函件并入法律和配套法令,提升透明度并便于电子化处理。关键变化包括扩大增值税免税目录:列入政府清单的自然资源与矿产(无论原料还是加工品)在出口时被明确归为增值税免税项目。
TikTok Shop黑五复盘,一堆中国卖家晒出百万GMV
黑五复盘,TikTok卖家:“库存差点给我爆完了!”
存生命危险!美国CPSC紧急召回超1万件儿童手写板玩具
AMZ123获悉,近日,美国消费品安全委员会(CPSC)宣布,紧急召回亚马逊在售的KTEBO品牌的儿童书写板玩具,原因是该产品未能符合玩具类产品的强制性安全标准,电池仓固定螺丝无法保持牢固,可能导致纽扣电池外露。若儿童误吞纽扣电池,可能造成严重伤害、内部化学灼伤,甚至威胁生命。此次召回涉及KTEBO品牌的双件套书写平板玩具,召回数量约10,380件,产品提供四种颜色组合,包括粉色/蓝色、绿色/黄色、橙色/蓝色以及紫色/红色,并有8.5英寸与10英寸两种规格,每套配有与机身同色的手写笔。
AliExpress波兰11月增长显著,双十一活动日活用户增长37%
AMZ123获悉,近日,AliExpress的数据显示,平台11月的消费者参与度与卖家销售额大幅增长。今年11月11日至19日举行的AliExpress双十一购物节活动期间,波兰用户的参与度显著提升,日活跃用户数量同比增长37%。随着去年秋季AliExpress开放波兰本地卖家入驻,今年波兰本地卖家的参与度也明显提高,他们在此次双十一促销期间的GMV同比增长74%。从消费偏好来看,智能生活类产品持续吸引波兰消费者,智能家居与清洁设备成为销售榜单的主导品类。Dreame、ILIFE、Laresar等品牌的扫地机器人和自动吸尘设备进入最畅销产品行列,反映波兰家庭对智能化、便捷化生活方式的需求不断上升。
亚马逊印度计划投资127亿美元,推动本地云和AI基础设施建设
AMZ123获悉,近日,亚马逊宣布,将在2030年前进一步推动人工智能在印度的普及,计划投入127亿美元建设本地云和AI基础设施。亚马逊表示,这项长期投资将为超过1500万家中小企业带来AI应用能力,同时在2030年前为400万名公立学校学生提供AI素养课程与职业教育,提高数字技能普及度。亚马逊认为,AI正成为提升印度数字包容性的关键力量,能够突破语言、读写能力与访问渠道的限制,让更多个人与企业受益。在中小企业领域,亚马逊正在推出新一代AI工具,以降低经营门槛、简化业务操作并提升增长效率。
“黑五网一”DTC投放数据复盘,流量都去哪了?
2025 年“黑五网一”大战,终于落下帷幕。除了 GMV ,这场仗花了多少“弹药”,你算清楚了吗?流量场上的每一发子弹,都正中靶心了吗?偏离的原因找到了吗?除了看自己后台的数据,还要看清整个大盘的趋势——这决定了我们下一步该往哪儿走。基于 GoodsFox 监控的投放数据,我们有以下发现:服装、美妆的竞争力度只增不减3D 打印与机械键盘,从“小众圈层”跃升为热门赛道宠物经济的流量稳定,不靠爆点也能撑起大盘这些变化背后,都在重塑今年“黑五网一”的投放结构,我们先从流量基本盘讲起——尽管每年都有新风口,但从广告投放的绝对体量来看,传统大盘仍在支撑整体流量水位。
还在“索评”?亚马逊Review管理的红线与出路
亚马逊的评论管理格局是如何改变的?首先要明确一点:过去几年,亚马逊的Review生态系统发生了剧变,这对各类管理工具产生了深远影响。在买家端,那些专门用来标记“虚假评论”(或帮助买家鉴别真伪)的老一代工具正在失效甚至消失。不少买家就因为Fakespot在平台冲突、合规问题和数据接口变更的压力下关停而感到措手不及。Fakespot是一个分析电商产品评论真实性、帮助消费者识别虚假评价的平台。在卖家端,亚马逊的政策合规和风控机制变得更加严厉。这意味着Review的风险红线变了:以前那些“地毯式索评”或“送测(Giveaway)”的套路可能有效,但现在操作这些手段的封号风险极高。
AMZ123PayPal计算器使用指南及常见问题详解(内附计算公式)
Paypal手续费计算器介绍及计算公式分享 https://www.amz123.com/tools-paypal
重磅!亚马逊公布2026年战略重心变化
AMZ123获悉,12月4日,2025年亚马逊全球开店跨境峰会上,亚马逊回顾了过去一年里中国卖家在亚马逊上所取得的进展,并围绕2026年四大业务战略重点——供应链服务、AI赋能、全球拓展布局、本地服务,揭晓了40余项创新举措。根据亚马逊披露的数据:2025年以来,中国卖家通过亚马逊全球站点售出数十亿件商品,在美欧等成熟站点的销售额增长超过15%,在新兴站点的销售额增长超过30%;2025年以来,销售额达到200万、500万、800万美金的中国卖家数量,增长均超过20%;销售额超过1000万美金的中国卖家数量,增幅近30%。
卖家还在等口径!欠税公示制度却已明确落地
卖家还在“等政策”,但政策已明确趋严过去几个月里,跨境卖家对税务政策最大的期待就是——“能不能再等等,看会不会有新口径”。但事实上,政策并没有往宽松走,而是沿着“数据透明—提醒申报—强化监管”这条路径一步步推进。AMZ123了解到,目前已有超过7000家境内外平台完成涉税信息报送,卖家的线上线下销售数据已全面纳入监管体系。随着数据比对展开,税务部门对申报明显低于平台数据的经营者陆续发出提示,要求补充申报;多数卖家在收到提示后完成了更正,但也的确还有部分经营者迟迟没有动作,继续处于观望甚至低申报的状态。在这种情况下,监管的态度也开始变得更为明确:对于未按规定申报的行为,将从提醒阶段进入到强化管理阶段。
亚马逊新功能,能救你一整条链接!
最近有卖家后台发现,亚马逊多了一个新功能,看起来不起眼,实则很关键——绩效提醒(Performance Notifications)。这个功能解决了我们运营过程中的一个老大难:链接出问题时能不能第一时间被提醒?以前我们发现Listing出状况,大多靠“事后诸葛”:出单突然断了,去查是不是被下架;关键词排名一夜暴跌,才想起去对比转化率;广告Acos拉爆、CTR异常,才知道图可能挂了;等你发现问题,可能已经晚了。这次,亚马逊终于“良心发现”,开始主动提醒你链接的数据异常了。这个新功能到底能干啥?说白了,它就是一个链接级别的数据异常预警系统。
汽配类目又现吸金王,TikTok卖家30天入账1100万
月销量暴涨36007900%,这一汽配用品在TikTok卖爆了
跨界AI失败?深圳大卖资产重组终止!
12月2日,跨境3C 配件大卖杰美特发布公告,宣布决定终止筹划以现金方式收购AI 算力解决方案提供商思腾合力(天津)科技有限公司(以下简称“思腾合力”)控制权的重大资产重组事项。这场筹划半年、备受行业关注的跨界收购突然落幕,消息一出引发市场热议。AMZ123获悉,杰美特于2025年6月21日首次披露了筹划重组的提示性公告,拟通过现金交易控股思腾合力,该交易初步测算构成重大资产重组,且不涉及发行股份、不构成关联交易,也不会导致公司控制权变更。杰美特是“中国手机壳第一股”,主营业务为移动智能终端保护类产品的研发、设计与销售,产品包括手机、平板及穿戴设备的保护壳与表带等。
TikTok Shop英国站黑五创历史新高,销售额同比飙升50%
AMZ123获悉,近日,根据TikTok的公告,TikTok Shop英国站在今年黑色星期五期间创下平台历史最高销售纪录,整体销售额较去年同期提升50%。高峰期出现在黑色星期五当天,当日每秒售出27件商品,刷新TikTok Shop在英国的单日销售纪录。今年消费者开始促销季的时间更早,“假黑五”(Fake Friday,即黑五前一周)的销售额达到去年黑色星期五的纪录水平。黑五周末期间,“TikTok Shop Black Friday”搜索量同比增长404%,成为2025年与黑五相关的最高热度搜索词。同期,平台活跃购物人数较去年增加28%。
宠物消费持续升温,亚马逊10款月销过万宠物产品推荐
AMZ123获悉,近日,亚马逊各类产品搜索量增长显著,以下10款产品在亚马逊上销量表现突出,深受消费者欢迎。1. 猫咪情绪舒缓喷雾预计销售额:139.84万美元/月销量:26,000+星级评分:4.4好评数量:12,694+图源:亚马逊产品描述:FELIWAY Optimum猫咪情绪舒缓喷雾的专利信息素复合物能显著减少猫咪的应激表现,包括喷尿、抓挠、恐惧反应、紧张冲突等。产品无药性、安全且不干扰人类与其他宠物,每个喷雾覆盖面积约 700 平方英尺。
《亚马逊生活日用品类攻略手册》PDF下载
作为日常生活不可或缺的重要组成,生活百货品类覆盖范围广泛,包括家居用品、家具、车用配件、户外装备、园艺 工具、运动器材、家装用品、厨房、玩具以及宠物用品等众多领域。这类产品不仅是满足基本生活所需,更体现了人们对美好生活的向往和追求。
《掘金泰国-市场洞察与战略机遇报告2025》PDF下载
随着全球经济一体化的加速,泰国作为东盟的核心枢纽,凭借其独特的地缘优势庞大的消费市场以及持续优化的营商环境,成为众多企业战略布局的重要目标。本报告深入剖析泰国市场的政策红利、消费趋势、产业机遇以及合规挑战,旨在为有志于开拓泰国市场的中国企业提供行动指南,助力企业在东盟这片充满活力的土地上把握机遇、应对挑战、!实现可持续发展。
《2025欧美假日购物季营销指南》PDF下载
2025年美国假日购物季零售额预计同比仅增长1.2%,总销售额约1.359万亿美元,虽仍保持正增长,但为2009年以来最低增速,市场正在步入低增长的新常态。
《2025年跨境电商东南亚市场进入战略白皮书》PDF下载
东南亚电商,正以惊人的速度复刻中国电商高速增长的黄金时代。2024年东南亚电商GMV达到1284亿美元,短短5年涨幅超过3倍。全球电商2024年GMV增幅最快的十大市场中,东南亚独占四席。东南亚是拥有约6.7亿人口的广阔市场,在现今全球关税的不确定性大格局下,因其电商基建完善,利好的贸易政策,和更高的年轻人口占比,成为跨境卖家生意拓张焦点之一。
《2025年TikTok Shop玩具品类行业报告(欧美站)》PDF下载
分析TikTok Shop美国市场、英国市场、西班牙市场、墨西哥市场等主流市场点短视频及直播电商数据,选取TikTok与玩具爱好品类相关的内容进行分析报告。
《2025 洗护品类趋势与创新洞察》PDF下载
本报告独特价值:将消费者的“行为结果”据),揭示消费者深层心理动机、并能精准预判未来增长机会
《亚马逊双轨增长指南》PDF下载
亚马逊以“以客户为中心”为核心理念,通过整合B2B与B2C的全渠道服务,帮助卖家实现“一店双拓”-- 一次上架,同步触达个人消费者与企业买家,获得双重收益。同时,基于Direct to Buyer(直接触达买家)的模式,更能有效减少中间环节,提升利润空间与品牌掌控力。
《亚马逊全球线上商采趋势与区域洞察》PDF下载
随着全球企业数字化转型的深入推进,B2B商采有望成为下一个万亿级别的蓝海市场然而,中国卖家在开拓海外企业商采市场时往往面临着一个关键挑战:难以准确把握海外企业买家的商采行为和决策模式。这种认知偏差不仅影响了产品开发方向,也制约了市场拓展策略的制定。
AMZ123会员
「AMZ123会员」为出海者推出的一站式私享服务
AMZ123卖家导航
这个人很懒,还没有自我介绍
欧洲电商资讯
AMZ123旗下欧洲跨境电商新闻栏目,专注欧洲跨境电商热点资讯,为广大卖家提供欧洲跨境电商最新动态、最热新闻。
亚马逊公告
AMZ123旗下亚马逊公告发布平台,实时更新亚马逊最新公告,致力打造最及时和有态度的亚马逊公告栏目!
AMZ123选品观察员
选品推荐及选品技巧分享。
跨境电商赢商荟
跨境电商行业唯一一家一年365天不断更的媒体!
侃侃跨境那些事儿
不侃废话,挣钱要紧!
跨境平台资讯
AMZ123旗下跨境电商平台新闻栏目,专注全球跨境电商平台热点事件,为广大卖家提供跨境电商平台最新动态、最热新闻。
首页
跨境头条
文章详情
如何使用 Python 和批量操作创建完美的亚马逊活动结构?
跨境电商SellerWin
2022-08-22 19:37
6241


今天向大家展示如何利用编程语言 Python 和 Pandas 包来创建处理 Amazon 批量操作所需的电子表格。

  • 什么是亚马逊广告批量操作?

  • 什么是完美的广告系列结构?

  • 如何使用 Python 创建新的批量工作表?

  • 设置一些变量

  • 外部工作表的附加信息

  • 创建活动、广告组等的方法。

  • 启动一切的主要方法

  • 创建我们的亚马逊批量表

  • 概括

一、什么是亚马逊广告批量操作?

亚马逊广告批量操作(我们称之为批量工作表)是 Excel 表格,其中包含完整活动结构,包括相关的绩效指标。我们可以创建新的广告系列或使用批量表格更新现有的广告系列。还可以在此处找到下载和上传批量工作表的页面:


如果想批量创建或批量更新许多活动,而无需为每个活动逐一执行相同的操作,则批量工作表特别方便。

假设我们希望将 ACoS < 20 % 的 400 个商品推广活动中的每个活动的预算增加 10%。虽然我们可以在亚马逊的广告控制台中轻松做到这一点,但使用亚马逊的批量表格会更聪明。

它会像这样工作:

  • 从广告控制台下载最新的批量表

  • 例如 Microsoft Excel 中打开文件,然后转到“赞助产品”工作表

  • 过滤我们感兴趣的活动的工作表

  • 更改预算列,例如,使用临时列

  • 保存文件并将其重新上传到亚马逊

但是,今天我们不想着眼于更新现有的广告系列,而是为产品创建新的广告系列。

二、什么是完美的广告系列结构?

我们通常为单个产品或产品系列创建非常具体的活动。例如我们通常会创建以下手动商品推广活动:

  • 1 个具有通用关键字目标的广告系列(通用意味着关键字不包含任何品牌名称)

  • 1 个带有攻击性关键字目标的广告系列(攻击性意味着我们针对竞争对手的品牌)

  • 1 个具有攻击性产品目标的广告系列(即针对竞争对手的产品)

  • 1 个具有防御性关键字目标的广告系列(防御性意味着我们针对包含我们的品牌或产品名称的关键字)

  • 1 个具有防御性产品目标的广告系列(即针对我们的产品)

这样做是因为进攻性、通用性和防御性广告系列通常会显示非常不同的绩效指标,例如,竞标我们的品牌比竞标竞争对手的品牌“便宜”得多。通用运动通常比“进攻性”运动“昂贵”少,但另一方面,比“防御性”运动更昂贵。这意味着我们需要为每种类型设置不同的性能目标。如果 ACoS 是我们的主要目标,那么与防御活动相比,进攻活动需要更高的 ACoS 目标。

如果我们将所有目标都放在一个广告系列中,那么我们的情况就会好坏参半。当然,我们可以在目标级别管理此广告系列,但我们将如何分配预算?例如,将如何允许我们的防御性活动的预算高于我们的进攻性活动?这是不可能的。这是我们拆分广告系列的另一个原因。但是,为单个产品/产品系列创建这五个活动需要一些工作。这就是我们使用 Python 实现自动化的地方。

三、如何使用 Python 创建新的批量工作表?

要从头开始创建为给定产品创建有意义的活动的批量表,我们首先需要一些信息:

  • 应该宣传哪些 ASIN 或 SKU?

  • 自己和竞争对手的品牌是什么?

  • 要定位的关键字是什么?

  • 要定位的产品是什么?

我们需要组织这些信息,例如,在不同的 Excel-Sheet 或 Google Docs 中。我们将这些信息组织在单独的文本文件中。我们有其他脚本或多或少地自动创建这些文本文件,例如,从现有的(但无组织的)活动中创建。

(产品和关键字数据存储在不同的文本文件中)


我们为每个 ASIN、SKU 或 ASIN/SKU 组创建这些文件。然后脚本将遍历每个文件夹并为每个产品(组)创建这五个活动。因此唯一需要做的就是填充这些文件、运行脚本、上传批量工作表,然后就可以开始了。

以下是脚本的主要组成部分。显示每个代码行会占用太多位置,因此我们将专注于最重要的事情。

四、设置一些变量

由于我们将创建一个新的批量工作表,因此我们需要了解批量工作表及其不同实体的结构。与广告组或关键字目标相比,我们必须为广告系列定义不同的值。

例如,要创建一个新的广告系列,我们需要填写以下字段(如果我们下载,就会找到这些字段,例如,填充的批量表):

emptySpBulksheet ={    "Product":"Sponsored Products",    "Entity":"",    "Operation":"Create",    "Campaign Id":"",    "Ad Group Id":"",    "Portfolio Id":"",    "Ad Id (Read only)":"",    "Keyword Id (Read only)":"",    "Product Targeting Id (Read only)":"",    "Campaign Name":"",    "Ad Group Name":"",    "Start Date":"",    "End Date":"",    "Targeting Type":"",    "State":"",    "Daily Budget":"",    "SKU":"",    "ASIN":"",    "Ad Group Default Bid":"",    "Bid":"",    "Keyword Text":"",    "Match Type":"",    "Bidding Strategy":"",    "Placement":"",    "Percentage":"",    "Product Targeting Expression":""}

这些是需要填写的列。一些列属于特殊实体,例如,每日预算列仅指活动实体,对于品牌推广和展示推广活动,然后我们定义一些变量来定义脚本的行为。这里有些例子:

# CampaigncreateSPCampaigns =TruecampaignStatus ="Enabled"# Enter “Enabled”, “Paused”, or “Archived”campaignDailyBudget =20# EUR or USDcampaignBiddingStrategy ='Dynamic bids - down only'# Enter "Dynamic bids - down only", "Dynamic bids - up and down", or "Fixed bid".campaignStartDate = time.strftime("%Y%m%d")# Today as default, e.g. "20220529"campaignEndDate =""# “yyyymmdd”, can be empty# Adgroup (https://advertising.amazon.com/API/docs/en-us/bulk sheets/sp/sp-entities/sp-entity-ad-group)adgroupMaxBix =1.50 adgroupStatus ="Enabled"# Enter “Enabled”, “Paused”, or “Archived”# KeywordkeywordDefaultMatchType ='broad'negativeKeywordDefaultMatchType ='negativeExact'# negativePhrase or negativeExact# Toggles: Here you can define which type of targets to create (true) or not (false)addKeywordsGeneric   =TrueaddKeywordsDefensive =TrueaddKeywordsOffensive =FalseaddProductsOffensive =FalseaddProductsDefensive =False

我们对其他广告类型(SB、SD)执行相同的操作。

五、外部工作表的附加信息

有时我们还使用带有一些附加信息的 Excel 表格。与文本文件相比,使用 Excel 有时更容易。假设有一个单独的工作表,其中文件名存储在mainInputFile带有两张工作表的变量中:

  • 品牌和产品名称

  • 竞争对手的品牌和产品名称

要将这些品牌添加到我们的 python 脚本中,我们将执行以下操作:

# Read additional data from main input file (Google Doc -> Excel Sheet)xls = pd.ExcelFile(mainInputFile)dfB = pd.read_excel(xls, engine="openpyxl", sheet_name="Our brands")dfC = pd.read_excel(xls, engine="openpyxl", sheet_name="Competitor brands")ownBrands        = dfB['Brand'].unique().tolist()competitorBrands = dfC['Brand'].unique().tolist()# Make sure brands are lowercaseownBrands =list(map(str.lower, ownBrands))competitorBrands =list(map(str.lower, competitorBrands))

我们还做一些数据并将所有内容转换为小写,这使得以后的比较更容易。也可以将其硬编码到脚本中,但这种方法使其更加灵活,如果像我们那样与多个客户端一起工作,就很方便。

六、创建活动、广告组等的方法。

在下一步中需要定义一些函数/辅助方法,以便构建批量工作表。以下是创建结构化广告系列名称的示例,该名称也反映了广告系列的目标:

defgetCampaignName(targeting ="Manual", campaignType ="SP", type1="keyword", type2 ="generic", groupName ="default"):        prefix ="RE-"+ campaignType +"-"        # targeting    if targeting =="Manual":        targetingPrefix ="MANU-"    else:        targetingPrefix ="AUTO-"            # type1    if type1 =="keyword":        type1Prefix ="KW-"    else:        type1Prefix ="PT-"        # type 2    if type2 =="generic":        type2Prefix ="GEN-"    elif type2 =="offensive":        type2Prefix ="OFF-"    else:        type2Prefix ="DEF-"        groupName = groupName.strip()    groupName = groupName[:30].upper()        campaignName = prefix + targetingPrefix + type1Prefix + type2Prefix + groupName +'-'+ randomString        return campaignName

如上所见,我们的广告系列名称以前缀开头,因此可以轻松识别我们的广告系列。然后添加以下字符串:

  • “MANU”或“AUTO”,如果它是手动或自动活动(仅适用于商品推广活动)

  • “KW”或“PT”,如果它是关于关键字或产品定位的

  • 使用“GEN”、“OFF”或“DEF”表示目标类型(通用、进攻或防御)

  • 产品名称(组)

  • 每次运行脚本时都会更改的随机字符串

随机字符串使得过滤在单次运行中创建的活动变得容易,例如。如果犯了错误,我们可以轻松找到这些活动,例如,将它们存档并重新开始。然后我们创建不同的方法来创建实体,例如,这里有一个方法来填充创建活动所需的相关字段:

defcreateSpCampaign(targeting ="Manual", type1="none", type2 ="none", groupName ="none", customerPath ="none", counter =1, fileName =""):    global bulkSheetSp        campaignName = getCampaignName(targeting = targeting, campaignType ="SP", type1=type1, type2 = type2, groupName = groupName)        campaign = copy.deepcopy(emptySpBulksheet)# Create a deep copy        campaign['Entity']           ='Campaign'    campaign['Campaign Id']      = campaignName    campaign['Campaign Name']    = campaignName    campaign['Start Date']       = campaignStartDate    campaign['End Date']         = campaignEndDate    campaign['Targeting Type']   = targeting.upper()    campaign['State']            = campaignStatus    campaign['Daily Budget']     = campaignDailyBudget    campaign['Bidding Strategy']= campaignBiddingStrategy        if((bulkSheetSp['Entity']=='Campaign')&(bulkSheetSp['Campaign Id']== campaignName)).any():        pass# Do nothing, we already have this campaign    else:        bulkSheetSp = bulkSheetSp.append(campaign, ignore_index=True)        # Create adgroup              createSpAdgroup(targeting = targeting, type1=type1, type2 = type2, groupName = groupName, campaignName = campaignName, customerPath = customerPath, counter = counter, fileName = fileName)

首先复制我们的“空批量表”并用所有必要的数据填充它。然后,此方法调用 next 方法createSpAdgroup,该方法执行与上图类似的操作,仅针对广告组。这将传递给广告系列的所有信息也会传递给广告组。

此方法如下所示:

defcreateSpAdgroup(targeting ="Manual", type1="none", type2 ="none", groupName ="none", campaignName ='none', customerPath ="none", counter =1, fileName =""):        counterString =f"{counter:02}"        global bulkSheetSp        adgroupName  = getCampaignName(targeting = targeting, campaignType ="SP", type1=type1, type2 = type2, groupName = groupName)+'-AG'+'-'+ counterString        adgroup = copy.deepcopy(emptySpBulksheet)# Create a deep copy to not alter emptySpBulksheet        adgroup['Entity']        ='Ad Group'    adgroup['Campaign Id']   = campaignName    adgroup['Ad Group Name']= adgroupName    adgroup['Ad Group Id']   = adgroupName    adgroup['State']         = adgroupStatus    adgroup['Ad Group Default Bid']= adgroupMaxBix            bulkSheetSp = bulkSheetSp.append(adgroup, ignore_index=True)    # Create ad        createSpAd(targeting = targeting, type1=type1, type2=type2, groupName=groupName, campaignName=campaignName, adgroupName=adgroupName, customerPath = customerPath)        if type1 =="keyword":        createSpKeywordTarget(targeting = targeting, type1=type1, type2=type2, groupName=groupName, campaignName=campaignName, adgroupName=adgroupName, customerPath = customerPath, fileName = fileName)    if type1 =="product":        createSpProductTarget(targeting = targeting, type1=type1, type2=type2, groupName=groupName, campaignName=campaignName, adgroupName=adgroupName, customerPath = customerPath)

我们以相同的方式定义了创建广告、关键字目标、产品目标、否定关键字等所需的所有其他方法。

七、启动一切的主要方法

然后需要我们的主脚本来启动它。比如这样:

if createSPCampaigns:        # Create empty bulksheet    bulkSheetSp = pd.DataFrame(data=emptySpBulksheet, index=[0])    # Get all products or product groups stored in different folders    productGroups = list_paths(customerPath)    productGroupsLength =len(productGroups)    j =0    randomString = randStr(N=5)# Create a random string    for productGroup in productGroups:                j = j +1                # Check which files are available        all_files =sorted(glob.glob(customerPath  +'/'+ productGroup +'/*.txt'))                counter =0        forfilein all_files:            if(addKeywordsOffensive)&('keywords-offensive.txt'infile):                createSpCampaign(targeting ="Manual", type1="keyword", type2 ="offensive", groupName = productGroup, customerPath = customerPath, fileName =file)                        if(addKeywordsGeneric ==True)&('keywords-generic.txt'infile):                counter = counter +1                createSpCampaign(targeting ="Manual", type1="keyword", type2 ="generic", groupName = productGroup, customerPath = customerPath, counter = counter, fileName =file)                        if(addKeywordsDefensive)&('keywords-defensive.txt'infile):                createSpCampaign(targeting ="Manual", type1="keyword", type2 ="defensive", groupName = productGroup, customerPath = customerPath, fileName =file)                        if(addProductsDefensive)&('products-defensive.txt'infile):                createSpCampaign(targeting ="Manual", type1="product", type2 ="defensive", groupName = productGroup, customerPath = customerPath, fileName =file)                        if(addProductsOffensive)&('products-offensive.txt'infile):                createSpCampaign(targeting ="Manual", type1="product", type2 ="offensive", groupName = productGroup, customerPath = customerPath, fileName =file)

出于教学原因,我删除了一些行,例如,在解析文件之前清理文件(删除空白行、删除重复的关键字等)。如果文件包含超过 1.000 个关键字,我们的脚本也会处理这种情况。如果使用排列,就会很快见效,因为我们想在广泛匹配的情况下使用词组匹配。

八、创建亚马逊批量表

最后但并非最不重要的一点是,我们需要将数据导出到 Excel 表,然后我们可以上传到亚马逊。

这像这样工作:

# Remove empty rowsif createSPCampaigns:    bulkSheetSp['Entity'].replace('', np.nan, inplace=True)    bulkSheetSp.dropna(subset=['Entity'], inplace=True)# Filenametoday = time.strftime("%Y-%m-%d-%H-%M")# Today as defaultoutputFile = customerPath +'/'+ today +'-'+ slugify(customer)+'-campaign-create-bulksheet.xlsx'outputFile = outputFile.replace("input-","")# Export to Excelwith pd.ExcelWriter(outputFile)as writer:      if createSPCampaigns:        bulkSheetSp.to_excel(writer, sheet_name='Sponsored Products Campaigns', index=False)

九、概括

一切就绪后,我们可以发挥创造力来快速填充这些 txt 文件或主输入表。以下是一些帮助大家入门的想法:

  • 根据品牌分析中的搜索词报告快速生成关键字和产品目标创意

  • 在这里也使用我们的亚马逊 SEO 研究中的关键字

如果我们的客户要求重新组织现有的活动并利用表现良好的关键字,例如,我们会解析现有的批量表并提取所有产品,包括。表现良好的目标。然后将每个目标放入正确的存储桶中,并在几分钟内运行脚本。

(免责声明:我们尊重原创。本平台提供的学习资料来源互联网和其它公众平台,主要目的在于分享信息,让更多人获得跨境行业学习资料,版权归原作者所有,内容仅供读者参考,如有侵犯您的权益或版权请及时告知我们,我们将尽快删除!)

咨询
官方微信群
官方客服

扫码添加,立即咨询

加群
官方微信群
官方微信群

扫码添加,拉你进群

更多
订阅号服务号跨境资讯
二维码

为你推送和解读最前沿、最有料的跨境电商资讯

二维码

90% 亚马逊卖家都在关注的微信公众号

二维码

精选今日跨境电商头条资讯

回顶部