如何通过Facebook Marketing API获取提交申请与预约数据?
无法通过Facebook Ads API获取提交申请和预约完成指标的问题
我在Ads Manager后台可以正常查看「提交的申请」和「已完成的预约」这两个转化指标,但通过Facebook Graph API调用广告账户洞察数据时,除了这两个指标外,其余所有指标(比如曝光、花费、线索量等)都能正常获取。尝试了各种排查方法都没解决问题。
当前代码能获取到leads数据,但始终拿不到「提交的申请」和「已完成的预约」的数值,代码如下:
var urlAdAccountInsights = "https://graph.facebook.com/v22.0/act_" + adAccountId + "/insights?fields=campaign_name%2cimpressions%2cspend%2ccpc%2cctr%2ccpm%2cfrequency%2cclicks%2cinline_link_clicks%2cactions%2caction_values%2cconversion_values" + "&date_preset=this_month&access_token=" + token; var responseCampaignInsights = UrlFetchApp.fetch(urlAdAccountInsights); var json = JSON.parse(responseCampaignInsights); var data = json.data; if (data.length > 0) { var et = JSON.stringify(data); var sub = et.substring(1, et.length - 1); var campaignData = JSON.parse(sub); var campaignName = campaignData.campaign_name; var impressions = campaignData.impressions; var spend = campaignData.spend; var cpc = campaignData.cpc; var cpm = campaignData.cpm; var ctr = campaignData.ctr; var frequency = campaignData.frequency; var clicks = campaignData.clicks; var linkclicks = campaignData.inline_link_clicks; var leads = 0; var applications = 0; var appointments = 0; if (campaignData.actions) { campaignData.actions.forEach(action => { if (action.action_type === "lead") { leads = action.value; } else if (action.action_type === "SubmitApplication") { applications = action.value; } else if (action.action_type === "schedule_total") { appointments = action.value; } }); } Logger.log(campaignData);
问题排查与解决方案
1. 核心问题:错误的action_type枚举值
Meta的转化动作类型有严格的大小写和枚举规则,你使用的SubmitApplication和schedule_total大概率不是官方定义的正确值。
验证方法:先调用API获取当前账户下所有可用的action类型,确认目标指标对应的准确标识:
GET act_{AD_ACCOUNT_ID}/insights?fields=actions.action_type&level=campaign&date_preset=this_month&access_token={TOKEN}
返回结果中会列出所有可统计的action_type,比如提交申请通常对应submit_application(全小写),预约完成可能对应schedule_appointment或你自定义的像素事件名称。
2. 补充API请求参数
需要在请求中添加action_breakdowns=action_type,确保数据按动作类型拆分返回,避免聚合导致的指标缺失:
var urlAdAccountInsights = "https://graph.facebook.com/v22.0/act_" + adAccountId + "/insights?fields=campaign_name,impressions,spend,cpc,ctr,cpm,frequency,clicks,inline_link_clicks,actions,action_values,conversion_values" + "&action_breakdowns=action_type&date_preset=this_month&access_token=" + token;
3. 修正代码逻辑
- 移除原代码中把数组转字符串再解析的错误操作(会丢失多活动数据),直接遍历返回的data数组
- 替换action_type判断为实际查到的正确值
修改后的代码示例:
var urlAdAccountInsights = "https://graph.facebook.com/v22.0/act_" + adAccountId + "/insights?fields=campaign_name,impressions,spend,cpc,ctr,cpm,frequency,clicks,inline_link_clicks,actions,action_values,conversion_values" + "&action_breakdowns=action_type&date_preset=this_month&access_token=" + token; var responseCampaignInsights = UrlFetchApp.fetch(urlAdAccountInsights); var json = JSON.parse(responseCampaignInsights); var data = json.data; if (data.length > 0) { // 遍历所有活动数据,避免丢失多条目 data.forEach(campaignData => { var campaignName = campaignData.campaign_name; var impressions = campaignData.impressions; var spend = campaignData.spend; var cpc = campaignData.cpc; var cpm = campaignData.cpm; var ctr = campaignData.ctr; var frequency = campaignData.frequency; var clicks = campaignData.clicks; var linkclicks = campaignData.inline_link_clicks; var leads = 0; var applications = 0; var appointments = 0; if (campaignData.actions) { campaignData.actions.forEach(action => { // 替换为你实际查到的action_type值 switch(action.action_type) { case "lead": leads = parseInt(action.value); break; case "submit_application": applications = parseInt(action.value); break; case "schedule_appointment": appointments = parseInt(action.value); break; } }); } Logger.log(`活动:${campaignName},线索:${leads},提交申请:${applications},预约完成:${appointments}`); }); }
额外注意事项
- 确保access_token拥有
ads_read权限,且广告账户已授权给对应应用 - 如果是自定义像素事件,需要确认像素已正确关联广告系列,且事件已被Meta标记为可统计的转化动作
内容的提问来源于stack exchange,提问作者Marcus Gagye




