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

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

6443
2022-08-22 19:37
2022-08-22 19:37
6443


今天向大家展示如何利用编程语言 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跨境头条,如有疑问,请联系客服。
最新热门报告作者标签
约33%越南卖家月订单超100单,运营压力同步上升
AMZ123获悉,近日,一项由消费者研究机构 Milieu Insight 发布的最新研究显示,越南作为东南亚增长最快的数字市场之一,其电商卖家经济正以极快速度扩张,但配套生态体系的成熟度仍明显滞后。该研究基于对300名越南线上卖家的调查,调查结果呈现出年轻化、高增长与高压力并存的行业特征。调查显示,目前,近三分之一的越南电商卖家每月处理订单量已超过100单,显著高于22%东南亚地区卖家的平均水平。与此同时,卖家普遍面临多重长期可持续性压力,其中运营成本上升是最主要问题,占比达55%;其次是来自全球品牌的竞争压力(45%)、政策与监管不确定性(40%)以及物流挑战(33%)。
TikTok欧洲两项新规即将落地!1月8日起这些费用要涨
黑五大促,硝烟散去,TikTok卖家“操盘”的成果,被各种excel表定格。只不过,还没等卖家从数据分析中缓过来,一系列紧锣密鼓的新规与新功能已精准下发。这次的焦点并非万众瞩目的美区,而是后起之秀,欧洲。01TikTok上线“Nearby”功能TT123了解到,12月4日,TikTok在法国、德国、意大利和英国上线名为「附近动态」(Nearby Feed) 的新功能。图源:TikTok根据介绍,以上4个地区的TikTok用户,可以从TikTok主屏幕访问“附近”信息流,“附近”信息流中的帖子会根据用户的位置、内容主题和发布时间进行内容展示。
25年健康品牌TOP10榜单出炉,功能型健康产品爆火
AMZ123获悉,近日,AI 市场研究平台 Spate 基于 Google、TikTok 和 Instagram 的搜索与互动数据,对健康品牌的年度热度变化进行了统计,整理出 2025 年最受关注、同比增长最快的十大健康品牌。随着“长寿”“功能性健康”等议题持续升温,线上健康消费品牌的关注度在2025年显著提升。这些品牌主要集中在营养补充、功能性食品、运动营养和情绪健康等领域,反映出消费者在压力管理、肠道健康、能量补充和整体健康管理方面的需求持续扩大。数据显示,2025 年热度排名第一的品牌为 Goli,其年度“人气指数”增长达 15 亿次,同比提升 217%。
日本小家电市场8-10月GMV达158亿日元,高价产品占39%
AMZ123获悉,近日,根据Nint ECommerce对主要电商平台的数据统计,2025年8月至10月期间,日本美容与健康家电市场整体保持稳健增长态势,市场规模、销量与平均单价均较去年同期实现提升。数据显示,2025年8月至10月期间,美容与健康家电市场累计成交额(GMV)约为158亿日元,同比增长5.9%;销售数量约177万台,同比增长2.5%;平均销售价格约为8,949日元,同比增长3.3%。消费者在换新需求之外,对高性能、高附加值产品的接受度持续提高,销量与客单价同步上升。从品类结构来看,市场增长主要由高单价、高功能产品带动。
德国对Temu展开反垄断调查,定价机制受关注
AMZ123获悉,近日,据外媒报道,德国联邦卡特尔局(Bundeskartellamt)已正式对Temu德国母公司Whaleco Technology Limited启动反垄断调查,重点审查其在平台运营中是否存在限制卖家定价自由的行为。该公司注册地位于爱尔兰都柏林,此次调查源于德国零售协会(HDE)于今年4月向监管机构提交的正式投诉。调查核心为Temu是否违反德国及欧盟层面的“卡特尔禁令”。相关法律明确禁止具有竞争限制效果的协议或行为,若构成违法,最高可处以企业年度营业额10%的高额罚款。德国监管机构怀疑,Temu通过其卖家合作条款,对入驻卖家的价格制定施加不当限制,从而削弱市场竞争。
抢攻新兴蓝海,一批中国卖家已爆单!
你眼中的非洲,是什么样的?偏远、贫瘠、基建差……在这些刻板印象的束缚下,过去很长一段时间里,许多卖家对于非洲的认知都停留在“待开发的潜力股”上,因此鲜少有人在攻略新城池时考虑到非洲电商市场。然而士别三日,当刮目相看。如今去到非洲国家,这样的场景已十分普遍:尼日利亚拉各斯的街头,电商配送车穿梭在车流中,装载着从中国跨境而来的电子产品与时尚服饰;在肯尼亚内罗毕的社区,年轻人正在Jumia的橙色自提点前排起长队,领取他们通过手机订购的中国商品。 这片被误解的电商新大陆,正在成为藏金纳银的财富洼地。
亚马逊如何结合竞价,优化广告位置表现
在亚马逊平台的标品运营中,流量结构的精准布局是决定 ASIN 成长效率与成熟期收益的核心要素之一。标品(如标准化 3C 配件、家居日用品等)具有用户决策链路短、搜索意图明确的特征,其流量资源的分配需高度聚焦于高转化曝光位。本文将系统解析适用于标品成长 / 成熟期 ASIN 的流量结构”,明确其逻辑框架、落地步骤与效果验证,为新人卖家提供可复用的运营范式。一、模式 1 的核心定义与适配场景模式 1 是针对标品成长 / 成熟期 ASIN设计的流量结构策略,其核心特征为 “三角形流量布局”—— 即通过资源倾斜,将大部分流量集中于 “搜索结果首页首位” 这一核心曝光位。
Temu等中国平台持续增长,波兰卖家呼吁加强监管
AMZ123获悉,近日,波兰电子经济商会(e-Izba)的初步数据显示,随着超低价商品在波兰市场的迅速普及,来自中国的跨境电商平台正对当地电商行业形成持续压力。这一趋势正在改变波兰消费者的购物习惯,也加剧了本土电商企业在成本、合规和价格层面的竞争劣势,相关领域呼吁尽快推动监管层面的调整。波兰电子经济商会(e-Izba)的初步数据显示,2025年有超过80%的波兰网民表示曾访问过至少一家中国购物平台。相关趋势在整个欧盟范围内同样明显。数据显示,2025年2月至7月期间,Shein在欧洲的月均访问用户数达到1.457亿人,较此前六个月增加1520万人,增幅为11.6%。
突发!大批亚马逊产品被误判
转眼间12月已过半,跨境电商卖家正式进入了全年销量冲刺的终极阶段。但正所谓“行百里者半于九十”,越临近终点的时候往往越是感觉困难重重。近日除了深陷大促后的淡季泥沼、单量下滑外,亚马逊再度扬起的“扫号铁拳”,也打了卖家们一个措手不及。AMZ123获悉,据多个卖家反馈,自12月13日起,大批listing被亚马逊判为儿童玩具,收到了相应的合规风险提示:相关卖家需在2026年2月25日前提供与儿童玩具相关的合规性文件,否则将无法继续正常销售,面临移除下架、被停售的风险。但据业内消息,这些收到提示的多数卖家销售的产品并非儿童玩具,却突然被误判:“完全不搭边的产品被识别成儿童玩具,申诉了被驳回,还在不断地增加。
亚马逊美国再裁84人,明年仍将继续岗位优化
AMZ123获悉,近日,亚马逊向美国华盛顿州提交了一份新的通报,将在当地裁减84个岗位。亚马逊说明,这一调整属于各业务部门在日常运营中进行的人员结构优化,并不涉及其在今年10月宣布的全球性裁员计划。亚马逊在文件中指出,亚马逊各业务线会定期评估组织架构,并根据实际运营需要作出调整,此次岗位削减属于常规管理行为,与此前宣布的裁减约1.4万个全球企业岗位并无直接关联。此次披露源于华盛顿州近期实施的一项新法规,该法规要求雇主在此前已提交裁员通知的情况下,对90天内发生的所有人员解聘情况进行补充申报。这项法规被称为华盛顿州版的《工人调整与再培训通知法》。
深圳又出“黑科技”,支架充电线在TikTok彻底火了
TikTok卖家靠一条带“支架”的充电线,月入数百万
欧盟征税下狠招,小包每单多加3欧!
2025年12月12日深夜,一则来自欧盟理事会的消息划破了跨境电商圈的宁静,瞬间点燃了无数“跨境人”的神经。一纸新规,宣告了自2026年7月1日起,所有价值低于150欧元的小额包裹将不再“免税”,而是被统一征收3欧元的固定关税。这标志着行业规则的根本性重构与生存考验的开启。然而,这一切或许仅仅是剧烈变革的前奏,其引发的连锁反应,终将重塑每一个出海者的未来路径。AMZ123获悉,这项新关税将适用于所有已在欧盟IOSS系统进行增值税注册的非欧盟卖家,这涵盖了欧盟93%的电子商务交易量,意味着几乎所有依赖欧洲市场的中国跨境卖家都无法置身事外。
收藏!5分钟了解2025亚马逊全球开店跨境峰会重点内容!
2025亚马逊全球开店跨境峰会顺利落下帷幕。这是我们又一次在一年之末,与整个行业一起完成的四天同行,再一次把跨境行业最核心的趋势、工具、理念与实践汇聚在同一个空间,同时也凝结了无数中国卖家和品牌对全球市场的共同思考。正如亚马逊全球副总裁、亚马逊全球开店全球业务负责人戴竫斐在主战略发布会上说到的:跨境电商的新十年,已经往“向优、向新、向全球”的方向发展。"出海之术" 必须与时俱进,"创新兼具韧性" 比任何时候都重要。本届峰会正是在这样的判断与方向下展开:以更前沿的洞察、更智能的工具、更务实的路径,为卖家提供迈向下一阶段增长的答案。以下是为您整理的精华内容回顾——关注公众号回复“加群”加入卖家交流群
2026,亚马逊卖家生存指南
面对亚马逊的透明化转型,卖家与其焦虑抱怨,不如主动调整策略,适应新的游戏规则:一、摒弃价格投机,坚守稳定定价告别 "今日涨价、明日打折" 的短视操作,将定价锚定在市场均价附近,保持长期稳定性。促销活动需提前做好长远规划,避免频繁波动的价格曲线被 Rufus 标记为 "不诚信"。稳定的价格不仅能获得算法青睐,更能积累品牌信任,形成长期复购。二、用自然语言重构 Listing 逻辑过去写 Listing 是为了给 A9 算法埋关键词,现在则要适配 Rufus 的对话式搜索逻辑。
亚马逊成美国消费电子支出占比最高平台
AMZ123获悉,近日,根据市场研究机构Numerator发布的《消费电子追踪报告》,在过去一年中,亚马逊已正式超越百思买,成为美国消费电子品类中支出占比最高的平台。数据显示,亚马逊在相关消费电子品类中的整体销售占比达到30%,高于百思买的28%。从月度表现来看,亚马逊在2025年7月的市场份额出现显著跃升,占当月消费电子支出的43%。这一增长主要与其夏季 Prime Day 促销活动有关,该活动对竞争对手的市场份额形成明显挤压。相比之下,百思买和其他电商平台在同期的份额均有所回落。在消费电子支出排名中,沃尔玛位列第三,截至2025年9月,其市场份额为12.8%,整体表现保持相对稳定。
《亚马逊生活日用品类攻略手册》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旗下北美跨境电商新闻栏目,专注北美跨境电商热点资讯,为广大卖家提供北美跨境电商最新动态、最热新闻。
首页
跨境头条
文章详情
如何使用 Python 和批量操作创建完美的亚马逊活动结构?
跨境电商SellerWin
2022-08-22 19:37
6443


今天向大家展示如何利用编程语言 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% 亚马逊卖家都在关注的微信公众号

二维码

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

回顶部