mcpField
M
meta-api-reference

meta-api-reference

github.com/swan-gtmマーケティング・グロース22136 回インストール1 週間前に更新
リポジトリ

meta-api-reference について

meta-api-referenceは、開発者やマーケター向けのMeta Marketing APIリファレンススキルです。キャンペーン、広告セット、クリエイティブ、ターゲティングの構造やフィールド要件をまとめています。

主な機能

  1. 01キャンペーンと広告セットの項目リファレンス
  2. 02目的と入札オプション
  3. 03ターゲティング仕様の説明
  4. 04広告クリエイティブ構造の例

活用シーン

  1. 01キャンペーンAPIリクエストの計画
  2. 02広告セットの必須項目の確認
  3. 03オーディエンスターゲティングの設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/swan-gtm/gtm-skills --skill meta-api-reference

インストール後、Claude Code で/meta-api-referenceを入力して読み込まれたか確認します。

詳細

Meta Marketing API - 完全リファレンス

設定

  • API バージョン: v22.0
  • ベース URL: https://graph.facebook.com/v22.0/
  • .env 内の 2 つのトークン:
    • ADS_MANAGER_ACCESS_TOKEN - Marketing API(キャンペーン管理、インサイト、レポート)
    • AD_LIBRARY_ACCESS_TOKEN - Ad Library API(競合他社の調査)
  • トークンの有効期限: 最後に更新してから約 60 日(更新日については .env のコメントを確認してください)

アカウント階層

Ad Account (act_XXXX)
  -> Campaign (objective, budget if CBO, bid strategy)
    -> Ad Set (targeting, budget if ABO, optimization, schedule)
      -> Ad (creative reference, status)
        -> Ad Creative (media, copy, CTA, url_tags)

キャンペーンのスキーマ

エンドポイント: POST /{account_id}/campaigns

必須フィールド
フィールド型説明
namestringキャンペーン名
objectiveenumマーケティングの目的(ODAX フレームワーク)
statusenumキャンペーンのステータス
special_ad_categoriesarray特別カテゴリの申告(該当しない場合は [] を指定)
任意フィールド
フィールド型説明
daily_budgetint (cents)CBO の日予算(5000 = $50.00)
lifetime_budgetint (cents)CBO の通算予算
bid_strategyenum入札戦略
buying_typeenum購入タイプ
is_adset_budget_sharing_enabledstringCBO の場合は "true"、ABO の場合は "false"
execution_optionsarray["validate_only"] または ["include_recommendations"]
目的(ODAX フレームワーク)
値説明用途
OUTCOME_AWARENESSブランド認知度、リーチファネル上部
OUTCOME_ENGAGEMENT投稿エンゲージメント、動画再生数、ページへの「いいね!」ファネル中部
OUTCOME_TRAFFICリンククリック、ランディングページビューファネル中部
OUTCOME_LEADSリード獲得フォーム、コンバージョン(リード)ファネル下部
OUTCOME_SALESコンバージョン(購入)、カタログ販売ファネル下部
OUTCOME_APP_PROMOTIONアプリのインストール、アプリのエンゲージメントアプリキャンペーン

従来の目的(新しいキャンペーンでは非推奨ですが、古いキャンペーンでは API から返されます):CONVERSIONS、LEAD_GENERATION、LINK_CLICKS、BRAND_AWARENESS、REACH、POST_ENGAGEMENT、VIDEO_VIEWS、MESSAGES、APP_INSTALLS、PAGE_LIKES、EVENT_RESPONSES、STORE_VISITS、PRODUCT_CATALOG_SALES

入札戦略
値説明
LOWEST_COST_WITHOUT_CAP上限なしで最小コスト(デフォルト)
COST_CAPコスト上限 - 結果あたりの最大コストを設定
LOWEST_COST_WITH_BID_CAP入札上限 - オークションごとの最大入札額を設定
LOWEST_COST_WITH_MIN_ROAS最小 ROAS - 目標とする最低リターンを設定
特別広告カテゴリ
値説明
CREDITクレジットのオファー
EMPLOYMENT求人
HOUSING住宅・不動産
ISSUES_ELECTIONS_POLITICS社会問題、選挙、政治
FINANCIAL_PRODUCTS_SERVICES金融商品
ONLINE_GAMBLING_AND_GAMINGギャンブル・ゲーム
NONE特別カテゴリなし
購入タイプ
値説明
AUCTION標準のオークション方式(デフォルト。通常は 99% のケースで使用)
RESERVED予約・配信保証(リーチ&フリークエンシー)
キャンペーンのステータス

ACTIVE、PAUSED、DELETED、ARCHIVED

CBO と ABO

CBO(キャンペーン予算の最適化):

  • キャンペーンに daily_budget または lifetime_budget を設定します
  • キャンペーンに is_adset_budget_sharing_enabled: "true" を設定します
  • 広告セットには予算を設定しないでください
  • Meta が広告セット間で予算を自動的に配分します

ABO(広告セット予算の最適化):

  • キャンペーンに is_adset_budget_sharing_enabled: "false" を設定します
  • 各広告セットに daily_budget または lifetime_budget を設定します
  • キャンペーンには予算を設定しないでください
  • 各広告セットに個別の予算が割り当てられます

広告セットのスキーマ

エンドポイント: POST /{account_id}/adsets

必須フィールド
フィールド型説明
namestring広告セット名
campaign_idstring親キャンペーン ID
optimization_goalenum最適化の対象
billing_eventenum課金のタイミング
targetingJSON objectターゲティングの指定
statusenum広告セットのステータス
daily_budget or lifetime_budgetint (cents)予算(ABO のみ)
任意フィールド
フィールド型説明
bid_amountint (cents)入札額(cost_cap または bid_cap では必須)
bid_strategyenumキャンペーンの入札戦略を上書きします
start_timeISO 8601配信開始日時
end_timeISO 8601配信停止日時
promoted_objectJSON objectコンバージョン最適化のピクセル/イベント
destination_typeenum広告の遷移先
is_dynamic_creativeboolダイナミッククリエイティブを有効にします
pacing_typearray["standard"] または ["day_parting"]
dsa_beneficiarystringDSA 準拠 — 受益者名(EU)
dsa_payorstringDSA 準拠 — 支払者名(EU)
targeting_automationJSON objectAdvantage+ オーディエンス設定
最適化の目標(34 種類)

最も一般的に使用される値:

値使用する目的説明
OFFSITE_CONVERSIONSOUTCOME_LEADS, OUTCOME_SALESピクセル経由のウェブサイトコンバージョン
LEAD_GENERATIONOUTCOME_LEADSプラットフォーム内のリードフォーム送信
LINK_CLICKSOUTCOME_TRAFFICリンククリック
LANDING_PAGE_VIEWSOUTCOME_TRAFFICランディングページビュー(ピクセルが必要)
REACHOUTCOME_AWARENESS最大のユニークリーチ
IMPRESSIONSOUTCOME_AWARENESS最大のインプレッション数
AD_RECALL_LIFTOUTCOME_AWARENESS広告想起の最適化
POST_ENGAGEMENTOUTCOME_ENGAGEMENT投稿へのインタラクション
PAGE_LIKESOUTCOME_ENGAGEMENTページへの「いいね!」
THRUPLAYOUTCOME_ENGAGEMENT動画視聴(15 秒以上)
VALUEOUTCOME_SALESコンバージョン値(ROAS)
APP_INSTALLSOUTCOME_APP_PROMOTIONアプリのインストール
CONVERSATIONSOUTCOME_LEADSメッセージの会話
QUALITY_LEADOUTCOME_LEADS質の高いリード(CRM 最適化)

全リスト(その他): ADVERTISER_SILOED_VALUE、APP_INSTALLS_AND_OFFSITE_CONVERSIONS、AUTOMATIC_OBJECTIVE、DERIVED_EVENTS、ENGAGED_USERS、EVENT_RESPONSES、IN_APP_VALUE、MEANINGFUL_CALL_ATTEMPT、MESSAGING_APPOINTMENT_CONVERSION、MESSAGING_PURCHASE_CONVERSION、NONE、PROFILE_AND_PAGE_ENGAGEMENT、PROFILE_VISIT、QUALITY_CALL、REACH、REMINDERS_SET、SUBSCRIBERS、VISIT_INSTAGRAM_PROFILE

課金イベント
値説明
IMPRESSIONSインプレッションごとに課金(最も一般的で、95%以上のケースで使用)
LINK_CLICKSリンククリックごとに課金
APP_INSTALLSアプリのインストールごとに課金
THRUPLAY動画視聴ごとに課金
CLICKSすべてのクリックごとに課金
PAGE_LIKESページへの「いいね!」ごとに課金
POST_ENGAGEMENTエンゲージメントごとに課金

全リスト(その他): LISTING_INTERACTION、NONE、OFFER_CLAIMS、PURCHASE

遷移先の種類(最も一般的なもの)
値説明
WEBSITEウェブサイト URL へ遷移(最も一般的)
ON_AD広告内の遷移先(リードフォーム、インスタントエクスペリエンス)
MESSENGERMessenger の会話
WHATSAPPWhatsApp の会話
INSTAGRAM_DIRECTInstagram の DM
APPモバイルアプリ
FACEBOOKFacebook の遷移先
ON_POST投稿内
ON_VIDEO動画内
SHOP_AUTOMATIC自動ショップ

全リスト(その他): APPLINKS_AUTOMATIC、FACEBOOK_LIVE、FACEBOOK_PAGE、IMAGINE、INSTAGRAM_LIVE、INSTAGRAM_PROFILE、INSTAGRAM_PROFILE_AND_FACEBOOK_PAGE、MESSAGING_INSTAGRAM_DIRECT_MESSENGER、MESSAGING_INSTAGRAM_DIRECT_MESSENGER_WHATSAPP、MESSAGING_INSTAGRAM_DIRECT_WHATSAPP、MESSAGING_MESSENGER_WHATSAPP、ON_EVENT、ON_PAGE

プロモーションオブジェクト

コンバージョン最適化に必須です。

# For pixel conversions (OUTCOME_LEADS or OUTCOME_SALES)
'promoted_object': json.dumps({
    'pixel_id': 'YOUR_PIXEL_ID',
    'custom_event_type': 'LEAD'  # or PURCHASE, COMPLETE_REGISTRATION, etc.
})

# For lead gen forms (OUTCOME_LEADS with LEAD_GENERATION goal)
'promoted_object': json.dumps({
    'page_id': 'YOUR_PAGE_ID'
})

# For app installs
'promoted_object': json.dumps({
    'application_id': 'YOUR_APP_ID',
    'object_store_url': 'https://apps.apple.com/...'
})
custom_event_type の値

LEAD、PURCHASE、COMPLETE_REGISTRATION、ADD_TO_CART、ADD_TO_WISHLIST、INITIATE_CHECKOUT、ADD_PAYMENT_INFO、CONTACT、CUSTOMIZE_PRODUCT、DONATE、FIND_LOCATION、SCHEDULE、START_TRIAL、SUBMIT_APPLICATION、SUBSCRIBE、SEARCH、VIEW_CONTENT、OTHER


ターゲティング仕様

完全な構造
targeting = {
    # GEOGRAPHIC (required)
    'geo_locations': {
        'countries': ['US', 'CA', 'GB'],           # ISO country codes
        'country_groups': ['north_america', 'europe'],  # OR use region codes
        'regions': [{'key': '3847'}],               # State/province
        'cities': [{'key': '2430536', 'radius': 10, 'distance_unit': 'mile'}],
        'zips': [{'key': 'US:10001'}],
        'location_types': ['home', 'recent']        # home, recent, travel_in
    },

    # DEMOGRAPHICS
    'age_min': 25,                  # 13-65
    'age_max': 55,                  # 13-65
    'genders': [1],                 # 1=male, 2=female, omit or [0]=all
    'locales': [6],                 # Language codes (6=English)

    # INTEREST/BEHAVIOR TARGETING
    'flexible_spec': [
        {
            'interests': [{'id': '6003107902433', 'name': 'SaaS'}],
            'behaviors': [{'id': '6002714895372', 'name': 'Small business owners'}]
        }
    ],
    # flexible_spec logic:
    #   Within one object: fields are OR'd (interest1 OR behavior1)
    #   Multiple objects in array: OR'd together
    #   Use 'exclusions' for AND NOT logic

    'exclusions': {
        'interests': [{'id': '123', 'name': 'Excluded Interest'}]
    },

    # AUDIENCES
    'custom_audiences': [{'id': 'YOUR_AUDIENCE_ID'}],
    'excluded_custom_audiences': [{'id': 'YOUR_EXCLUDED_AUDIENCE_ID'}],

    # ADVANTAGE+ AUDIENCE
    'targeting_optimization': 'expansion_all',  # Enable Advantage+ expansion

    # PLATFORMS & PLACEMENTS (usually omit for Advantage+ Placements)
    'publisher_platforms': ['facebook', 'instagram', 'audience_network', 'messenger'],
    'device_platforms': ['mobile', 'desktop'],
    'facebook_positions': ['feed', 'story', 'facebook_reels', 'right_hand_column', 'search', 'marketplace', 'video_feeds', 'instream_video', 'profile_feed', 'biz_disco_feed', 'facebook_reels_overlay'],
    'instagram_positions': ['stream', 'story', 'reels', 'profile_reels', 'ig_search', 'explore', 'explore_home', 'profile_feed'],
    'messenger_positions': ['story', 'inbox'],
    'audience_network_positions': ['classic', 'rewarded_video'],

    # CONNECTIONS
    'connections': [{'id': 'YOUR_PAGE_ID'}],           # Connected to page
    'excluded_connections': [{'id': 'YOUR_PAGE_ID'}]   # Not connected to page
}
Advantage+ オーディエンス(v23.0+)
'targeting_automation': {
    'advantage_audience': 1   # 1 = enabled, 0 = disabled
}

有効にすると、Meta の AI は定義したターゲティングの範囲を超えて、購入意欲の高いユーザーを見つけます。基本のターゲティング(地域、年齢など)は指定しますが、Meta はその範囲を超えてターゲティングできます。API v23.0+ ではデフォルトで有効です。

地域ターゲティングのルール
  • 個別の国には countries を使用します:['US', 'CA', 'GB']
  • 地域には country_groups を使用します:['north_america', 'europe']
  • 地域でカバーできる場合、30 か国以上を個別に列挙しないでください
  • 地域を重複させないでください(例:US と New York City の両方を指定するとエラーになります)
  • 規制コンプライアンス項目を避けるため、Singapore を除外してください
興味・行動の検索
# Search for targeting interests
GET /search?type=adinterest&q=KEYWORD&limit=10000&locale=en_US&access_token=TOKEN

# Response:
# { "data": [{ "id": "6003107902433", "name": "SaaS", "audience_size": 123456, "path": ["..."], "topic": "..." }] }

# Alternative: interest suggestions
GET /search?type=adinterestsuggestion&interest_list=["SaaS"]&access_token=TOKEN

API では、Ads Manager のオートコンプリートに表示されない数千件の興味・関心を確認できます(オートコンプリートには約 25 件のみ表示されます)。

2026 年の注記: 2025 年 6 月以降、多くの詳細なターゲティングの興味・関心が統合されています。2025 年 10 月 8 日より前に作成された興味・関心を使用するキャンペーンは、配信が停止される場合があります。


広告クリエイティブのスキーマ

エンドポイント: POST /{account_id}/adcreatives

主なフィールド
フィールド型説明
name文字列クリエイティブ名
object_story_specJSON オブジェクトメインのクリエイティブコンテンツコンテナー
url_tags文字列URL パラメーター(作成時のみ設定可能。更新できません)
instagram_user_id文字列IG ビジネスアカウント ID(ここ AND object_story_spec の両方に設定)
threads_user_id文字列Threads プロフィール ID(クリエイティブレベルに設定。object_story_spec 内には設定しません)
asset_feed_specJSON オブジェクト配置のカスタマイズまたはダイナミッククリエイティブ用
object_story_spec - 2 つのパターン

パターン A:シンプルな広告(link_data)

'object_story_spec': json.dumps({
    'page_id': 'YOUR_PAGE_ID',
    'instagram_user_id': 'YOUR_IG_USER_ID',
    'link_data': {
        'image_hash': 'HASH',
        'link': 'https://landing-page.com',
        'message': 'Body text',
        'name': 'Headline',
        'description': 'Description',
        'call_to_action': {
            'type': 'SIGN_UP',
            'value': {'link': 'https://landing-page.com'}
        }
    }
})

パターン B:配置のカスタマイズ(asset_feed_spec)

'object_story_spec': json.dumps({
    'page_id': 'YOUR_PAGE_ID',
    'instagram_user_id': 'YOUR_IG_USER_ID'
    # NO link_data - all content goes in asset_feed_spec
})

重要: asset_feed_spec を使用する場合、object_story_spec は最小限(page_id と instagram_user_id のみ)にする必要があります。link_data を含めるとエラーになります。

link_data フィールド
フィールド型説明
link文字列遷移先 URL
message文字列広告本文
name文字列見出し
description文字列見出しの下に表示する説明
caption文字列リンクのキャプション/ドメイン表示
image_hash文字列アップロードした画像のハッシュ
picture文字列画像 URL(image_hash の代替)
call_to_actionオブジェクトCTA ボタンの設定
child_attachments配列カルーセルカード(2~10 件)
multi_share_optimizedboolMeta にパフォーマンスが最も高いカードを表示させる
multi_share_end_cardboolカルーセルにエンドカードを表示する
video_data フィールド
'video_data': {
    'video_id': 'VIDEO_ID',           # From video upload (required)
    'image_url': 'THUMBNAIL_URL',      # From /{video_id}/thumbnails (required)
    'title': 'Video title',
    'message': 'Body text',
    'link_description': 'Description',
    'call_to_action': {
        'type': 'LEARN_MORE',
        'value': {'link': 'https://landing.com'}
    }
}
カルーセルの child_attachments
'child_attachments': [
    {
        'link': 'https://product1.com',
        'name': 'Card 1 Headline',
        'description': 'Card 1 description',
        'image_hash': 'IMAGE_HASH_1',
        'call_to_action': {
            'type': 'SHOP_NOW',
            'value': {'link': 'https://product1.com'}
        }
    },
    {
        'link': 'https://product2.com',
        'name': 'Card 2 Headline',
        'description': 'Card 2 description',
        'image_hash': 'IMAGE_HASH_2'
    }
    # 2-10 cards total, each card needs image_hash + link at minimum
]
CTA タイプ(全種類)

B2B で最もよく使われるタイプ:

値説明
SIGN_UP登録
LEARN_MORE詳細を見る
DOWNLOADダウンロード
SUBSCRIBE購読する
APPLY_NOW今すぐ申し込む
GET_QUOTE見積もりを依頼する
CONTACT_USお問い合わせ
BOOK_NOW今すぐ予約する
REGISTER_NOW今すぐ登録する
SHOP_NOW今すぐ購入する
MESSAGE_PAGEメッセージを送信する

カテゴリ別の全種類:

コマース:BUY_NOW、BUY_TICKETS、ORDER_NOW、SELL_NOW、GET_OFFER、ADD_TO_CART、PURCHASE_GIFT_CARDS、PAY_TO_ACCESS

情報:SEE_MENU、GET_SHOWTIMES、GET_DIRECTIONS

アプリ:INSTALL_APP、INSTALL_MOBILE_APP、USE_APP、USE_MOBILE_APP、GET_MOBILE_APP、PLAY_GAME、UPDATE_APP

エンゲージメント:BOOK_TRAVEL、REQUEST_TIME、SEND_INVITES、REFER_FRIENDS、OPEN_MESSENGER_EXT、INSTAGRAM_MESSAGE、CALL、CALL_NOW、CALL_ME

メディア:WATCH_VIDEO、WATCH_MORE、LISTEN_MUSIC、LISTEN_NOW、GO_LIVE、RECORD_NOW

ソーシャル:LIKE_PAGE、VIEW_INSTAGRAM_PROFILE、INTERESTED、SAVE、SEND_TIP、DONATE、DONATE_NOW、EVENT_RSVP、VOTE_NOW

その他:OPEN_LINK、NO_BUTTON、BET_NOW、PRE_REGISTER、GET_EVENT_TICKETS、SEARCH_MORE

url_tags
  • クリエイティブの作成時にのみ設定できます。更新はできないため、クリエイティブを再作成する必要があります
  • 標準形式:utm_source=meta&utm_medium=paid-social&utm_campaign={{adset.name}}&utm_content={{ad.name}}
  • 動的パラメーター:{{campaign.name}}、{{campaign.id}}、{{adset.name}}、{{adset.id}}、{{ad.name}}、{{ad.id}}、{{placement}}、{{site_source_name}}

広告スキーマ

エンドポイント: POST /{account_id}/ads

フィールド型必須説明
namestringはい広告名
adset_idstringはい親広告セットの ID
creativeJSON objectはい{"creative_id": "CREATIVE_ID"}
statusenumはいPAUSED(ACTIVEには絶対に設定しないでください)
tracking_specsJSON arrayいいえ追加のコンバージョントラッキング

カスタムオーディエンスのスキーマ

エンドポイント: POST /{account_id}/customaudiences

顧客リストのアップロード
# Step 1: Create audience
'name': 'My Customer List',
'subtype': 'CUSTOM',
'customer_file_source': 'USER_PROVIDED_ONLY'

# Step 2: Add users via /{audience_id}/users
'schema': ['EMAIL', 'FN', 'LN'],   # or 'PHONE', 'MOBILE_ADVERTISER_ID', 'UID'
'data': [
    ['sha256_hashed_email', 'sha256_hashed_firstname', 'sha256_hashed_lastname'],
    # ... up to 10,000 per batch
]

すべての個人識別情報(PII)フィールドは、送信前に SHA-256 でハッシュ化する必要があります。正規化するには、小文字に変換して空白を削除し、電話番号は E.164 形式にします。

ウェブサイトカスタムオーディエンス
'name': 'Website Visitors - Last 30 Days',
'subtype': 'WEBSITE',
'rule': json.dumps({
    'inclusions': {
        'operator': 'or',
        'rules': [{'event_sources': [{'id': 'YOUR_PIXEL_ID', 'type': 'pixel'}], 'retention_seconds': 2592000}]
    }
})
類似オーディエンス
'name': '1% Lookalike - US - Customer List',
'subtype': 'LOOKALIKE',
'origin_audience_id': 'SOURCE_AUDIENCE_ID',   # min 100 members, recommended 1000-5000
'lookalike_spec': json.dumps({
    'ratio': 0.01,          # 1% similarity (0.01 to 0.20)
    'country': 'US',        # Single country per lookalike
    'starting_ratio': 0.00  # Optional: for tiered lookalikes (e.g., 1-2% tier)
})

段階的なパターン: まず 0~1%(ratio=0.01)、次に 1~2%(ratio=0.02、starting_ratio=0.01)、続いて 2~3%(ratio=0.03、starting_ratio=0.02)を作成します。

2026 年の注意事項: 新しい類似オーディエンスを作成するには、lookalike_specが必須です(2026 年 1 月 6 日以降)。


リーチの推定

エンドポイント: GET /{account_id}/reachestimate

params = {
    'access_token': token,
    'currency': 'USD',
    'optimize_for': 'OFFSITE_CONVERSIONS',
    'targeting_spec': json.dumps({
        'geo_locations': {'countries': ['US']},
        'age_min': 25,
        'age_max': 55
    })
}

推定オーディエンス規模を範囲で返し、1 日あたりの推定結果と入札額の推定値も返します。


インサイト/レポート

エンドポイント: GET /{object_id}/insights(アカウント、キャンペーン、広告セット、広告の各レベルで使用できます)

主なパラメーター
パラメーター型説明
fieldsstringカンマ区切りの指標
date_presetenum定義済みの日付範囲
time_rangeJSONカスタム日付範囲 {"since":"2026-01-01","until":"2026-01-31"}
levelenumcampaign、adset、ad(内訳レベル)
breakdownsstringカンマ区切りの配信内訳
action_breakdownsstringカンマ区切りのアクション内訳
time_incrementint or string1~90(日)、"monthly"、"all_days"
limitint1 ページあたりの結果数(デフォルトは 25)
filteringJSON arrayフィルター条件
日付プリセット

today、yesterday、last_3d、last_7d、last_14d、last_28d、last_30d、last_90d、this_week_mon_today、this_week_sun_today、last_week_mon_sun、last_week_sun_sat、this_month、last_month、this_quarter、last_quarter、this_year、last_year、maximum、lifetime

一般的な指標

spend、impressions、clicks、reach、frequency、ctr、cpc、cpm、actions、cost_per_action_type、action_values、conversions、cost_per_conversion、conversion_values、purchase_roas

配信の内訳
内訳説明
age年齢層
gender性別
country国
region地域/州
dmaDMA(米国のみ)
publisher_platformFacebook、Instagram など
platform_positionフィード、ストーリーズ、リールなど
device_platformモバイル、デスクトップ
impression_deviceデバイスの種類
frequency_valueフリークエンシーの分布
hourly_stats_aggregated_by_advertiser_time_zone時刻(広告主のタイムゾーン)
hourly_stats_aggregated_by_audience_time_zone時刻(オーディエンスのタイムゾーン)
product_id商品カタログ ID

ダイナミッククリエイティブの内訳: ad_format_asset、body_asset、call_to_action_asset、description_asset、image_asset、link_url_asset、title_asset、video_asset

重要: 1 つのリクエストで配信の内訳と action_breakdowns を組み合わせることはできません。それぞれ別にリクエストしてください。

アクションの内訳
内訳説明
action_typeアクションの種類(リード、購入など)
action_deviceアクションが発生したデバイス
action_destinationアクションの遷移先
action_type の値

よく使われる値:

action_type説明
leadプラットフォーム内のリードフォーム送信
link_clickリンクのクリック
landing_page_viewランディングページの表示
post_engagement投稿へのエンゲージメント
video_view動画の視聴
page_engagementページへのエンゲージメント
onsite_conversion.lead_groupedプラットフォーム内のリードイベント(グループ化)
offsite_conversion.fb_pixel_leadピクセルのリードイベント
offsite_conversion.fb_pixel_purchaseピクセルの購入イベント
offsite_conversion.fb_pixel_add_to_cartピクセルのカート追加
offsite_conversion.fb_pixel_initiate_checkoutピクセルのチェックアウト開始
offsite_conversion.fb_pixel_complete_registrationピクセルの登録
offsite_conversion.fb_pixel_view_contentピクセルのコンテンツ表示
offsite_conversion.fb_pixel_customピクセルのカスタムコンバージョン
omni_purchaseクロスチャネルの購入
omni_add_to_cartクロスチャネルのカート追加
アクションからコンバージョンを抽出する
actions = row.get('actions', [])
leads = sum(int(a['value']) for a in actions if a['action_type'] == 'lead')
pixel_leads = sum(int(a['value']) for a in actions if a['action_type'] == 'offsite_conversion.fb_pixel_lead')
非同期レポート(大規模データセット)

日付範囲が広い場合や、複雑な内訳を使用する場合:

# Request async report
params['async'] = True
r = requests.get(url, params=params)
report_id = r.json()['report_run_id']

# Poll for completion
status_url = f'https://graph.facebook.com/v22.0/{report_id}'
r = requests.get(status_url, params={'access_token': token})
# Check async_status: "Job Completed", "Job Running", etc.

# Download results
results_url = f'https://graph.facebook.com/v22.0/{report_id}/insights'
r = requests.get(results_url, params={'access_token': token})
データの保持期間(2026年)
  • ユニークカウントのフィールド:過去 13 か月分のデータ
  • フリークエンシーの内訳:6 か月分
  • 時間単位の内訳:13 か月分
  • 100 を超える指標が非推奨(unique_actions を含む)

アトリビューション設定(2026年)

attribution_spec
'attribution_spec': json.dumps([
    {'event_type': 'CLICK_THROUGH', 'window_days': 7},
    {'event_type': 'VIEW_THROUGH', 'window_days': 1}
])
利用可能な期間(2026年1月12日以降)
クリックスルービュースルー
1日1日
7日(デフォルト)7日 削除
28日 削除

デフォルト:7日間のクリック+1日間の表示(7d_click / 1d_view)。

影響: 7日間および28日間のビュースルー期間は、2026年1月12日に削除されました。これらの期間を使用した過去のレポートでは、データが返されなくなりました。


Conversions API(CAPI)- サーバーサイドイベント

エンドポイント: POST /{pixel_id}/events

イベント構造
{
    'data': [
        {
            'event_name': 'Lead',               # Standard event name
            'event_time': 1709568234,            # Unix timestamp
            'event_id': 'unique-event-12345',    # For deduplication with pixel
            'action_source': 'website',          # website, app, offline, etc.
            'event_source_url': 'https://site.com/page',
            'user_data': {
                'em': ['sha256_hashed_email'],   # MUST be hashed
                'ph': ['sha256_hashed_phone'],   # MUST be hashed, E.164 format
                'fn': ['sha256_hashed_first'],   # MUST be hashed, lowercase
                'ln': ['sha256_hashed_last'],    # MUST be hashed, lowercase
                'fbp': 'fb.1.123.456',           # NOT hashed (browser cookie)
                'fbc': 'fb.1.123.456',           # NOT hashed (click cookie)
                'external_id': ['sha256_hashed_id'],
                'client_ip_address': '1.2.3.4',
                'client_user_agent': 'Mozilla/5.0...'
            },
            'custom_data': {
                'value': 99.99,                  # Required for Purchase
                'currency': 'USD',               # Required for Purchase
                'content_ids': ['product123'],
                'content_type': 'product',
                'order_id': 'order-456'
            }
        }
    ],
    'access_token': token
}
標準イベント名

Purchase、Lead、ViewContent、AddToCart、InitiateCheckout、CompleteRegistration、AddPaymentInfo、AddToWishlist、Contact、FindLocation、Schedule、Search、StartTrial、SubmitApplication、Subscribe、CustomizeProduct、Donate

重複排除
  • Pixel と CAPI の両方で、同一の event_name と event_id を送信する必要があります
  • Meta は一致するイベントを自動的に重複排除します
  • 重複排除しない場合、コンバージョンが二重にカウントされます
  • サーバーで event_id を生成し、Pixel と CAPI の両方に渡してください
user_data のハッシュ化ルール
フィールドハッシュ化?備考
em(メールアドレス)SHA-256まず小文字に正規化します
ph(電話番号)SHA-256E.164 形式にし、スペースやハイフンを除きます
fn(名)SHA-256小文字にします
ln(姓)SHA-256小文字にします
external_idSHA-256顧客 ID
fbpいいえブラウザーの Cookie のため、生の値を送信します
fbcいいえクリック Cookie のため、生の値を送信します
client_ip_addressいいえ生の値を送信します
client_user_agentいいえ生の値を送信します

重要: fbp または fbc をハッシュ化すると、照合が完全に機能しなくなります。


画像のアップロード

エンドポイント: POST /{account_id}/adimages

要件
  • 形式:JPG または PNG
  • 最大サイズ:30MB
  • 推奨:最小 1080x1080px
  • アスペクト比:1:1(フィード)、4:5(フィード)、9:16(ストーリーズ/リール)
レスポンス
{
  "images": {
    "filename.jpg": {
      "hash": "a1b2c3d4e5f6...",
      "url": "https://scontent.xx.fbcdn.net/...",
      "height": 1080,
      "width": 1080
    }
  }
}

動画のアップロード

エンドポイント: POST /{account_id}/advideos

要件
  • 形式:MP4、MOV(H.264 コーデックを推奨)
  • 最大サイズ:4GB
  • フィード:1 秒~240 分、アスペクト比 4:5 または 1:1
  • ストーリーズ/リール:1~60 秒(15 秒を推奨)、アスペクト比 9:16
  • 広告の作成にはサムネイルが必須です。GET /{video_id}/thumbnails から取得します
チャンク分割アップロード(100MB を超えるファイルの場合)

3 つのフェーズがあります。

  1. upload_phase=start + file_size -> upload_session_id が返されます
  2. upload_phase=transfer + upload_session_id + start_offset + video_file_chunk(繰り返し)
  3. upload_phase=finish + upload_session_id + title -> 動画 ID が返されます

ページネーション

data = r.json()
results = data.get('data', [])

while 'paging' in data and 'next' in data['paging']:
    r = requests.get(data['paging']['next'])
    data = r.json()
    results.extend(data.get('data', []))

CRUD 操作

作成
r = requests.post(f'https://graph.facebook.com/v22.0/{parent_id}/{edge}', data={...})
# edge: campaigns, adsets, ads, adcreatives, adimages, advideos, customaudiences
読み取り
r = requests.get(f'https://graph.facebook.com/v22.0/{object_id}', params={
    'fields': 'field1,field2,...',
    'access_token': token
})
更新
r = requests.post(f'https://graph.facebook.com/v22.0/{object_id}', data={
    'name': 'New Name',
    'status': 'PAUSED',
    'access_token': token
})
削除
r = requests.delete(f'https://graph.facebook.com/v22.0/{object_id}', params={
    'access_token': token
})

主な注意点とルール

  1. 必ず Python を使い、curl は使わないでください - トークンに含まれる文字がシェルによる展開で壊れることがあります
  2. 必ず dotenv を介して .env からトークンを読み込んでください - コマンドにトークンを直接貼り付けないでください
  3. 予算の単位はセントです - 5000 = $50.00
  4. is_adset_budget_sharing_enabled は文字列です - "true" / "false" であり、ブール値ではありません
  5. URL、広告文、その他のクリエイティブコンテンツを更新する場合 - 変更内容を含む完全な仕様のインライン creative JSON を指定して、広告(クリエイティブではなく)に POST します。この方法で url_tags も変更できます。
  6. Instagram アカウントは 2 か所に指定します - トップレベルの instagram_user_id と object_story_spec の両方です
  7. asset_feed_spec を使う場合の最小限の object_story_spec - page_id と instagram_user_id のみを指定し、link_data は指定しません
  8. 配置ごとに異なる画像を使う場合は optimization_type: PLACEMENT、ダイナミッククリエイティブの場合は REGULAR を使います
  9. REGULAR では広告セットごとに広告は 1 つに制限されます - 複数の広告が必要な場合は PLACEMENT を使います
  10. 動画のサムネイルは必須です - アップロード後に /{video_id}/thumbnails から取得します
  11. 100MB を超えるファイルは単一アップロードに失敗します - 大きな動画には必ずチャンク分割アップロードを使います
  12. 規制遵守に関するフィールドを避けるため、ターゲティングからシンガポールを除外します
  13. カスタムオーディエンスの利用規約 - エラー 1359208 が発生した場合は、Ads Manager の UI で利用規約への再同意が必要です(API ではこれを検出できません)
  14. data: [] が空の場合は、その期間にアクティビティがなかったことを示し、エラーではありません
  15. 配信とアクションの内訳は、同じインサイトリクエストに組み合わせられません
  16. 広告文の書式 - 段落間には必ず \n\n、リスト内には \n を使います
  17. Threads プロフィールの ID - threads_user_id はクリエイティブレベルに設定します(object_story_spec の中には設定しません)。Threads プロフィール ID を確認するには、既存の正常なクリエイティブを調べます:GET /{creative_id}?fields=threads_user_id。Threads プロフィールは Facebook ページに直接紐づくのではなく、Instagram アカウントに紐づきます。

コメント