EMAX Studio Blog
Meta Ads CLIのセットアップ方法:2026年のステップバイステップチュートリアル
Manuel Mrosek · 2026-06-16 · — 閲覧数
Meta Ads CLIのセットアップ方法:2026年のステップバイステップチュートリアル
Meta Ads CLIをセットアップするには、Business ManagerでSystem Userを作成し、ads_management、ads_read、business_managementの権限を持つ無期限トークンを生成し、広告アカウントとPageをアセットとしてリンクし、設定ファイル経由でCLIをそのトークンに向けます。Business Managerの管理者権限、Facebook Page、広告アカウントで認証済みの支払い方法をお持ちであれば、全体のプロセスは約45分で完了します。
これはAIエージェントによるFacebook広告運用に関する概要記事のディープダイブ版です。あの記事では、複数のキャンペーンを運用する人にとって、CLI主導のセットアップが広告マネージャでのクリック作業よりも優れている理由を説明しました。本記事は実践ガイドであり、すべてのステップ、私たち自身のスタックを構築した際に遭遇したすべてのエラーメッセージ、そして最後に実際の初回キャンペーンの解説をお届けします。
Meta Ads CLIが実際に行うこと
「Meta Ads CLI」は単一の公式バイナリではありません。スクリプトとMeta Marketing APIの間に位置する、薄いサーバーサイド自動化レイヤーです。PythonまたはNodeコードを書き、CLIが認証、リクエスト署名、長期有効なSystem Userトークンを処理し、キャンペーンは広告マネージャをクリックすることなくgraph.facebook.com/v23.0/を通じて公開されます。
難しいのはラッパーコードではありません — それは100行程度です。難しいのは、本番トラフィックでMetaが実際に受け入れるトークンを生成する、Business Manager内の7ステップのセットアップ儀式です。この儀式により、OAuthリフレッシュダンスや、いずれすべてのブラウザベース自動化を破壊するトークン期限切れの痛みから解放されます。
見返りは本物です。CLIスタックが稼働すれば、6つの広告バリアントを持つキャンペーンを90秒以内に立ち上げ、cron経由で午前7:00に昨日のパフォーマンスを日次レポートに引き出し、パフォーマンスの悪い広告を自動的に停止できます — 広告マネージャに一度もログインすることなく。
前提条件
開始する前に、これらが揃っていることを確認してください。いずれかを省略すると、後で2時間のうさぎ穴に落ちることになります。
管理者権限を持つMeta Business Managerアカウントが必要です — 個人のFacebookアカウントではSystem Userトークンは機能しません。編集者ではなく管理者として登録されているFacebook Pageが必要です。そのBusiness Manager内に、認証済みの支払い方法と請求が承認された少なくとも1つの国が設定されたMeta広告アカウントが必要です。トラフィックを誘導するウェブサイト用に設定されたPixel(新しい用語では「Dataset」)が必要です。そしてパッケージをインストールできる、Python 3.10+またはNode 18+がローカルにインストールされている必要があります。
まだPixelをお持ちでない場合は、続行する前に作成してください。私たちのようにConversions API(CAPI)のみを使用する予定であっても、サーバーサイドイベントのルーティングアドレスとしてPixel IDが必要です。
7ステップのセットアップ
これらのステップは順次的です。それぞれが次のステップをアンロックします。先に進むと、Metaのエラーメッセージがしばしば誤解を招くため、デバッグが困難な方法で連鎖が壊れます。
ステップ1:Business Manager System Userを作成
Business Settings → Users → System Usersに移動します。「Add」をクリックして新しいSystem Userを作成します。名前はAPIには関係ありませんが、6ヶ月後の自分のために重要です — 何をしているか覚えておけるよう、your-brand-agentのような名前を付けてください。「Admin」役割を選択してください(「Employee」ではなく)。管理者権限のないSystem UserはCustom ConversionsやPixelイベントを管理できないためです。
私たちのスタックを構築した際、emaxstudioagentを作成しました。System User IDは自動的に割り当てられます(15桁の数字)。書き留めておきましょう。
ステップ2:Marketing APIユースケースで開発者アプリを作成
developers.facebook.com → My Apps → Create Appに移動します。ドロップダウンに表示されていれば、ユースケース「Marketing API」を選択します。「Other」しか表示されない場合でも問題ありません — System Userトークンはどちらでも機能します。ドイツ語UIではこれを「Werbeanzeigen mit Marketing API」とラベル付けし、英語UIでは単に「Marketing API」または「Other」と呼びます。どちらも同一のトークンを生成します。
アプリをBusinessタイプに設定します(Consumerではありません)。左側のサイドバーからMarketing API製品をアプリに追加します。アプリはDevelopment Modeで開始します。System Userトークンが実際の広告で機能する前に、Live Modeに移行する必要があります(詳細は以下)。
Live Modeに移行するには、Metaは公開プライバシーポリシーURLとアプリアイコン(1024×1024 PNG)を要求します。どちらも必須です。アプリアイコンは洗練されている必要はなく — プレースホルダーで動作します — しかしURLは実際にプライバシーポリシーページに解決される必要があります。私たちはメインドメインの/legalでホストしています。
ステップ3:無期限のSystem Userトークンを生成
Business Settings → System Users → [あなたのSystem User] → 「Generate New Token」をクリックします。ステップ2で作成したアプリを選択します。次に権限を選択します:
ads_management— キャンペーンの作成、編集、一時停止に必要ads_read— インサイトとレポートデータの取得に必要business_management— アセットとカスタムコンバージョンの管理に必要
有効期限を「Never」に設定します。System Userトークンは、本当に期限切れにならない唯一のMetaトークンです — User Access Tokensは最大60日、PageトークンはそれらをWelderとしたUserトークンに依存します。これがバックエンド自動化のためにOAuthの代わりにSystem Userを使用する理由全体です。
トークンをすぐにコピーします。Metaは一度だけ表示します。シークレットマネージャまたはchmod 600の.envファイルに保存します。Gitにコミットしないでください。
ステップ4:広告アカウントとPageをアセットとしてリンク
System Userは存在しますが、まだ何にもアクセスできません。アセットを明示的に割り当てる必要があります。Business Settings → System Users → [あなたのSystem User] → 「Add Assets」をクリックします。
完全な権限(「Manage Campaigns」+「Manage Performance」)で広告アカウントを割り当てます。完全な権限でPageを割り当てます。完全な権限でPixel/Datasetを割り当てます。複数の広告アカウントがあり、CLIですべてを管理したい場合は、それぞれを割り当てます。
これをセットアップした際、act_975780295197610(私たちの広告アカウント)、Page 1113585798495892(EMAX Studio page)、Pixel 1464075091373537を割り当てました。広告アカウントIDのact_プレフィックスはAPIを呼び出すときに必須です — フォーマット規則ではなく、実際のIDの一部です。
ステップ5:「Page verwalten」/「Manage Page」権限を割り当て
これは初回ほとんどの人がはまるステップです。ステップ4でPageをアセットとして割り当てましたが、デフォルトの権限レベルは「Anzeigen erstellen」/「Create Ads」です — それでは不十分です。System UserはそのPageを参照する広告クリエイティブを公開するために「Page verwalten」/「Manage Page」を必要とします。
これをスキップすると、すべての広告作成APIコールでPageに言及しない汎用的な「permission denied」エラーが返されます。実際の問題がPageアセット設定の奥にある1クリックである一方で、トークンスコープと広告アカウントの権限をチェックするのに何時間も費やすことになります。
アセットリストでPageをクリックし、権限までスクロールし、System Userの「Manage Page」をオンに切り替えます。保存します。
ステップ6:CLIをインストールして設定ファイルを作成
Pythonの場合、公式SDKをインストールします:
pip install facebook-business
Nodeの場合、コミュニティメンテナンスのクライアントを使用します:
npm install facebook-nodejs-business-sdk
~/.meta-ads/config.json(またはスタックがシークレットを保存する場所)に設定ファイルを作成します:
{
"access_token": "EAA...your-system-user-token",
"app_id": "910292175368026",
"app_secret": "your-app-secret",
"ad_account_id": "act_975780295197610",
"page_id": "1113585798495892",
"pixel_id": "1464075091373537",
"api_version": "v23.0"
}
権限を設定します:chmod 600 ~/.meta-ads/config.json。app_secretはSystem Userトークンにはオプションですが、Metaが本番に推奨するappsecret_proof署名を有効にします。
ステップ7:最初のテストコマンドを実行
キャンペーンをリストすることですべてが動作することを確認します。Pythonで:
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.adaccount import AdAccount
import json
cfg = json.load(open("/path/to/config.json"))
FacebookAdsApi.init(access_token=cfg["access_token"])
account = AdAccount(cfg["ad_account_id"])
campaigns = account.get_campaigns(fields=["name", "status", "objective"])
for c in campaigns:
print(c["name"], c["status"], c["objective"])
これがリスト(まだキャンペーンがない場合は空のリストでも)を返せば完了です。OAuthExceptionまたはPermission deniedが発生した場合は、以下のエラー表に戻ってください。
一般的なセットアップエラーと修正方法
これらは構築中に私たちを噛んだ8つのエラーです。それぞれが実際の時間を費やしました。あなた自身を痛みから救ってください。
| エラー | 実際の意味 | 修正方法 |
|---|---|---|
Cannot use Custom Conversion with 0 events as promoted_object |
Custom Conversionがまだ発火していないため、Metaがそれに最適化することを拒否します | まずLANDING_PAGE_VIEWSに最適化し、50+イベントが発火した後にOFFSITE_CONVERSIONSに切り替えます |
App must be Live, not Development |
トークンを生成しましたが、アプリをLive Modeに移行しませんでした | プライバシーポリシーURL + アプリアイコンを追加し、アプリダッシュボードでApp Review → Liveを切り替えます |
Use Case must be Marketing API, not Other (UI varies) |
ドイツ語UIラベル「Werbeanzeigen mit Marketing API」は英語の「Marketing API」にマップされます。どちらもSystem User Tokensで動作します。 | どちらのユースケースでも動作します。ドロップダウン名を無視して進めます |
Instagram requires EU Pay-or-Consent + Page Linkage |
IGアカウントがPay-or-Consent設定のあるPageにリンクされていない場合、EUトラフィックでInstagram配置の広告はHARD_ERRORで失敗します | Business Settings → Accounts → InstagramでInstagram BusinessアカウントをPageにリンクします |
bid_strategy is required |
広告セット作成でbid_strategyフィールドが欠落 |
広告セットペイロードに"bid_strategy": "LOWEST_COST_WITHOUT_CAP"を追加します |
targeting_automation.advantage_audience is required |
新しいv23.0フィールドが必須です | "targeting_automation": {"advantage_audience": 1}(または0)を追加します |
video_feeds placement is deprecated |
この配置はv23.0で削除されました | 配置リストからvideo_feedsを削除し、代わりにfeedとinstagram_reelsを使用します |
image_hash is required for video_data |
動画クリエイティブにはハッシュとして登録されたサムネイル画像が必要です | ffmpeg -i video.mp4 -ss 00:00:01.5 -frames:v 1 thumb.jpgでフレームを抽出し、/adimages経由でアップロードし、返されたハッシュを使用します |
Custom Conversionのものは最も意地悪です。なぜならエラーメッセージは技術的には何が間違っているかを伝えていますが、回避策は自明ではないからです。新しく作成されたCustom ConversionにはMetaのシステムでゼロイベントがあります。Metaは過去データのないものに対してキャンペーンを最適化することを拒否します。コツは、まずLanding Page Viewsに最適化したキャンペーンを立ち上げ、CAPIを通じて50+のコンバージョンが発火するのを待ち、その後Custom Conversion IDで広告セットのpromoted_objectをOFFSITE_CONVERSIONSに切り替えることです。その後、最適化が実際に機能します。
実際の初回キャンペーン解説
これが私たちが最初のライブテストとして実行したものです。実際の値、実際のフロー、実際の結果です。
キャンペーンを作成。 Objective: OUTCOME_TRAFFIC(コンバージョンデータが揃った後、OUTCOME_SALESに切り替え)。Status:広告セットと広告がその下に作成されてから、すべてを1ステップでACTIVEに切り替えられるように最初はPAUSED。私たちのセットアップでは予算は広告セットレベルにあります。
広告セットを作成。 日次予算:1000(セント = $10/日)。Optimization:LANDING_PAGE_VIEWS。Bid strategy:LOWEST_COST_WITHOUT_CAP。ターゲティング:国["US", "GB", "CA"]、年齢25〜55、言語英語。Placements:feed、instagram_reels、stories、marketplace。Targeting automation:{"advantage_audience": 1}。
クリエイティブを構築。 3つの画像クリエイティブと3つの動画クリエイティブ — 合計6つの広告。画像には、私たち自身のEMAX Studioの出力を使用しました(自分のドッグフードを食べる):3つのフック、3つのブランドカラーの背景、すべて1080×1080。動画には、単語ごとのキャプションとAI音声を持つ15秒の縦型リール3本を、私たち自身のパイプライン経由で生成しました(AIマーケティングキャンペーンをステップバイステップで作成する方法で解説)。各動画クリエイティブはサムネイル用のimage_hashが必要です — ffmpegで1.5秒のフレームを抽出し、/adimagesにアップロードし、video_dataブロック内で返されたハッシュを使用します。
アクティベート。 キャンペーン、次に広告セット、次に6つの広告すべてをACTIVEに切り替えます。Metaのレビューは通常15〜30分でクリアされます。拒否された広告はad.get('effective_status')経由で広告ごとに表示されます。
日次レポート。 meta_daily_report.pyスクリプトがcron経由でベルリン時間午前7:00に実行されます。インサイトを引き出し、spend / CTR / CPM / conversionsをTelegramメッセージにフォーマットし、100+インプレッション後のCTR 0.5%未満の広告を自動停止します。最初の48時間で4,200インプレッション、78クリック(CTR 1.86%)、12のQuick Scan完了をコンバージョン1件あたり$1.67で生成しました — Landing Page ViewsからQuickScanComplete Custom Conversionに対するOFFSITE_CONVERSIONSに3日目に最適化を切り替えるのに十分なシグナルです。
避けるべき落とし穴
いくつかのことがあなたを焼き尽くします。私たちはそれぞれを困難な方法で学びました。
トークンをGitにハードコーディングしないでください。プライベートリポジトリでも。トークンはCIログ、誤って公開されたフォーク、リポジトリの可視性が変更される前に行われたコミットを通じて漏洩します。常に環境変数またはリポジトリ外のchmod-600設定ファイルから読み取ります。
ステップ5のPage Manage権限をスキップしないでください。あなたが得るエラーは広告アカウントまたはトークンに関するもののように見えます。そうではありません。クリエイティブ作成で曖昧な「permission denied」を見た場合は、最初にPageアセットの権限を再確認してください。
開発者アプリがまだDevelopment Modeであるままデプロイしないでください。トークンは作成したユーザーには機能しますが、他のSystem Userコンテキストでは静かに失敗します。サーバーで何かを実行する前にLive Modeに移行してください。
動画クリエイティブのimage_hashを忘れないでください。これがないと、video_dataに関する誤解を招くエラーで広告作成全体が失敗します。
スケールする予定であればCAPIをスキップしないでください。ブラウザPixelはiOS ATT、広告ブロッカー、トラッキング防止に30〜50%のイベントを失います。サーバーサイドConversions APIはそれらのほとんどを回復します — 1週末の作業が、広告支出を拡大した最初の1週間で投資を回収します。
よくある質問
Meta Ads CLIをセットアップするのにいくらかかりますか?
セットアップ自体は無料です。Marketing API、System Userトークン、Business Manager、すべての開発者ツールはコストゼロです — 実際に実行した広告にのみ支払います。初回は4〜6時間のセットアップ時間、それ以降は30分を計画してください。
1つのCLIインストールで複数の広告アカウントを実行できますか?
はい、これがエージェンシーがSystem Userトークンを使用する主な理由の1つです。Business Settingsで各広告アカウントをアセットとして追加すると、設定のad_account_idを変更するか、パラメータとして渡すことで、それらのいずれかをターゲットにできます。権限が整っていれば、1つのSystem Userトークンで複数のBusiness Managerにまたがる数百の広告アカウントを管理できます。
Google Ads CLIについては — セットアップは似ていますか?
コンセプトは似ていますが、Googleのセットアップは粗いです。Googleは7〜21日かかる可能性のある開発者トークンの承認、定期的に期限切れになるOAuth2リフレッシュトークン、およびMCC(マネージャアカウント)権限の追加レイヤーを必要とします。MetaのSystem Userトークンは、2つのシステムの中で本当によりシンプルなものです。両方のプラットフォームを実行する場合は、パターンを学ぶためにまずMetaをセットアップしてください。
トークンが侵害された場合、安全にローテーションするにはどうすればよいですか?
新しいSystem Userトークン(同じ権限、同じ「Never」有効期限)を生成し、設定を更新し、新しいトークンが動作することをテストし、古いものを取り消します。Metaは同じSystem Userの複数のアクティブトークンを同時に保持できるため、ダウンタイムなしでロールできます。トークンが漏洩した場合、すぐに取り消し、APIを通じて最近の広告支出を承認されていないキャンペーンのために監査します。
Conversions API(CAPI)はこのセットアップにどのように適合しますか?
CAPIは別個ですが補完的なシステムです。Meta Ads CLIはキャンペーン、広告セット、広告を管理します。CAPIはそれらの広告が最適化するサーバーサイドコンバージョンイベントを送信します。両方とも同じPixel IDを使用します。CAPIイベントはブラウザPixelとは独立して流れます — クッキーが関与せず、PIIは送信前にハッシュ化されるため、GDPRクリーンなトラッキングの基盤です。AIエージェントによるAI Facebook広告の概要は、CAPIがより大きな自動化スタックにどのように適合するかをカバーしています。
正直な結論
Meta Ads CLIは魔法ではありません。ワークフローから3つのものを排除するための規律ある方法です:OAuthトークンのリフレッシュ、手動の広告マネージャログイン、広告を立ち上げるたびに14の設定をクリックする人的エラーのコスト。一度稼働すれば、以前30分かかっていたことを90秒で行います。
Metaのツールが面倒なので、セットアップは面倒です。しかしステップは決定論的です。7ステップのセットアップを正確に従い、表の8つのエラーに注意すれば、午後の終わりまでに本番グレードの広告スタックを持つことになります。CLIがAIクリエイティブと日次レポートにどのように結びつくかの全体像については、AIエージェントによるFacebook広告に関する概要と、今年広告エコシステムで何がシフトしているかについてのAIニュース2026年第18週を参照してください。
CLIがライブになったら、問題はそれにどのクリエイティブを供給するかになります。emax.studioで90秒のAIレディネス無料スキャンを通じてランディングページを実行してください — 2分以内にスコア、コンバージョンギャップのリスト、すぐに実行可能なキャンペーンブリーフが得られます。