如何用脚本获取Google Ads账户总账单费用及同步至Airtable
获取Google Ads账户广告系列每日总费用及同步至Airtable方案
一、Google Ads API获取每日费用示例(JS版)
使用官方google-ads-api npm包对接API,核心通过GAQL(Google Ads Query Language)按日期+广告系列维度聚合费用数据。
1. 前置准备
- 安装依赖:
npm install google-ads-api - 完成Google Ads API控制台认证配置(获取客户ID、开发者令牌、OAuth2凭据)
2. 按广告系列拆分的每日费用代码
const { GoogleAdsApi } = require('google-ads-api'); // 初始化API客户端 const client = new GoogleAdsApi({ client_id: 'YOUR_OAUTH2_CLIENT_ID', client_secret: 'YOUR_OAUTH2_CLIENT_SECRET', developer_token: 'YOUR_DEVELOPER_TOKEN', }); async function getCampaignDailyCosts() { const customer = client.Customer({ customer_id: 'YOUR_CUSTOMER_ID', // 格式:123-456-7890 refresh_token: 'YOUR_REFRESH_TOKEN', }); // GAQL查询:按日期、广告系列分组,获取指定时段费用 const query = ` SELECT campaign.id, campaign.name, segments.date, metrics.cost_micros FROM campaign WHERE segments.date BETWEEN '2024-01-01' AND '2024-01-31' ORDER BY segments.date ASC, campaign.name ASC `; try { const response = await customer.report(query); // 转换费用单位(micros转美元,1美元=1e6 micros) const formattedData = response.rows.map(row => ({ campaignId: row.campaign.id, campaignName: row.campaign.name, date: row.segments.date, cost: row.metrics.cost_micros / 1000000 })); console.log('每日费用数据:', formattedData); return formattedData; } catch (err) { console.error('获取数据失败:', err); } } // 执行查询 getCampaignDailyCosts();
如果需要全账户总费用(不按广告系列拆分),简化查询语句即可:
const query = ` SELECT segments.date, metrics.cost_micros FROM customer WHERE segments.date BETWEEN '2024-01-01' AND '2024-01-31' `;
二、同步数据至Airtable建议
使用Airtable官方JS SDK实现数据同步,步骤如下:
1. 前置准备
- 安装依赖:
npm install airtable - 在Airtable创建表格,字段设置为:
campaignId(数字)、campaignName(单行文本)、date(日期)、cost(数字) - 获取Airtable的API密钥和表格ID
2. 同步代码示例
const Airtable = require('airtable'); // 初始化Airtable客户端 const base = new Airtable({ apiKey: 'YOUR_AIRTABLE_API_KEY' }).base('YOUR_BASE_ID'); async function syncToAirtable(data) { const table = base('YOUR_TABLE_NAME'); // 批量转换为Airtable记录格式 const records = data.map(item => ({ fields: { campaignId: item.campaignId, campaignName: item.campaignName, date: item.date, cost: item.cost } })); try { await table.create(records, { typecast: true }); // typecast自动匹配字段类型 console.log('数据同步成功'); } catch (err) { console.error('同步失败:', err); } } // 结合查询函数,获取数据后同步 getCampaignDailyCosts().then(data => { if (data) syncToAirtable(data); });
同步注意事项
- 避免重复数据:先查询Airtable已有记录,对比日期和campaignId,仅新增/更新差异数据
- 控制请求频率:Google Ads API和Airtable均有配额限制,批量操作时拆分请求
- 添加错误重试:针对临时网络或API错误,实现简单的重试逻辑
内容的提问来源于stack exchange,提问作者Shinwi
相关产品推荐
相关产品推荐

