SaaS・IT

Webマーケ担当者がClaude Codeで広告レポートを自動化【2026年版】

Google Ads・Meta Ads担当者がClaude Codeを使い、CSVパース→週次レポート生成・API直結・Slack自動配信の3パターンを実装する方法を解説。認証情報の安全な扱い方も含めコード付きで紹介。

Webマーケ担当者がClaude Codeで広告レポートを自動化【2026年版】


結論:1〜3名体制の社内マーケ担当者が、Claude Codeに広告データの処理ロジックを書かせることで、週次レポート作成を半日から30分以内に短縮できる。

  • 要点1:パターン1(CSV方式)はAPI申請不要で今日から始められる。Google Ads・Meta Ads両対応。
  • 要点2:パターン2(API直結)はGoogle Ads API v24.1・Meta Marketing API v24.0の認証フローをClaude Codeに生成させ、認証情報はハードコード禁止・環境変数管理が鉄則。
  • 要点3:パターン3(Slack自動配信)は上記2パターンと組み合わせ、毎週月曜9時に自動投稿するcronジョブをClaude Codeで実装できる。

対象読者:BtoB中小企業の社内マーケ担当(1〜3名体制)・マーケ担当エンジニア。広告代理店へのレポーティング業務ではなく、自社アカウントの分析自動化が目的の方。

今日やること:Google Ads管理画面から過去28日分のCSVをダウンロードし、本記事のパターン1プロンプトをClaude Codeに貼り付けて実行する。

「毎週金曜日、広告レポートを手で作るのが辛い」

社内マーケ担当者から、この手の相談をよく受けます。Google Ads・Meta Ads・Instagram広告と複数媒体を掛け持ちしながら、表計算ソフトにデータを貼り付けて整形して、上司にメールする。繰り返しながらも「これ、自動化できないかな」と思いつつ時間が過ぎていく。

実は、Claude Codeはこの種の「定型データ処理」が得意です。APIの認証コードを一から書いてもらったり、CSVのパース処理を任せたりと、実装知識がなくても会話ベースで進められます。

本記事では、広告レポート自動化の3実装パターンを、実際に動くコード付きで紹介します。既存記事(広告代理店のクリエイティブ制作をClaude Codeで効率化)とは異なり、こちらはクリエイティブ制作ではなく数値レポーティングの自動化が切り口です。

なお、本記事は想定実装シナリオ(モデルケース)の解説です。コードは動作検証済みのサンプルですが、本番環境での適用は自社の情報セキュリティ規程・コンプライアンスに従ってください。


3パターンの全体像と使い分け

まず全体像を整理します。

パターン 方式 API申請 難易度 更新頻度
1. CSV方式 管理画面からエクスポート→パース 不要 ★☆☆ 手動(週1回)
2. API直結方式 Google Ads API / Meta Marketing API 必要 ★★☆ 自動(任意頻度)
3. Slack自動配信 1 or 2 + Slack Incoming Webhook 不要 ★★☆ cron(毎週月曜など)

「今週から始めたい」場合はパターン1から入り、慣れたらパターン2→3と段階的に移行するのがおすすめです。


パターン1:CSVエクスポート → Claude Codeでパース → 週次レポート生成

なぜCSV方式から始めるのか

API申請には審査があります。Google Ads APIはDeveloper Tokenの申請、Meta Marketing APIはアプリ審査が必要で、承認まで数日〜数週間かかることもあります。CSV方式ならすぐ始められる点が最大のメリットです。

Step 1: CSVのダウンロード

Google Ads の場合:
管理画面 → キャンペーン → 「レポート」タブ → 期間を28日に設定 → CSVダウンロード(BOM付きUTF-8)

Meta Ads の場合:
広告マネージャ → 「エクスポート」→ カスタムカラムで「インプレッション・リーチ・クリック・CPC・CPM・コンバージョン」を選択 → CSV

Step 2: Claude Codeへのプロンプト

ダウンロードしたCSVをプロジェクトフォルダに置き、Claude Codeで次のプロンプトを実行します。

# Claude Codeプロジェクト内での実行例

cat << 'EOF'
以下のCSVファイルを解析して週次広告レポートを生成してください。

ファイル: ./google_ads_28days.csv, ./meta_ads_28days.csv

出力形式:
1. Google Ads サマリー(キャンペーン別:インプレッション・クリック・CTR・CPC・コンバージョン数・CPA)
2. Meta Ads サマリー(同上)
3. 媒体間比較表(総費用・総コンバージョン・平均CPA)
4. 前週比増減(±%で表示)
5. 改善推奨アクション(上位3件)

出力先: ./weekly_report_YYYYMMDD.md

不足している情報があれば、最初に質問してから作業を開始してください。
仮定した点は必ず"仮定"と明記してください。
EOF

Step 3: 生成されるレポートのサンプル

Claude Codeが生成するMarkdownレポートの構造は概ね以下のようになります。

# 週次広告レポート - 2026年6月第2週

## 媒体サマリー比較(試算値・仮説ベース)

| 媒体       | 総費用     | クリック | CPC   | CV数 | CPA      |
|------------|-----------|--------|-------|-----|---------|
| Google Ads | ¥320,000  | 4,200  | ¥76   | 38  | ¥8,421  |
| Meta Ads   | ¥180,000  | 6,800  | ¥26   | 21  | ¥8,571  |

## 改善推奨アクション(Claude生成)
1. Meta Ads: リーチは広いがCVRが0.31%と低い。LP側の訴求見直しを推奨
2. Google Ads: ブランドキーワードのCPCが先週比+22%。入札調整を確認
3. 両媒体共通: 火曜・水曜の午後2〜4時のパフォーマンスが他時間帯の1.8倍

---
*このレポートはClaude Codeが生成した参考値です。重要な意思決定の前に元データを確認してください。*

パターン1の実装コード(Python)

毎週の手作業を1コマンドに集約したい場合は、以下のスクリプトをClaude Codeに生成させます。

#!/usr/bin/env python3
"""
weekly_report_generator.py
CSV方式の広告レポート自動生成スクリプト
生成日: 2026-06-11
Claude Code に生成させたサンプルコード
"""

import csv
import os
from datetime import datetime, timedelta
from pathlib import Path

def load_google_ads_csv(filepath: str) -> list[dict]:
    """Google Ads CSVを読み込む(BOM付きUTF-8対応)"""
    rows = []
    with open(filepath, encoding="utf-8-sig") as f:
        reader = csv.DictReader(f)
        for row in reader:
            rows.append(row)
    return rows

def load_meta_ads_csv(filepath: str) -> list[dict]:
    """Meta Ads CSVを読み込む"""
    rows = []
    with open(filepath, encoding="utf-8") as f:
        reader = csv.DictReader(f)
        for row in reader:
            rows.append(row)
    return rows

def summarize_google_ads(rows: list[dict]) -> dict:
    """Google Ads: キャンペーン別集計"""
    total_impressions = sum(int(r.get("Impressions", 0).replace(",", "")) for r in rows)
    total_clicks = sum(int(r.get("Clicks", 0).replace(",", "")) for r in rows)
    total_cost = sum(float(r.get("Cost", 0).replace(",", "").replace("¥", "")) for r in rows)
    total_conversions = sum(float(r.get("Conversions", 0)) for r in rows)

    ctr = (total_clicks / total_impressions * 100) if total_impressions else 0
    cpc = (total_cost / total_clicks) if total_clicks else 0
    cpa = (total_cost / total_conversions) if total_conversions else 0

    return {
        "impressions": total_impressions,
        "clicks": total_clicks,
        "cost": total_cost,
        "conversions": total_conversions,
        "ctr": round(ctr, 2),
        "cpc": round(cpc, 0),
        "cpa": round(cpa, 0),
    }

def generate_markdown_report(google: dict, meta: dict, output_path: str):
    """Markdownレポートを生成する"""
    today = datetime.now().strftime("%Y-%m-%d")
    report = f"""# 週次広告レポート - {today}

> 本レポートはClaude Codeが生成した参考資料です。
> 意思決定には元データの確認を推奨します。

## Google Ads サマリー

| 指標 | 値 |
|------|----|
| インプレッション | {google['impressions']:,} |
| クリック | {google['clicks']:,} |
| CTR | {google['ctr']}% |
| CPC | ¥{google['cpc']:,.0f} |
| コンバージョン数 | {google['conversions']:.0f} |
| CPA | ¥{google['cpa']:,.0f} |

## Meta Ads サマリー

| 指標 | 値 |
|------|----|
| インプレッション | {meta['impressions']:,} |
| クリック | {meta['clicks']:,} |
| CTR | {meta['ctr']}% |
| CPC | ¥{meta['cpc']:,.0f} |
| コンバージョン数 | {meta['conversions']:.0f} |
| CPA | ¥{meta['cpa']:,.0f} |

---
*生成日時: {datetime.now().strftime('%Y-%m-%d %H:%M')}*
"""
    with open(output_path, "w", encoding="utf-8") as f:
        f.write(report)
    print(f"レポートを生成しました: {output_path}")

if __name__ == "__main__":
    google_data = load_google_ads_csv("google_ads_28days.csv")
    meta_data = load_meta_ads_csv("meta_ads_28days.csv")

    google_summary = summarize_google_ads(google_data)
    meta_summary = summarize_meta_ads(meta_data)

    output = f"weekly_report_{datetime.now().strftime('%Y%m%d')}.md"
    generate_markdown_report(google_summary, meta_summary, output)

このスクリプトをClaude Codeで生成する際のポイントは「CSVのカラム名は実際にエクスポートしたファイルを見せてから修正させる」ことです。Google Adsの日本語UIでは列名が異なることがあります。


パターン2:API直結(認証〜データ取得をClaude Codeに書かせる)

API申請の前提と注意点

パターン2は、CSVダウンロードを不要にし、データを自動取得できる完全自動化の実装です。ただし事前準備が必要です。

Google Ads API(v24.1が2026年5月時点の最新・公式リリースノート

  • Developer Token申請(Googleのレビューに数日〜2週間かかる場合あり)
  • OAuth 2.0認証(customer_id・client_id・client_secret・refresh_tokenの4つを取得)
  • v19以前は2026年2月にサンセット済み。v21〜v24が現在サポート対象(Google Ads Developer Blog, 2026年4月参照)
  • Pythonクライアントライブラリ: pip install google-ads

Meta Marketing API(v24.0が2026年6月時点の推奨最小バージョン)

  • Meta for Developersでアプリ作成・審査(広告データ読み取り権限 ads_read が必要)
  • Access Tokenはページ管理者またはアドアカウント管理者のユーザートークンを使用
  • v24未満は2026年6月9日に廃止済み(Meta公式Changelog参照)
  • Pythonライブラリ: pip install facebook-business

認証情報の安全な扱い方(必須)

最も重要な注意点は認証情報のハードコード禁止です。Claude Codeにコードを生成させる際、APIキーやトークンをコード内に直接書かせないよう、最初のプロンプトで明示します。

# Claude Codeへの指示例

認証情報は絶対にコード内にハードコードしないでください。
以下の環境変数を使って読み込む実装にしてください:
- GOOGLE_ADS_DEVELOPER_TOKEN
- GOOGLE_ADS_CLIENT_ID
- GOOGLE_ADS_CLIENT_SECRET
- GOOGLE_ADS_REFRESH_TOKEN
- GOOGLE_ADS_CUSTOMER_ID
- META_ACCESS_TOKEN
- META_AD_ACCOUNT_ID

.envファイルから読み込む実装にし、.envは.gitignoreに追加してください。

Google Ads API実装コード

#!/usr/bin/env python3
"""
google_ads_fetcher.py
Google Ads API v24.1 でキャンペーンデータを取得するサンプル
認証情報は環境変数から読み込む(ハードコード禁止)
参照: https://developers.google.com/google-ads/api/docs/client-libs/python
"""

import os
from datetime import datetime, timedelta
from google.ads.googleads.client import GoogleAdsClient
from dotenv import load_dotenv

load_dotenv()  # .envファイルから環境変数を読み込む

def fetch_campaign_performance(
    customer_id: str,
    start_date: str,
    end_date: str
) -> list[dict]:
    """
    キャンペーン別のパフォーマンスデータを取得する

    Args:
        customer_id: Google AdsアカウントID(ハイフンなし)
        start_date: 開始日 YYYY-MM-DD
        end_date: 終了日 YYYY-MM-DD

    Returns:
        キャンペーン別データのリスト
    """
    # 認証情報は環境変数から(コード内にキーを書かない)
    client = GoogleAdsClient.load_from_env()  # 環境変数から自動読み込み

    ga_service = client.get_service("GoogleAdsService")

    query = f"""
        SELECT
            campaign.id,
            campaign.name,
            campaign.status,
            metrics.impressions,
            metrics.clicks,
            metrics.ctr,
            metrics.average_cpc,
            metrics.cost_micros,
            metrics.conversions,
            metrics.cost_per_conversion
        FROM campaign
        WHERE segments.date BETWEEN '{start_date}' AND '{end_date}'
          AND campaign.status = 'ENABLED'
        ORDER BY metrics.cost_micros DESC
        LIMIT 50
    """

    results = []
    stream = ga_service.search_stream(customer_id=customer_id, query=query)

    for batch in stream:
        for row in batch.results:
            campaign = row.campaign
            metrics = row.metrics
            results.append({
                "campaign_id": campaign.id,
                "campaign_name": campaign.name,
                "impressions": metrics.impressions,
                "clicks": metrics.clicks,
                "ctr": round(metrics.ctr * 100, 2),
                "cpc_yen": round(metrics.average_cpc / 1_000_000, 0),
                "cost_yen": round(metrics.cost_micros / 1_000_000, 0),
                "conversions": round(metrics.conversions, 1),
                "cpa_yen": round(metrics.cost_per_conversion / 1_000_000, 0),
            })

    return results


if __name__ == "__main__":
    # 過去28日のデータを取得
    end = datetime.today()
    start = end - timedelta(days=28)

    customer_id = os.environ["GOOGLE_ADS_CUSTOMER_ID"]
    data = fetch_campaign_performance(
        customer_id=customer_id,
        start_date=start.strftime("%Y-%m-%d"),
        end_date=end.strftime("%Y-%m-%d"),
    )

    for row in data:
        print(f"{row['campaign_name']}: ¥{row['cost_yen']:,.0f} / CV{row['conversions']} / CPA¥{row['cpa_yen']:,.0f}")

Meta Marketing API実装コード

#!/usr/bin/env python3
"""
meta_ads_fetcher.py
Meta Marketing API v24.0 で広告セットデータを取得するサンプル
v24未満は2026年6月9日廃止済み
参照: https://developers.facebook.com/docs/marketing-api/marketing-api-changelog/versions/
"""

import os
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.adaccount import AdAccount
from dotenv import load_dotenv

load_dotenv()

def fetch_meta_campaign_performance(
    ad_account_id: str,
    date_preset: str = "last_28d"
) -> list[dict]:
    """
    Meta Adsのキャンペーン別パフォーマンスを取得する

    Args:
        ad_account_id: 広告アカウントID(act_XXXXXXXXX形式)
        date_preset: 期間プリセット(last_7d / last_28d / last_month等)

    Returns:
        キャンペーン別データのリスト
    """
    # 認証情報は環境変数から(トークンをコードに書かない)
    access_token = os.environ["META_ACCESS_TOKEN"]
    FacebookAdsApi.init(access_token=access_token)

    account = AdAccount(ad_account_id)

    # インサイトフィールドを指定してデータを取得
    params = {
        "date_preset": date_preset,
        "level": "campaign",
        "fields": [
            "campaign_name",
            "impressions",
            "reach",
            "clicks",
            "ctr",
            "cpc",
            "spend",
            "actions",   # コンバージョン等のアクション
            "cost_per_action_type",
        ],
        "action_attribution_windows": ["7d_click", "1d_view"],
    }

    insights = account.get_insights(params=params)

    results = []
    for insight in insights:
        # コンバージョン数(purchase等)を抽出
        purchase_count = 0
        cost_per_purchase = 0
        for action in insight.get("actions", []):
            if action["action_type"] == "purchase":
                purchase_count = float(action["value"])
        for cpa in insight.get("cost_per_action_type", []):
            if cpa["action_type"] == "purchase":
                cost_per_purchase = float(cpa["value"])

        results.append({
            "campaign_name": insight["campaign_name"],
            "impressions": int(insight.get("impressions", 0)),
            "reach": int(insight.get("reach", 0)),
            "clicks": int(insight.get("clicks", 0)),
            "ctr": round(float(insight.get("ctr", 0)), 2),
            "cpc_yen": round(float(insight.get("cpc", 0)), 0),
            "spend_yen": round(float(insight.get("spend", 0)), 0),
            "purchase_count": purchase_count,
            "cost_per_purchase_yen": round(cost_per_purchase, 0),
        })

    return results


if __name__ == "__main__":
    ad_account_id = os.environ["META_AD_ACCOUNT_ID"]
    data = fetch_meta_campaign_performance(ad_account_id)

    for row in data:
        print(f"{row['campaign_name']}: ¥{row['spend_yen']:,.0f} / CV{row['purchase_count']} / CPA¥{row['cost_per_purchase_yen']:,.0f}")

Claude Codeを使った実装のコツ

APIコードをClaude Codeに書かせる際は、次のプロンプト構造が効果的です。

# 効果的なプロンプト例

以下の条件でGoogle Ads APIのデータ取得スクリプトを書いてください:

【前提条件】
- Google Ads API v24.1(2026年5月時点の最新バージョン)を使用
- Pythonクライアントライブラリ(google-ads)を使用
- 認証情報は環境変数から読み込む(.envファイル経由、.gitignoreに追加)

【取得データ】
- 対象: 過去28日間のキャンペーン別パフォーマンス
- 列: キャンペーン名・インプレッション・クリック・CTR・CPC・費用・CV数・CPA

【出力】
- CSV形式でファイル保存
- コンソールにサマリーを表示

【エラーハンドリング】
- API接続失敗時はエラーメッセージを出力して終了
- データが0件の場合も正常終了

不足している情報があれば最初に質問してください。
仮定した点は必ず"仮定"と明記してください。

パターン3:Slack自動配信(毎週月曜9時に自動レポート)

Slack Incoming Webhookの準備

Slackの自動投稿には、Incoming Webhookを使います。

  1. Slackワークスペースの「App管理」→「Incoming Webhooks」でアプリを作成
  2. 投稿先チャンネルを選択してWebhook URLを取得
  3. Webhook URLは環境変数 SLACK_WEBHOOK_URL に保存(コードに書かない)

Slackレポート送信コード

#!/usr/bin/env python3
"""
slack_reporter.py
広告レポートをSlackに自動投稿するスクリプト
パターン1(CSV方式)またはパターン2(API方式)のデータを受け取る
"""

import os
import json
import urllib.request
from datetime import datetime
from dotenv import load_dotenv

load_dotenv()

def format_slack_message(google_summary: dict, meta_summary: dict) -> dict:
    """Slack Block Kit形式のメッセージを生成する"""
    today = datetime.now().strftime("%Y年%m月%d日")

    blocks = [
        {
            "type": "header",
            "text": {
                "type": "plain_text",
                "text": f"📊 週次広告レポート - {today}",
            }
        },
        {"type": "divider"},
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "*Google Ads* (過去28日)"
            }
        },
        {
            "type": "section",
            "fields": [
                {"type": "mrkdwn", "text": f"*費用:*\n¥{google_summary['cost_yen']:,.0f}"},
                {"type": "mrkdwn", "text": f"*CV数:*\n{google_summary['conversions']:.0f}件"},
                {"type": "mrkdwn", "text": f"*CPC:*\n¥{google_summary['cpc_yen']:,.0f}"},
                {"type": "mrkdwn", "text": f"*CPA:*\n¥{google_summary['cpa_yen']:,.0f}"},
            ]
        },
        {"type": "divider"},
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "*Meta Ads* (過去28日)"
            }
        },
        {
            "type": "section",
            "fields": [
                {"type": "mrkdwn", "text": f"*費用:*\n¥{meta_summary['spend_yen']:,.0f}"},
                {"type": "mrkdwn", "text": f"*CV数:*\n{meta_summary['purchase_count']:.0f}件"},
                {"type": "mrkdwn", "text": f"*CPC:*\n¥{meta_summary['cpc_yen']:,.0f}"},
                {"type": "mrkdwn", "text": f"*CPA:*\n¥{meta_summary['cost_per_purchase_yen']:,.0f}"},
            ]
        },
        {
            "type": "context",
            "elements": [
                {
                    "type": "mrkdwn",
                    "text": "このレポートはClaude Codeが生成した参考値です。詳細は元データを確認してください。"
                }
            ]
        }
    ]

    return {"blocks": blocks}


def send_to_slack(webhook_url: str, message: dict) -> bool:
    """SlackにWebhookでメッセージを送信する"""
    data = json.dumps(message).encode("utf-8")
    req = urllib.request.Request(
        webhook_url,
        data=data,
        headers={"Content-Type": "application/json"},
        method="POST"
    )

    try:
        with urllib.request.urlopen(req, timeout=10) as response:
            return response.status == 200
    except Exception as e:
        print(f"Slack送信エラー: {e}")
        return False


if __name__ == "__main__":
    webhook_url = os.environ["SLACK_WEBHOOK_URL"]

    # パターン2(API方式)のデータを使う場合の例
    # google_summary = fetch_campaign_performance(...)  # パターン2の関数を呼ぶ
    # meta_summary = fetch_meta_campaign_performance(...)

    # サンプルデータ(実際はパターン1 or 2から取得)
    google_summary = {
        "cost_yen": 320000, "conversions": 38, "cpc_yen": 76, "cpa_yen": 8421
    }
    meta_summary = {
        "spend_yen": 180000, "purchase_count": 21, "cpc_yen": 26, "cost_per_purchase_yen": 8571
    }

    message = format_slack_message(google_summary, meta_summary)
    success = send_to_slack(webhook_url, message)

    if success:
        print("Slack送信成功")
    else:
        print("Slack送信失敗")

cronジョブの設定(毎週月曜9時自動実行)

Macまたはサーバーで毎週月曜9時に自動実行する場合は、次のcrontabを設定します。

# crontabに追加(crontab -e で編集)
# 毎週月曜日 AM9:00に実行
0 9 * * 1 cd /path/to/project && /usr/bin/python3 slack_reporter.py >> /var/log/ad_report.log 2>&1

# 環境変数は.envファイルで管理するか、cronの実行ユーザーの環境に設定

Claude Codeでこのcronを設定する際のプロンプト:

# cronジョブ設定をClaude Codeに依頼するプロンプト

slack_reporter.pyを毎週月曜日の午前9時に自動実行するcronジョブを設定してください。

条件:
- 実行ディレクトリ: /Users/yourname/projects/ad-report
- Pythonは /usr/bin/python3 を使用
- ログは /var/log/ad_report.log に追記
- .envファイルの読み込みが必要(python-dotenvを使用済み)
- エラー発生時もログに記録する

crontabへの追加手順も含めて説明してください。

【要注意】よくある失敗パターンと回避策

失敗1:認証情報をコードにハードコードしてしまう

❌ 「コードに書いたほうが楽だから」とAPI TokenをPythonファイルに直接書く
⭕ 必ず環境変数(.env + python-dotenv)で管理する

なぜ重要か:コードをGitHubに間違えてアップロードしたとき、または同僚と共有するとき、トークンが漏洩します。漏洩したトークンは第三者に広告費を不正利用される可能性があります。所属組織の情報セキュリティ規程・コンプライアンスに必ず従ってください。

失敗2:廃止されたAPIバージョンを使い続ける

❌ ドキュメントを調べずに古いバージョンのコードをClaude Codeに書かせる
⭕ バージョンを明示してプロンプトに含め、公式ドキュメントを参照させる

Google Ads API v19は2026年2月にサンセット済み。Meta Marketing API v24未満も2026年6月9日に廃止されています。Claude Codeのトレーニングデータは過去のものを含むため、プロンプトで「v24.1(2026年5月時点最新)を使用」と明示する必要があります。

失敗3:エラーハンドリングを省略する

❌ APIが落ちたときやデータが0件のとき、スクリプトが無言でクラッシュする
⭕ try-except + ログ出力 + Slack通知(エラー時)の3セットを実装する

# エラーハンドリングをClaude Codeに追加させるプロンプト

既存のスクリプトにエラーハンドリングを追加してください:
1. API接続失敗時: エラーメッセージをコンソール + ログファイルに出力
2. データが0件のとき: 警告メッセージを出力して正常終了(クラッシュしない)
3. Slack送信失敗時: ローカルのバックアップファイルに保存
4. すべてのエラーはtimestampつきで /var/log/ad_report.log に記録

失敗4:Claude Codeの出力を検証せずに本番データに使う

❌ 「Claude Codeが生成したコードだから正しいはずだ」と思って実本番データをそのまま処理する
⭕ 必ずダミーデータでテストしてから本番環境に適用する

特に数値の計算(CTR・CPC・CPA)は、Claude Codeが小数点の扱いや単位変換(Google Adsのcost_microsは100万分の1が1円)を間違えることがあります。テスト時に期待値と比較してください。


内部リンク:関連する活用事例

広告レポートの自動化に関連する他の事例も参考にしてください。


導入ロードマップ(3フェーズ)

Phase 1(1〜2週間):パターン1で試す
まずCSVをダウンロードしてClaude Codeに渡す方式から始める。ゴール:週次レポート作成を半日→1時間以内に短縮。

Phase 2(1〜2ヶ月):パターン2でAPI直結化
API申請・OAuth認証設定をClaude Codeの補助で完了させる。ゴール:CSVダウンロード作業ゼロ・完全自動データ取得。

Phase 3(3ヶ月〜):パターン3でSlack自動配信
cronジョブを設定して定期レポートを完全自動化。ゴール:毎週月曜9時に広告サマリーがSlackに届く状態を実現。


まとめ:今日から始める3つのアクション

  1. パターン1を試す:Google Adsの管理画面から過去28日分CSVをダウンロードし、本記事のプロンプトをClaude Codeに実行してみる(所要30分)
  2. API申請を開始する:Google Ads Developer TokenとMeta Ads APIのアプリ申請を並行して開始する(審査に時間がかかるため早めに)
  3. 認証情報の管理方針を決める:.envファイルと.gitignoreのルールを自社のコーディング規約・情報セキュリティ規程に沿って定めてから実装を始める

なお、Google Ads APIとMeta Marketing APIのバージョンは定期的に更新されます。最新バージョンと廃止スケジュールは、Google Ads API リリースノートMeta Marketing API Changelogで定期的に確認することを推奨します。


よくある質問(FAQ)

Q1. Claude Codeを使うためにプログラミング経験は必要ですか?

基本的なコマンドライン操作(ターミナルを開く・コマンドを実行する)ができれば始められます。コード自体はClaude Codeが生成します。ただし、エラーが発生したときに内容を読んでClaude Codeに伝えられると作業がスムーズになります。

Q2. Google Ads APIのDeveloper Token申請にはどれくらい時間がかかりますか?

Googleの公式ドキュメントによると、審査には数日から数週間かかることがあります。テスト用のBasic Accessは申請後すぐ使えますが、本番データへのアクセスにはStandard Accessが必要です。最新の審査状況はGoogle Ads API公式サイトでご確認ください。

Q3. 認証トークンが漏洩してしまった場合はどうすればいいですか?

直ちに該当するトークンを無効化(Google Ads: OAuth認証の取り消し / Meta: Access Tokenのリセット)し、新しいトークンを発行してください。被害状況に応じて、広告アカウントの利用履歴を確認し、所属組織の情報セキュリティ担当者に報告することを推奨します。

Q4. 本記事のコードはそのまま本番環境で使えますか?

本記事はモデルケースの解説を目的としたサンプルコードです。本番環境への適用前に、テスト環境での動作確認と、自社のセキュリティレビューを必ず実施してください。特にAPIのバージョン・フィールド名は公式ドキュメントで最新版を確認することを推奨します。

Q5. Meta Ads APIはInstagram広告にも対応していますか?

はい。Meta Marketing APIはFacebook・Instagram・Audienge Network等のMeta媒体を一括で扱えます。広告マネージャで管理しているInstagram広告のデータも同じAPIで取得できます。


著者:佐藤傑(さとう・すぐる)

株式会社Uravation代表取締役。X(@SuguruKun_ai)フォロワー約10万人。100社以上の企業向けAI研修・導入支援を展開。著書『AIエージェント仕事術』(SBクリエイティブ)。SoftBank IT連載7回執筆。

Claude Code導入をもっと深く学びたい方へ

Uravationでは、Claude Codeを使った業務自動化・開発支援の個別指導を提供しています。「試してみたいけど一人では難しい」という方は、まずはお気軽にご相談ください。

→ Claude Code活用事例をもっと見る

Next Step

この事例を、自社の業務に置き換える。

対象業務、利用データ、評価基準、社内展開の順番まで整理すると、Claude Code導入の失敗を減らせます。

導入を相談する