You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Facebook Insights API获取scheduled_total指标:数据不符问题求助

问题

我正在开展一个项目,需要从Facebook Insights API获取scheduled_total指标用于统计分析,但发现API返回的结果与Facebook Business界面显示的数据不一致。目前我使用Python编写代码调用该API,获取到的scheduled_total结果为0,但实际情况并非如此。请问是否有人遇到过类似问题并找到了解决方案?另外,这种数据差异是否是因为Facebook App需要额外配置相关权限或设置导致的?

当前使用的代码如下:

import time
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.adreportrun import AdReportRun

def get_async_insights(ad_account, fields, params):
    async_job = ad_account.get_insights(fields=fields, params=params, is_async=True)
    async_job.api_get()

    # Wait for the async job to complete
    while async_job[AdReportRun.Field.async_status] != "Job Completed":
        time.sleep(1)
        print("> Running extraction...")
        async_job.api_get()

    return async_job.get_result()


def cast_variable(variable, type):
    if type == "int":
        return int(variable)
    elif type == "float":
        return float(variable)


def get_ad_action(ad, action_name, val_type):
    if "actions" in ad:
        result = 0
        for action in ad["actions"]:
            if action["action_type"] == action_name:
                result += cast_variable(action["value"], val_type)
        return result
    else:
        return 0


if __name__ == "__main__":
    # Credentials
    access_token = "REDACTED"
    app_id = "REDACTED"
    app_secret = "REDACTED"
    ad_account_id = "REDACTED"

    # Perform request
    date = "2024-01-01"
    FacebookAdsApi.init(app_id, app_secret, access_token, api_version="v20.0")

    fields = [
        "date_start",
        "date_stop",
        "ad_id",
        "ad_name",
        "campaign_id",
        "campaign_name",
        "impressions",
        "clicks",
        "actions",
        "action_values"
    ]

    params = {
        "level": "ad",
        "time_range": {"since": date, "until": date},
        "breakdowns": ["device_platform"],
        "limit": 1000,
        "action_attribution_windows": ['1d_click', "7d_click", "1d_view"]
    }

    # Data extraction
    ad_account = AdAccount(ad_account_id)
    data = get_async_insights(ad_account=ad_account, fields=fields, params=params)

    # Process the data
    # See https://developers.facebook.com/docs/marketing-api/reference/ads-insights
    # Actions and Action values should be a list<AdsActionStats>:
    # See https://developers.facebook.com/docs/marketing-api/reference/ads-action-stats
    data_list = []
    for ad in data:
        row = {
            "date": ad["date_start"],
            "ad_id": ad["ad_id"],
            "ad_name": ad["ad_name"],
            "campaign_id": ad["campaign_id"],
            "campaign_name": ad["campaign_name"],
            "device": ad["device_platform"],
            "impressions": int(ad.get("impressions", 0)),
            "clicks": int(ad.get("clicks", 0)),
            "scheduled_appointments": get_ad_action(ad, "schedule_total", "int")
        }
        data_list.append(row)
    print(data_list)

可能的原因及解决办法

  • 对齐归因窗口:Facebook Business界面默认的归因窗口可能和你API请求里的action_attribution_windows设置不一致。比如界面可能使用28d_click或其他组合,而你只指定了1d_click、7d_click、1d_view。可以调整参数,加入界面使用的归因窗口,或者直接用['default']匹配界面默认值。
  • 核对动作类型名称:部分场景下scheduled_total可能对应别名(比如schedule),建议先打印所有actions数组里的action_type值,确认实际返回的类型名称,再调整匹配逻辑。
  • 检查权限与应用状态:确保你的Facebook应用已获得ads_read权限,且访问令牌覆盖目标广告账户。如果应用处于开发模式,仅能访问测试数据,需切换到公开模式并通过审核才能获取真实数据。
  • 匹配细分维度:API请求中使用了breakdowns: ["device_platform"],要确认Facebook Business界面是否做了相同的设备细分,若界面是汇总数据,需检查API数据的汇总逻辑是否正确。
  • 直接请求目标字段:尝试在fields列表中直接添加scheduled_total字段,部分动作指标可作为独立字段返回,避免遍历数组时的匹配错误。
  • 等待数据延迟更新:Facebook Insights数据存在延迟,尤其是当日数据,可等待数小时后重试,查看数据是否同步。

内容的提问来源于stack exchange,提问作者Alex Baena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:54:52