Meta広告のAPI(マーケティングAPI)で広告データを集計する方法
目次
はじめに
最近、弊社ではMeta広告を活用して製品のプロモーションを始めました。Metaは以前「Facebook」という名称で知られており、この広告サービスを利用することで、FacebookとInstagramに広告を掲載できます。弊社ではさまざまな広告データを日々収集・分析しており、その一環として、上司からMeta広告の情報をAPIで定期的に取得する仕組みを構築するよう依頼されました。
この記事では、Meta広告のAPI(マーケティングAPI)を使用して、GoogleスプレッドシートとGoogle Apps Scriptを組み合わせたデータ取得の仕組みを作る過程と、実装のポイントをわかりやすくまとめました。ぜひ最後までお読みください!
広告データを集計する前の注意点
Meta広告の閲覧権限を付与するため、新規でアカウントを作成し権限をもらったところ、数時間後にアカウントが停止されるという問題が発生しました。このアカウントでは、投稿やアイコン写真の設定もしていない状態でした。問題解決のためにMetaに問い合わせようとしましたが、専用の問い合わせフォームはなく、問い合わせ用のメールアドレスに復旧を依頼しても対応されませんでした。そこで、上司のアドバイスを受けて、以下の手順で新しいアカウントを作成しました。
- スマートフォンでアカウントを新規作成: PCではなくスマホを使用しました。
- 異なるネットワークを利用: 社内ネットワーク外(例えばモバイルデータ通信)を使用し、IPアドレスの一致を避けました。
- Facebookに投稿を作成: 何でも良いので、簡単な投稿を作成しました。
- アカウント作成後、1日空ける: アカウント作成からMeta広告アカウントの権限付与まで、1日以上間隔を空けました。
- 実稼働中のMeta広告アカウントから権限を付与: 以上の手順を踏まえた新しいアカウントに、広告アカウントの閲覧権限を付与しました。
結果的にこの方法で作成したアカウントは、現在のところ問題なく稼働しています。同様の状況に直面した際の参考になれば幸いです。
アクセストークンの取得方法
広告アカウントIDの取得方法
Meta広告のAPIを利用するためには、まず広告アカウントIDを取得する必要があります。この章では、広告アカウントIDの取得方法について詳しくまとめました。
1.まずはMeta広告マネージャにアクセスしてください
2.ホーム画面に遷移しますので、今回取得したい広告が掲載されているアカウントを選択してください
3.下記のようにキャンペーン広告の情報が閲覧できているか確認してください。
4.さきほど同じ通りアカウントを選択するメニュー画面に戻って、下記のように掲載されている広告アカウントIDをコピーしてください
短期トークンの取得
次に、アクセストークンを取得する必要があります。この章では、アクセストークンの取得方法について詳しくまとめました。
1.まずはソーシャルテクノロジー | Meta for Developersにログインまたはアカウントを作成して下さい
2.「アプリを作成」をクリックして、アプリを作成してください
3.「アプリを作成」をクリックして、アプリを作成してください
4.アプリ名とアプリの連絡先メールアドレスを設定して。「次へ」をクリックしてください
5.下記のものを選んで、「次へ」をクリックしてください
6.「ビジネス」を選択して、「次へ」をクリックしてください
7.「アプリを作成」をクリックしてください
8.「マーケティングAPI」の中にある「設定」をクリックしてください
9.次にアクセストークンを取得するために「ads_read」を選択して、「トークンを取得」をクリックしてください
10.トークンが発行されましたので、コピーして下さい。ちなみに、このトークンは短期トークンで2時間後に期限が切れます。
12.短期トークンの有効期間は2時間程度です。次は長期トークンに変換します。長期トークンの有効期限は最大60日です。
長期トークンの取得
1.まずはクライアントIDを取得必要があります。ソーシャルテクノロジー | Meta for Developersにログインしてホーム画面に表示されているアプリIDを取得してください。
2.次にシークレットキーを取得してください。さきほどの画面をクリックしてください
3.左面にあるメニューバーから「ダッシュボード」を選択して、「ベーシック」を選択してください
4.app secretにある「表示」をクリックして、伏字になっているシークレットキーを取得してください
5.次にこのコマンドが動作するか確認してください。
curl -s "https://graph.facebook.com/v21.0/oauth/access_token?grant_type=fb_exchange_token&client_id=[1.で取得したクライアントID]&client_secret=[4.で取得したシークレットキー]&fb_exchange_token=[短期トークンの取得で取得したアクセストークン]"
以下のように表示されたら成功です
{
"access_token": "××××××××××××××",
"token_type": "bearer",
"expires_in": ××××××
}
実装編
今回は定期的にMeta広告のキャンペーン、広告セット、広告の情報をGoogleスプレッドシートに記録したいと考えています。これにはいくつか理由がありますが、主に 無料でコードを定期実行できる 点が大きな利点です。Amazon Web Services(AWS)のAWS Lambdaなどのクラウドサービスを使用すれば同様のことが可能ですが、費用が発生します。一方、Googleスプレッドシートでは 無料での定期実行 が可能で、さらに Google Apps Script を使えばJavaScriptベースの言語で簡単にコーディングできます。このため、コストを抑えながらスムーズに実装できるGoogleスプレッドシートを採用しました。
1.まずはGoogleスプレッドシートに「トークン管理」というシートを作り、A1のセルにこのように長期トークンの取得の章で取得したアクセストークンを張り付けてください。
ソースコード
次にこのコードを使用します。このコードを利用する際は、取得したい情報に応じて以下の関数を実行してください。
- キャンペーン情報を取得したい場合:
facebook_getCampaignIds
関数を実行 - 広告セット情報を取得したい場合:
facebook_getAdSets
関数を実行 - 広告情報を取得したい場合:
facebook_getAds
関数を実行
必要な関数を選んで実行することで、それぞれの情報を取得できます。
// キャンペーン情報を取得する関数
function facebook_getCampaign() {
var sheetName="キャンペーン";
var endpoint = "campaigns";
// キャンペーンで使用可能なフィールドについては、以下の公式ドキュメントを参考にしてください:
// https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group/insights?locale=ja_JP
// ただし、記載されているフィールドの中には一部使用できないものがある点にご注意ください。
// 利用可能なフィールドについては、実際にAPIリクエストを行って確認することをおすすめします。
var fields = "date_start,date_stop,account_id,account_name,campaign_id,campaign_name,impressions,inline_link_clicks,conversions,spend";
refreshAccessToken()
facebook_writeFacebookAdsDataToSheet(sheetName,endpoint, fields);
}
// 広告セット情報を取得する関数
function facebook_getAdSets() {
var sheetName="広告セット";
var endpoint = "adsets";
// 広告セットで使用可能なフィールドについては、以下の公式ドキュメントを参考にしてください:
// https://developers.facebook.com/docs/marketing-api/reference/ad-campaign/insights?locale=ja_JP
// ただし、記載されているフィールドの中には一部使用できないものがある点にご注意ください。
// 利用可能なフィールドについては、実際にAPIリクエストを行って確認することをおすすめします。
var fields = "account_id,adset_id,date_start,date_stop,impressions,spend";
refreshAccessToken()
facebook_writeFacebookAdsDataToSheet(sheetName,endpoint, fields);
}
// 広告情報を取得する関数
function facebook_getAds() {
var sheetName="広告";
var endpoint = "ads";
// 広告で使用可能なフィールドについては、以下の公式ドキュメントを参考にしてください:
// https://developers.facebook.com/docs/marketing-api/reference/adgroup/insights/
// ただし、記載されているフィールドの中には一部使用できないものがある点にご注意ください。
// 利用可能なフィールドについては、実際にAPIリクエストを行って確認することをおすすめします。
var fields = "account_id,ad_id,date_start,date_stop,impressions,spend";
refreshAccessToken()
facebook_writeFacebookAdsDataToSheet(sheetName,endpoint, fields);
}
// スプレッドシートからアクセストークンを取得する関数
function facebook_getAccessToken() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('トークン管理');
if (sheet) {
return sheet.getRange(1, 1).getValue(); // 1行1列目からトークンを取得
} else {
Logger.log('シート "トークン管理" が見つかりません。');
return null; // シートが見つからなかった場合、nullを返す
}
}
function saveAccessToken(token) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('トークン管理');
if (sheet) {
sheet.getRange(1, 1).setValue(token); // 1行1列目にトークンを保存
} else {
Logger.log('シート "トークン管理" が見つかりません。');
}
}
function loadAccessToken() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('トークン管理');
if (sheet) {
return sheet.getRange(1, 1).getValue(); // 1行1列目からトークンを取得
} else {
Logger.log('シート "トークン管理" が見つかりません。');
return null; // シートが見つからなかった場合、nullを返す
}
}
// アクセストークンを生成する関数
function refreshAccessToken() {
// 必要な定数を取得
const clientId = [1.で取得したクライアントID]; // アプリケーションID
const clientSecret = [4.で取得したシークレットキー]; // アプリシークレットキー
const shortLivedToken = loadAccessToken(); // 現在の短期間トークンを取得
// URLとクエリパラメータの構築
const apiVersion = 'v21.0'; // 使用するAPIバージョン
const baseUrl = `https://graph.facebook.com/${apiVersion}/oauth/access_token`;
const queryParams = {
grant_type: "fb_exchange_token",
[1.で取得したクライアントID]: clientId,
client_secret: clientSecret,
fb_exchange_token: shortLivedToken,
};
// クエリパラメータをURL形式にエンコード
const queryString = Object.entries(queryParams)
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
.join("&");
const urlWithParams = `${baseUrl}?${queryString}`;
// APIリクエスト用オプションの設定
const options = {
method: "get",
muteHttpExceptions: true, // エラー発生時に例外をスローしない
};
try {
// APIリクエストを送信
const response = UrlFetchApp.fetch(urlWithParams, options);
const responseCode = response.getResponseCode();
if (responseCode === 200) {
// 正常にデータを取得
const json = JSON.parse(response.getContentText());
const newToken = json.access_token;
if (!newToken) {
throw new Error(`トークンがレスポンスに含まれていません: ${JSON.stringify(json)}`);
}
// 新しいトークンを保存
saveAccessToken(newToken);
Logger.log("新しいトークンを取得しました: " + newToken);
return newToken;
} else {
// エラーハンドリング
const errorDetails = response.getContentText();
const errorMessage = `トークン更新に失敗しました。ステータスコード: ${responseCode}, エラー詳細: ${errorDetails}`;
Logger.log(errorMessage);
throw new Error(errorMessage);
}
} catch (error) {
// 例外処理
const errorMessage = `トークン更新中にエラーが発生しました。エラー内容: ${error.message}`;
Logger.log(errorMessage);
throw error; // 必要に応じて再スロー
}
}
// 任意の日数前の日付を計算する共通関数
function facebook_getDateNDaysAgo(daysAgo) {
var today = new Date();
today.setDate(today.getDate() - daysAgo); // 指定の日数前に設定
return Utilities.formatDate(today, Session.getScriptTimeZone(), 'yyyy-MM-dd');
}
// Facebook Ads APIからデータを取得する汎用関数
function facebook_getData(endpoint) {
// Facebook広告アカウントIDとアクセストークンを設定
var accessToken = facebook_getAccessToken(); // スプレッドシートからアクセストークンを取得
var adAccountId = [広告アカウントIDの取得方法]で取得した広告アカウントID; // Facebook広告アカウントID
var apiVersion = 'v21.0'; // 使用するAPIのバージョン
// APIのURLを構築
var apiUrl = `https://graph.facebook.com/${apiVersion}/act_${adAccountId}/${endpoint}`;
var queryParams = {
fields: "id,name", // リクエストで取得するフィールド
access_token: accessToken // アクセストークン
};
// クエリパラメータをURLエンコードして追加
var queryString = "";
for (var key in queryParams) {
if (queryParams.hasOwnProperty(key)) {
var encodedKey = encodeURIComponent(key);
var encodedValue = encodeURIComponent(queryParams[key]);
queryString += `${encodedKey}=${encodedValue}&`;
}
}
// 最後の&を削除
queryString = queryString.slice(0, -1);
// 完全なURLを構築
var urlWithParams = apiUrl + "?" + queryString;
// APIリクエスト用オプションの設定
var options = {
method: "get",
muteHttpExceptions: true // エラーが発生した場合でも例外をスローしない
};
try {
// APIリクエストを送信
var response = UrlFetchApp.fetch(urlWithParams, options);
var responseCode = response.getResponseCode(); // レスポンスコードを取得
if (responseCode === 200) {
// 正常にデータを取得
var jsonData = JSON.parse(response.getContentText());
return jsonData.data;
} else {
// エラーハンドリング(ステータスコードが200以外の場合)
var errorDetails = response.getContentText();
var errorMessage = `Meta広告データ取得に失敗しました。エンドポイント: ${endpoint}, ステータスコード: ${responseCode}, エラー詳細: ${errorDetails}`;
Logger.log(errorMessage);
return null;
}
} catch (error) {
// その他のエラーハンドリング
var errorMessage = `Meta広告データ取得中にエラーが発生しました。エンドポイント: ${endpoint}, エラー内容: ${error.message}`;
Logger.log(errorMessage);
return null;
}
}
// キャンペーンごとに広告データを取得する関数
function getFacebookAdsDataForCampaign(campaignId,fields,argDaySince,argDayUince) {
// 必要な変数と設定を準備
var apiVersion = 'v21.0'; // APIのバージョン
var accessToken = facebook_getAccessToken(); // スプレッドシートからアクセストークンを取得
// APIリクエスト用のURLを構築
var apiUrl = `https://graph.facebook.com/${apiVersion}/${campaignId}/insights`;
var queryParams = {
fields: fields,
"time_range[since]": argDaySince,
"time_range[until]": argDayUince,
access_token: accessToken
};
// クエリパラメータをURLに追加
var queryString = "";
for (var key in queryParams) {
if (queryParams.hasOwnProperty(key)) {
// パラメータをエンコードして、&でつなげる
var encodedKey = encodeURIComponent(key);
var encodedValue = encodeURIComponent(queryParams[key]);
queryString += `${encodedKey}=${encodedValue}&`;
}
}
// 最後の&を削除
queryString = queryString.slice(0, -1);
// 完全なURLを構築
var urlWithParams = apiUrl + "?" + queryString;
// APIリクエスト用オプションの設定
var options = {
method: "get",
muteHttpExceptions: true // エラーが発生した場合でも例外をスローしない
};
try {
// APIリクエストを送信
var response = UrlFetchApp.fetch(urlWithParams, options);
var responseCode = response.getResponseCode(); // レスポンスコードを取得
if (responseCode === 200) {
// 正常にデータを取得
var jsonData = JSON.parse(response.getContentText());
return jsonData.data;
} else {
// エラーハンドリング(ステータスコードが200以外の場合)
var errorDetails = response.getContentText();
var errorMessage = `Meta広告キャンペーンデータ取得に失敗しました。ステータスコード: ${responseCode}, エラー詳細: ${errorDetails}`;
Logger.log(errorMessage);
return null;
}
} catch (error) {
// その他のエラーハンドリング
var errorMessage = `Meta広告キャンペーンデータ取得中にエラーが発生しました: ${error.message}`;
Logger.log(errorMessage);
return null;
}
}
// 取得した広告データをスプレッドシートにキャンペーンごとに書き込む関数
function facebook_writeFacebookAdsDataToSheet(sheetName,endpoint,fields) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // スプレッドシートを取得
// シートが存在する場合は、そのシートを削除
var sheet = spreadsheet.getSheetByName(sheetName);
if (sheet) {
// シートのすべてをクリアする
sheet.clear();
} else {
// シートが存在しない場合は新しいシートを作成
sheet = spreadsheet.insertSheet(sheetName);
}
var lastRow = sheet.getLastRow(); // 最終行を取得
// もしシートにデータがない場合は、最初の行をヘッダーとして設定
// ------------------------------------------------------------
var yesterday = facebook_getDateNDaysAgo(1); // 前日の日付
var oneDaysAgo = facebook_getDateNDaysAgo(31); // 31日前の日付
// 取得する期間を変更したい場合は、以下のfacebook_getDateNDaysAgo関数の引数を変更してください。
// 例えば、前日の日付を取得する場合は、引数に「1」を指定します。
// facebook_getDateNDaysAgo(1); // 前日の日付を取得
// 31日前の日付を取得したい場合は、引数に「31」を指定します。
// facebook_getDateNDaysAgo(31); // 31日前の日付を取得
// 最長期間は37か月です。それ以前のものは取得できません。
// 参考文献
// https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group/ads?locale=ja_JP
// ------------------------------------------------------------
if (lastRow === 0) {
// キャンペーンのデータ構造を取得
var campaigns = facebook_getData(endpoint);
var firstCampaignData = getFacebookAdsDataForCampaign(campaigns[0].id, fields, oneDaysAgo, yesterday);
// データの一番目のアイテムからフィールド名を取得してヘッダーに設定
if (firstCampaignData.length > 0) {
var sampleAd = firstCampaignData[0]; // 最初の広告データをサンプルとして利用
var header = Object.keys(sampleAd); // データのキーをヘッダーに設定
sheet.getRange(1, 1, 1, header.length).setValues([header]); // ヘッダーを書き込む
lastRow = 1; // ヘッダーの次からデータを書き込む
}
}
// 書き込むデータを格納する配列
var dataToWrite = [];
// 各キャンペーンのデータを取得して配列に格納
for (var c = 0; c < campaigns.length; c++) {
var currentDate = new Date(oneDaysAgo); // 開始日
var endDate = new Date(yesterday); // 終了日
while (currentDate <= endDate) {
// 日付をフォーマット(YYYY-MM-DD形式)に変換
var argDaySince = Utilities.formatDate(currentDate, "GMT", "yyyy-MM-dd");
var nextDay = new Date(currentDate);
nextDay.setDate(currentDate.getDate() + 1);
// 指定した1日のデータを取得
var adsData = getFacebookAdsDataForCampaign(campaigns[c].id, fields, argDaySince, argDaySince);
// データをオブジェクト形式で格納
if (adsData && adsData.length > 0) {
for (var i = 0; i < adsData.length; i++) {
var adData = adsData[i];
var rowData = {};
// 各フィールドに対応する値をキーとともに格納
var keys = Object.keys(adData);
for (var j = 0; j < keys.length; j++) {
var key = keys[j];
// adDataオブジェクトの各キーについて処理
if (Array.isArray(adData[key])) { // 値が配列であるか確認
var conversionsArray = adData[key]; // 配列を取得
var formattedConversions = conversionsArray
.map(function (conversion) { // 配列の各要素を処理
// キーがconversionsで、なおかつaction_typeがcontact_totalの場合のみ特定の処理を実行
if (key === "conversions" && conversion.action_type === "contact_total") {
return `${conversion.value}`; // JSON文字列に変換
} else if(key !== "conversions") {
// 他の場合の処理(必要に応じて調整)
return `${conversion}`; // JSON文字列に変換
}
})
.join(""); // 空文字区切りで結合して1つの文字列にする
rowData[key] = formattedConversions; // 結果をrowDataオブジェクトに格納
} else {
rowData[key] = adData[key]; // 値が配列でない場合はそのまま格納
}
}
// 不足しているキーを補足して空文字を設定(ヘッダーと一致させる)
if (header) {
for (var k = 0; k < header.length; k++) {
var key = header[k];
if (!(key in rowData)) {
rowData[key] = ""; // ヘッダーに存在するがデータにないキーに空文字を設定
}
}
}
// 配列にオブジェクトを追加
dataToWrite.push(rowData);
}
}
// リクエスト間で一定時間待機(例えば500ms)
Utilities.sleep(500);
// 日付を1日進める
currentDate = nextDay;
}
}
// 一度に全データをシートに書き込む
if (dataToWrite.length > 0) {
var formattedData = [];
// ヘッダーの順番に沿ってデータを並べ替え
for (var row = 0; row < dataToWrite.length; row++) {
var rowObject = dataToWrite[row];
var formattedRow = [];
// ヘッダー順にデータを並べ替える
for (var h = 0; h < header.length; h++) {
var key = header[h];
var cellValue = rowObject[key] || ""; // データが存在しない場合は空文字
formattedRow.push(cellValue);
}
// シングルコーテーションを数値文字列に付与
for (var col = 0; col < formattedRow.length; col++) {
if (typeof formattedRow[col] === "string" && /^[+-]?\d+(\.\d+)?$/.test(formattedRow[col])) {
formattedRow[col] = "'" + formattedRow[col]; // 数値文字列にシングルコーテーションを追加
}
}
formattedData.push(formattedRow);
}
// シートに書き込む
sheet.getRange(lastRow + 1, 1, formattedData.length, header.length).setValues(formattedData);
}
}
コードの動作の流れ
今回使用したコードの説明を簡単に行います。
1.アクセストークンの管理
facebook_getAccessToken
:Googleスプレッドシートの「トークン管理」シートから、Facebook広告APIにアクセスするためのアクセストークンを取得します。saveAccessToken
:新しいアクセストークンを「トークン管理」シートに保存します。refreshAccessToken
:アクセストークンを更新するための関数です。FacebookのAPIを利用して、短期間のアクセストークンを長期間のトークンに交換します。
2.キャンペーン、広告セット、広告データの取得
facebook_getCampaignIds
、facebook_getAdSets
、facebook_getAds
:これらの関数は、それぞれキャンペーン、広告セット、広告のデータを取得するために使用されます。データはMeta広告のAPIから指定されたフィールド(例えば、インプレッション数やクリック数)を基に取得されます。- 各関数内で、
facebook_writeFacebookAdsDataToSheet
が呼び出され、Googleスプレッドシートにデータを書き込むための処理が実行されます。
3.広告データの取得と書き込み
facebook_getData
:指定したエンドポイント(キャンペーン、広告セット、広告など)からそれぞれのIDを取得します。APIレスポンスから必要な情報を取り出し、Googleスプレッドシートに書き込む準備をします。getFacebookAdsDataForCampaign
:取得したIDに対して、指定した日付範囲の広告データを取得します。fields
パラメータを用いて、取得する情報を選択します(例:インプレッション数、支出、コンバージョン数など)。facebook_writeFacebookAdsDataToSheet
:Googleスプレッドシートにデータを書き込むためのメインの関数です。シートが存在しない場合は新規作成し、既存のシートがあればデータをクリアして更新します。取得したデータは、キャンペーンごとに整理されてシートに書き込まれます。
4.日付の設定
facebook_getDateNDaysAgo
:指定した日数前の日付を計算し、facebook_writeFacebookAdsDataToSheet
関数内でデータ取得期間として使用します。これにより、過去の特定の期間の広告データを取得できます。
5.データの書き込み
- 取得した広告データは、1日ごとに取得され、最終的にGoogleスプレッドシートに書き込まれます。シートには、広告キャンペーンごとのデータが整理され、ヘッダーとともにデータが格納されます。
まとめ
今回、Meta広告の公式ドキュメントや様々な資料を参考にしましたが、正直、かなり難解でした。特に公式ドキュメントは読みにくく、理解するのにかなり時間がかかりました。それでもなんとか実装を完了できて、安心しました。
今回は触れませんでしたが、GoogleスプレッドシートとGoogle Apps Scriptには「トリガー」を使って定期実行を設定することができます。たとえば、毎日朝9時から10時の間にfacebook_getCampaignIds
関数を実行することも可能です。もし興味がある方がいれば、この機能について調べてみてください。
個人的な経験ですが、Google Apps Script自体は無料で使えて非常に便利なツールです。しかし、今回のようにAPIを使ったHTTPリクエストを行う際、同じコードでもたまにエラーが発生することがあります。データが取得できないことがあるので、その場合はもう一度実行してみてください。このようなエラーが発生した場合、エラーメッセージをSlackなどに送信するような実装を盛り込んでおくと、素早く対応できるのでおすすめです。個人的には、この点が改善されれば、さらに便利なツールになると思うのですが、なんとかならないものでしょうか??
それでは、また次回の記事でお会いしましょう!
参考文献
- Meta広告をGASで自動でGoogleスプレッドシートに記入 | WEB担当者の備忘録
- 認証 – マーケティングAPI – ドキュメンテーション – Meta for Developers
- アプリのインストール、トークンの生成、更新、取り消し – Business Management APIs – ドキュメンテーション – Meta for Developers
- インサイトAPI – マーケティングAPI – ドキュメンテーション – Meta for Developers
- Ad Account, Ad Campaigns – ドキュメンテーション – Meta for Developers
- Ad Campaign, Insights – ドキュメンテーション – Meta for Developers
- Ad Set, Reference – ドキュメンテーション – Meta for Developers
- グラフAPI リファレンス v21.0: Ad Account Ads – ドキュメンテーション – Meta for Developers
このカテゴリの最新記事
2023.12.20
2024.04.18
2024.09.13
2024.10.09