Python调用Facebook Business SDK无法通过Marketing API获取广告Results字段
核心根因
Facebook Business Manager前台展示的Results指标,并不是API层面独立存在的原生返回字段,因此Python SDK的AdsInsights.Field枚举列表中不会为它设置对应的常量项,直接在fields列表中尝试请求这个字段也不会拿到任何返回值。
这个字段的本质是后台基于两类数据动态计算的衍生展示值:
- 广告本身设定的优化目标(objective)
- 该优化目标下对应的用户互动/转化事件累计计数(封装在
actions字段中,按事件类型拆分)
不同优化目标对应的Results计算规则完全不同:比如优化目标为链接点击时,Results值等于对应时间范围内的outbound_clicks计数;优化目标为网站购买时,Results值等于purchase事件的累计计数。
可落地的解决方法
- 放弃在SDK枚举中寻找
results常量的尝试,SDK原生就没有这个枚举项。 - 拉取字段列表中补充两个核心字段:
AdsInsights.Field.objective:获取每个广告的实际优化目标AdsInsights.Field.actions:获取全量拆分的互动/转化事件计数
- 在请求参数中补充
action_breakdowns配置,指定按action_type拆分事件,否则转化类指标会因为维度不匹配被聚合,无法被正常拉取。 - 本地数据处理时,根据拿到的广告优化目标,从拆分后的actions列表中匹配对应事件的计数,即可得到和Facebook后台完全一致的Results数值。
调整后的可运行代码示例
你现有代码的修改版本:
params_ads = { 'time_range': {'since': '2021-03-01', 'until': '2021-03-23'}, 'level': 'ad', 'limit': '20000', # 新增action维度拆分配置,解决转化类指标不返回的问题 'action_breakdowns': ['action_type'] } fields_ads = [ AdsInsights.Field.account_id, AdsInsights.Field.account_name, AdsInsights.Field.ad_id, AdsInsights.Field.ad_name, AdsInsights.Field.adset_id, AdsInsights.Field.adset_name, AdsInsights.Field.campaign_id, AdsInsights.Field.campaign_name, AdsInsights.Field.spend, AdsInsights.Field.impressions, AdsInsights.Field.clicks, AdsInsights.Field.outbound_clicks, # 新增两个核心字段,用于本地计算Results值 AdsInsights.Field.objective, AdsInsights.Field.actions ] ads = my_account.get_insights(params=params_ads, fields=fields_ads)
常见踩坑提醒
- 不要尝试在fields列表中直接传入字符串
'results',SDK不会拦截这类非法字段名,但API端会直接忽略该请求,不会返回对应值,也不会抛出报错,排查难度极高。 - 如果拉取的是自定义转化事件对应的Results值,需要确认自定义转化事件的ID已经被关联到广告账户的转化追踪配置中,否则对应事件的计数不会被纳入返回结果。
内容的提问来源于stack exchange,提问作者zknufk
相关产品推荐
相关产品推荐

