想让 AI agent(Claude Code、自己写的脚本都算)直接查 Facebook 广告数据,绕不开一个长期有效的 access token。Graph API Explorer 里点出来的用户 token 一两小时就过期,走 Business 后台的 System User 拿到的 token 才是不过期的。整个过程要在开发者后台和 Business 后台之间来回跳几次,我把步骤记下来。

开发者后台:建 App
先到 Facebook 开发者后台,添加一个 App,名字和联系邮箱随便填。

Use cases 这一步勾选广告相关的两项:Marketing API 和 Meta Ads Manager。

Business 那一步,一定要选你广告账户所在的那个 Business。选错了后面 System User 分配权限时找不到广告账户,得回来重建 App。
App 建好后进 App settings,Advanced,往下拉:App Page 选一个主页,Authorized ad account IDs 填要查的广告账户 ID,保存。

Business 后台:建 System User
去 Business 后台的 System users,Users 下面,Add 一个 system user,角色 Employee 就够。

这里有个搞笑的 bug,估计是 Meta 工作人员 vibe coding 出来的:用户名大小写混着写,会提示大写字母太多;全部大写反而能过。😂

然后去 Accounts 下的 Ad accounts,选中广告账户,Assign people,把刚建的 system user 勾上。权限开 Partial access 里的 Manage campaigns 就行,只看数据的话 View performance 也够。


复制这个 system user 的 ID 备用。
回开发者后台:把 System User 加进 App
回到 App 管理界面,App roles,Roles,Add People。

角色选 Administrator,下面的搜索框粘贴 system user 的 ID,Add。

生成 token
再回 Business 后台的 System users,选中这个用户,Generate token。

选刚建的 App,过期时间选 Never,权限至少勾 ads_read;要让 agent 改预算、开关广告就再加 ads_management。我这里顺手多勾了几个 pages 和 business 相关的,方便以后查主页数据。

token 以 EAA 开头,只显示这一次,关掉就找不回来了,先存好。

给 agent 用
有了 token 和广告账户 ID,agent 直接调 Graph API 就行。先拿一条验证:
curl "https://graph.facebook.com/v26.0/act_<广告账户ID>/insights?date_preset=last_7d&fields=spend,impressions,clicks,cpc&access_token=<token>"
能返回数据,后面就是把这个 curl 写进 agent 的 skill 或者 MCP server,让它自己按需查、按需改。
一句提醒:这个 token 有 ads_management 权限,等于能动你的广告账户。放环境变量里,别贴进聊天记录,也别提交到 git。
0