【GAS】TikTok広告の運用データをスプレッドシートに自動取得する方法|Marketing API対応
TikTok広告の運用データをGAS(Google Apps Script)で取得する方法を解説します。TikTok Marketing APIの公式ドキュメントにはPHPやPythonのサンプルはありますが、GASでの実装方法がなかったためまとめました。
前提として、TikTokデベロッパーアカウントの作成が必要です。参考:TikTok Marketing API公式ドキュメント
目次
手順の概要
- TikTokデベロッパーでAPP IDを取得
- 広告主のauth_codeを取得
- 長期アクセストークンを生成
- GASで運用データを取得してスプレッドシートに出力
手順1:TikTokデベロッパーでAPP IDを取得する
TikTok Marketing API アプリ管理にアクセスし、必要事項を入力してアプリを作成します。

手順2:広告主のauth_codeを取得する
auth_codeは10分間有効で、1回のみ使用できます。期限が切れたら最初からやり直す必要があります。
作成したアプリ名をクリックし「Advertiser authorization URL」をコピーしてブラウザでアクセスします。

認証画面が表示されるので認証すると、リダイレクトURLにauth_codeパラメータが含まれた形でリダイレクトされます。URLからauth_codeの値をコピーしておきます。
手順3:長期アクセストークンを生成する
GASで以下のコードを実行します。
function getAuthCode() {
const APP_SECRET = "APP基本情報内のSECRET";
const APP_ID = "作成したAPPのID";
const AUTH_CODE = "手順2で取得したauth_code";
const PATH = "https://business-api.tiktok.com/open_api/v1.2/oauth2/access_token/";
let params = {
secret: APP_SECRET,
app_id: APP_ID,
auth_code: AUTH_CODE,
};
let options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(params)
};
let response = UrlFetchApp.fetch(PATH, options).getContentText();
console.log(response);
}
実行するとログに以下のようなレスポンスが返されます。access_tokenの値をメモしておきます。
{
"message": "OK",
"code": 0,
"data": {
"access_token": "xxxxxxxxxxxxx",
"scope": [4],
"advertiser_ids": [1234, 5678]
},
"request_id": "2020042715295501023125104093250"
}
手順4:運用データを取得する
以下のクラスを使って運用データを取得します。
class TikTokADS{
constructor(op){
this.PATH = "https://ads.tiktok.com/open_api/v1.2/reports/campaign/get/";
this.ACCESS_TOKEN = op['ACCESS_TOKEN']
this.getStat = op['getStat']
this.advertiser_id = op['advertiser_id']
}
getAdsData() {
let option = {
primary_status : 'STATUS_ALL',
start_date : '2021-12-01',
end_date : '2021-12-31',
advertiser_id : this.advertiser_id,
fields : JSON.stringify(this.getStat),
group_by : JSON.stringify(['STAT_GROUP_BY_FIELD_STAT_TIME', 'STAT_GROUP_BY_FIELD_ID']),
time_granularity : 'STAT_TIME_GRANULARITY_DAILY',
page : 1,
page_size : 100,
}
let params
for (let key in option) {
params += key + "=" + option[key] + "&"
}
let url = encodeURI(this.PATH + "?" + params)
const httpResponse = UrlFetchApp.fetch(url, {
method: 'get',
muteHttpExceptions: true,
headers: {
'Access-Token': this.ACCESS_TOKEN,
},
}).getContentText();
let res = JSON.parse(httpResponse)
let adsData = res["data"]["list"]
let result = [['stat_datetime','campaign_id','campaign_name',...this.getStat]]
for (let elm of adsData) {
let temp = []
temp.push(new Date(elm['stat_datetime']))
temp.push(String(elm['campaign_id']))
temp.push(elm['campaign_name'])
for (let stat of this.getStat) {
temp.push(elm[stat])
}
result.push(temp)
}
result = result.sort((a, b) => a[0] - b[0])
return result
}
}
function main(){
let Tk = new TikTokADS({
ACCESS_TOKEN : "手順3で取得したアクセストークン",
getStat : ['campaign_name', 'stat_cost', 'show_cnt', 'click_cnt', 'convert_cnt'], // 取得したいデータ
advertiser_id : "広告アカウントID",
})
let result = Tk.getAdsData()
const setSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('出力シート名')
setSheet.getRange(1, 1, result.length, result[0].length).setValues(result)
}
取得できる主なデータフィールド
stat_cost:広告費用show_cnt:インプレッション数click_cnt:クリック数convert_cnt:コンバージョン数time_attr_view:ビュースルーコンバージョン





ディスカッション
コメント一覧
まだ、コメントがありません