結論: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を使います。
- Slackワークスペースの「App管理」→「Incoming Webhooks」でアプリを作成
- 投稿先チャンネルを選択してWebhook URLを取得
- 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円)を間違えることがあります。テスト時に期待値と比較してください。
内部リンク:関連する活用事例
広告レポートの自動化に関連する他の事例も参考にしてください。
- 広告代理店のクリエイティブ制作をClaude Codeで効率化(ID 113) — クリエイティブ制作自動化の切り口(本記事はレポーティング自動化が対象)
- WebスクレイピングをClaude Codeで実装する実践ガイド — データ収集の応用パターン
- Claude CodeでSlack bot開発 完全実践ガイド — Slack連携のより詳しい実装パターン
導入ロードマップ(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を試す:Google Adsの管理画面から過去28日分CSVをダウンロードし、本記事のプロンプトをClaude Codeに実行してみる(所要30分)
- API申請を開始する:Google Ads Developer TokenとMeta Ads APIのアプリ申請を並行して開始する(審査に時間がかかるため早めに)
- 認証情報の管理方針を決める:.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で取得できます。
Claude Code導入をもっと深く学びたい方へ
Uravationでは、Claude Codeを使った業務自動化・開発支援の個別指導を提供しています。「試してみたいけど一人では難しい」という方は、まずはお気軽にご相談ください。