- OpenClawのcronジョブとスキルを組み合わせてGA4・APIデータを定期自動取得できる
- 取得したデータをAIが分析・要約し、Slack・メールへ自動レポート配信できる
- SES案件のKPI管理やマーケティング効果測定を手作業ゼロで運用できる
「毎週のレポート作成に丸一日かかっている」「GA4を見てもどの数字が重要かわからない」——SES事業やWeb運営でデータ分析に悩むエンジニア・経営者は多いはずです。
OpenClawを使えば、データ収集からレポート生成・配信までを完全に自動化できます。本記事では、GA4を中心としたデータ収集パイプラインの構築方法と、AIによる分析・レポーティングの実践テクニックを解説します。
データ分析自動化の全体アーキテクチャ
OpenClawでデータ分析を自動化するアーキテクチャは、大きく3つのレイヤーで構成されます。
3レイヤー構成
┌─────────────────────────────────────────────┐
│ ① データ収集レイヤー │
│ GA4 API / Search Console / 外部API │
│ → cronジョブで定期実行 │
└───────────────┬─────────────────────────────┘
│ JSON / CSV
┌───────────────▼─────────────────────────────┐
│ ② 分析・変換レイヤー │
│ AIエージェントがデータを解析・要約 │
│ → トレンド検出・異常値アラート │
└───────────────┬─────────────────────────────┘
│ 構造化レポート
┌───────────────▼─────────────────────────────┐
│ ③ 配信レイヤー │
│ Slack通知 / メール / スプレッドシート更新 │
│ → 意思決定者へ直接デリバリー │
└─────────────────────────────────────────────┘
このアーキテクチャにより、人手を介さずにデータが収集→分析→配信されるパイプラインを構築できます。

GA4データ自動収集の実装
Google Analytics 4(GA4)のデータをOpenClawから自動取得するには、GA4 Data APIを使用します。
前提条件
- Google Cloud プロジェクトでGA4 Data APIを有効化
- サービスアカウントを作成し、GA4プロパティへの閲覧権限を付与
- サービスアカウントのJSON鍵をOpenClawのワークスペースに配置
スキルの作成
GA4データ取得用のカスタムスキルを作成します。
# skills/ga4-report/SKILL.md
---
name: ga4-report
description: GA4 Data APIからデータを取得し、日次・週次レポートを生成する
---
## 使い方
1. `scripts/fetch_ga4.py` でGA4 APIからデータ取得
2. AIエージェントが結果を分析・要約
3. Slackまたはメールでレポート配信
データ取得スクリプト
# skills/ga4-report/scripts/fetch_ga4.py
import json
import sys
from datetime import datetime, timedelta
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import (
RunReportRequest, DateRange, Metric, Dimension
)
PROPERTY_ID = sys.argv[1] if len(sys.argv) > 1 else "YOUR_PROPERTY_ID"
def fetch_daily_report(property_id: str, days_back: int = 1):
"""日次レポートを取得"""
client = BetaAnalyticsDataClient()
end_date = datetime.now() - timedelta(days=1)
start_date = end_date - timedelta(days=days_back - 1)
request = RunReportRequest(
property=f"properties/{property_id}",
date_ranges=[DateRange(
start_date=start_date.strftime("%Y-%m-%d"),
end_date=end_date.strftime("%Y-%m-%d")
)],
metrics=[
Metric(name="activeUsers"),
Metric(name="sessions"),
Metric(name="screenPageViews"),
Metric(name="averageSessionDuration"),
Metric(name="bounceRate"),
],
dimensions=[
Dimension(name="date"),
],
)
response = client.run_report(request)
results = []
for row in response.rows:
results.append({
"date": row.dimension_values[0].value,
"users": int(row.metric_values[0].value),
"sessions": int(row.metric_values[1].value),
"pageviews": int(row.metric_values[2].value),
"avg_duration": float(row.metric_values[3].value),
"bounce_rate": float(row.metric_values[4].value),
})
return results
if __name__ == "__main__":
data = fetch_daily_report(PROPERTY_ID)
print(json.dumps(data, indent=2, ensure_ascii=False))
cronジョブ設定
openclaw.json にcronジョブを追加して日次実行します。
{
"agents": {
"analytics": {
"cron": [
{
"name": "ga4-daily-report",
"schedule": "0 8 * * *",
"prompt": "GA4の日次レポートを生成してSlackに投稿してください",
"model": "anthropic/claude-sonnet-4-20250514",
"channel": "slack:#analytics"
}
]
}
}
}
この設定により、毎朝8時にGA4データを取得し、AI分析済みのレポートがSlackに自動投稿されます。
流入元分析の自動化
GA4のチャネルグループ別・参照元メディア別の流入データを自動分析する手法を紹介します。
チャネルグループ別レポート
def fetch_channel_report(property_id: str):
"""チャネルグループ別の流入レポート"""
client = BetaAnalyticsDataClient()
request = RunReportRequest(
property=f"properties/{property_id}",
date_ranges=[DateRange(
start_date="yesterday",
end_date="yesterday"
)],
metrics=[
Metric(name="activeUsers"),
Metric(name="sessions"),
Metric(name="engagementRate"),
],
dimensions=[
Dimension(name="sessionDefaultChannelGroup"),
],
order_bys=[{
"metric": {"metric_name": "sessions"},
"desc": True
}],
)
response = client.run_report(request)
return parse_response(response)
AIによる分析プロンプト
OpenClawエージェントにデータを渡す際は、分析の観点を明示的に指示します。
以下のGA4日次データを分析し、レポートを生成してください。
## 分析観点
1. 前日比・前週同曜日比での変動
2. 異常値(±20%以上の変動)の検出と要因推測
3. チャネル別のパフォーマンス評価
4. 改善アクションの提案(具体的に3つ)
## データ
{fetched_data}
この方法により、単なる数値の羅列ではなく、アクショナブルなインサイト付きのレポートが自動生成されます。
APIデータ連携パターン
GA4以外にも、さまざまな外部APIと連携してデータ収集を自動化できます。
パターン1: Search Console連携
Google Search Consoleのデータを取得し、SEOパフォーマンスを自動監視する例です。
# skills/seo-report/scripts/fetch_search_console.py
from googleapiclient.discovery import build
from google.oauth2 import service_account
def fetch_search_performance(site_url: str, days: int = 7):
"""Search Consoleから検索パフォーマンスを取得"""
credentials = service_account.Credentials.from_service_account_file(
'credentials.json',
scopes=['https://www.googleapis.com/auth/webmasters.readonly']
)
service = build('searchconsole', 'v1', credentials=credentials)
response = service.searchanalytics().query(
siteUrl=site_url,
body={
'startDate': start_date,
'endDate': end_date,
'dimensions': ['query', 'page'],
'rowLimit': 50
}
).execute()
return response.get('rows', [])
パターン2: SES案件データ連携
SES案件管理システムのAPIからデータを取得し、KPIを自動集計するパターンです。
import requests
def fetch_ses_kpi(api_base: str, api_key: str):
"""SES案件のKPIデータを取得"""
headers = {"Authorization": f"Bearer {api_key}"}
# 稼働率
utilization = requests.get(
f"{api_base}/api/v1/metrics/utilization",
headers=headers
).json()
# 新規案件数
new_projects = requests.get(
f"{api_base}/api/v1/metrics/new-projects",
headers=headers
).json()
return {
"utilization_rate": utilization["rate"],
"new_projects_count": new_projects["count"],
"avg_unit_price": utilization.get("avg_price", 0),
}
パターン3: 競合サイト監視
ブラウザ自動化機能(Ep.7: ブラウザ自動化参照)を組み合わせて、競合サイトの価格や求人情報を定期的にスクレイピングする例です。
{
"name": "competitor-watch",
"schedule": "0 9 * * 1",
"prompt": "競合SESサイト3社の掲載案件数と平均単価をブラウザ自動化で取得し、先週比と合わせてレポートしてください"
}
レポート自動生成テンプレート
効果的な自動レポートを作成するためのテンプレートパターンを紹介します。
日次レポートテンプレート
## 📊 GA4 日次レポート({date})
### 基本指標
| 指標 | 今日 | 前日比 | 前週同曜日比 |
|------|------|--------|------------|
| ユーザー数 | {users} | {users_delta}% | {users_wow}% |
| セッション | {sessions} | {sessions_delta}% | {sessions_wow}% |
| PV | {pageviews} | {pv_delta}% | {pv_wow}% |
### 🔍 トレンド分析
{ai_analysis}
### ⚠️ アラート
{anomalies}
### 💡 推奨アクション
{recommendations}
週次サマリーテンプレート
週次レポートでは、日次データの集約に加えて中長期トレンドを分析します。
## 📈 週次マーケティングサマリー({week_start}〜{week_end})
### ハイライト
- 最もPVが伸びた記事: {top_article}
- 最も成長したチャネル: {top_channel}
- コンバージョン率: {cvr}%(前週比 {cvr_delta}%)
### チャネル別パフォーマンス
{channel_breakdown}
### コンテンツパフォーマンスTOP10
{content_ranking}
### 来週のアクション提案
{ai_weekly_recommendations}
データの蓄積と時系列分析
単発のレポートだけでなく、データを蓄積して長期トレンドを分析する仕組みも重要です。
メモリファイルによるデータ蓄積
OpenClawのメモリ機能(Ep.9: ワークスペース設計参照)を活用して、日次データをMarkdownファイルに蓄積します。
# memory/ga4-daily-log.md
## 2026-03-09
- Users: 1,250 | Sessions: 1,890 | PV: 4,320
- Top channel: Organic Search (52%)
- Top article: /articles/openclaw-ai-assistant-guide/ (320 PV)
## 2026-03-08
- Users: 1,180 | Sessions: 1,750 | PV: 3,980
- Top channel: Organic Search (48%)
- Top article: /articles/ses-unit-price-guide/ (290 PV)
月次トレンド分析
蓄積データを月次で集計し、トレンドを可視化します。
def analyze_monthly_trend(log_path: str):
"""メモリファイルから月次トレンドを算出"""
import re
from collections import defaultdict
monthly_data = defaultdict(lambda: {"users": 0, "sessions": 0, "pv": 0, "days": 0})
with open(log_path, "r") as f:
current_date = None
for line in f:
date_match = re.match(r"^## (\d{4}-\d{2}-\d{2})", line)
if date_match:
current_date = date_match.group(1)
month_key = current_date[:7]
metrics_match = re.search(
r"Users:\s*([\d,]+)\s*\|\s*Sessions:\s*([\d,]+)\s*\|\s*PV:\s*([\d,]+)",
line
)
if metrics_match and current_date:
month_key = current_date[:7]
monthly_data[month_key]["users"] += int(metrics_match.group(1).replace(",", ""))
monthly_data[month_key]["sessions"] += int(metrics_match.group(2).replace(",", ""))
monthly_data[month_key]["pv"] += int(metrics_match.group(3).replace(",", ""))
monthly_data[month_key]["days"] += 1
return dict(monthly_data)
異常値検出とアラート
データ分析の重要な側面として、異常値の自動検出とアラート通知があります。
統計的異常検出
過去30日間の平均と標準偏差を使い、2σ以上の変動を異常値として検出します。
import statistics
def detect_anomalies(daily_values: list[float], threshold_sigma: float = 2.0):
"""統計的異常値を検出"""
if len(daily_values) < 7:
return []
mean = statistics.mean(daily_values[:-1])
stdev = statistics.stdev(daily_values[:-1])
latest = daily_values[-1]
z_score = (latest - mean) / stdev if stdev > 0 else 0
if abs(z_score) >= threshold_sigma:
direction = "急増" if z_score > 0 else "急減"
return [{
"value": latest,
"mean": mean,
"z_score": round(z_score, 2),
"direction": direction,
"severity": "critical" if abs(z_score) >= 3 else "warning"
}]
return []
アラート設定
異常値検出をcronジョブと組み合わせ、即座にSlack通知する仕組みです。
{
"name": "anomaly-alert",
"schedule": "30 8 * * *",
"prompt": "GA4データの異常値を検出し、重大な変動があればSlackの#alertsチャネルに通知してください。軽微な変動は日次レポートに含めるだけで構いません。"
}
モニタリングの基盤設計についてはEp.11: モニタリングとアラート通知も参照してください。
Google スプレッドシート連携
データの蓄積先としてGoogleスプレッドシートを使えば、非エンジニアのチームメンバーとも簡単にデータを共有できます。
gog CLIによるシート操作
OpenClawの gog スキルを使えば、スプレッドシートへの書き込みをコマンドラインで実行できます。
# シートにデータ行を追加
gog sheets append --spreadsheet-id "SHEET_ID" \
--range "日次データ!A:G" \
--values "2026-03-09,1250,1890,4320,3.2,52%,/articles/openclaw-ai-assistant-guide/"
# シートからデータを読み取り
gog sheets get --spreadsheet-id "SHEET_ID" \
--range "日次データ!A1:G30"
自動更新ワークフロー
GA4 API → データ取得 → AI分析 → スプレッドシート書き込み → Slack通知
このフローをcronジョブで毎日実行することで、スプレッドシートが常に最新のデータで自動更新されます。
SES現場での活用事例
事例1: 案件マッチング効率のKPI自動追跡
SES事業において、案件マッチングの効率をKPIとして追跡し、週次で自動レポートを生成する例です。
# レポート例
## 📊 SES案件マッチング週次レポート(3/3〜3/9)
### マッチング指標
- 新規案件登録数: 45件(前週比 +12%)
- エンジニアマッチング率: 68%(目標: 70%)
- 平均マッチング所要日数: 3.2日(前週: 3.8日 ✅改善)
### スキル別需要トレンド
1. Java/Spring Boot: 15件(前週比 +3件)
2. React/TypeScript: 12件(前週比 ±0件)
3. AWS/インフラ: 8件(前週比 +2件)
### AI分析コメント
マッチング所要日数が改善傾向にあります。Java案件の増加が
顕著で、来週以降もこの傾向が続く場合、Java経験者の
プール拡大を検討すべきです。
事例2: マーケティングROI自動計算
広告費と成果指標を自動集計し、チャネル別ROIを算出する例です。
def calculate_marketing_roi(ad_spend: dict, conversions: dict):
"""チャネル別マーケティングROIを算出"""
roi_data = {}
for channel, spend in ad_spend.items():
conv = conversions.get(channel, 0)
cpa = spend / conv if conv > 0 else float('inf')
roi_data[channel] = {
"spend": spend,
"conversions": conv,
"cpa": round(cpa),
"roi": round((conv * 50000 - spend) / spend * 100, 1)
# 1コンバージョンあたりLTV 5万円と仮定
}
return roi_data
事例3: ブログコンテンツのパフォーマンス分析
ブログ記事ごとのパフォーマンスを自動で分析し、コンテンツ戦略の意思決定を支援します。
## 🔍 コンテンツパフォーマンスTOP10(3/3〜3/9)
| # | 記事 | PV | 平均滞在 | 流入元 |
|---|------|------|---------|--------|
| 1 | OpenClaw入門 | 1,250 | 4:32 | Organic |
| 2 | SES単価相場 | 980 | 3:15 | Organic |
| 3 | フリーランス比較 | 720 | 2:48 | Social |
### AI分析
- OpenClaw関連記事の検索流入が前週比+35%増加
- 「SES 単価」関連キーワードが安定して高いトラフィック
- ソーシャル経由のエンゲージメントが改善傾向
セキュリティとベストプラクティス
データ分析の自動化においては、セキュリティへの配慮が不可欠です。
APIキーの管理
# ❌ NG: ハードコードしない
API_KEY = "AIza..."
# ✅ OK: 環境変数またはOpenClawのスキル設定から取得
API_KEY = os.environ.get("GA4_API_KEY")
OpenClawのスキル設定(openclaw.jsonのskills.entries)にAPIキーを保存し、スクリプトから環境変数として参照します。詳しくはセキュリティハードニングを参照してください。
データ保持ポリシー
自動収集したデータは無限に蓄積すると管理が困難になります。保持ポリシーを定めましょう。
| データ種別 | 保持期間 | 保存先 |
|---|---|---|
| 日次サマリー | 90日 | memory/ga4-daily-log.md |
| 週次レポート | 1年 | Google スプレッドシート |
| 月次レポート | 無期限 | Google Drive |
| ローデータ | 30日 | ローカルJSON |
レート制限への対応
GA4 Data APIには1日あたりのリクエスト数制限があります。複数レポートを実行する場合は、バッチリクエストやリクエスト間のスリープを設定しましょう。
import time
def fetch_with_rate_limit(requests_list, delay_seconds=1):
"""レート制限を考慮したバッチ取得"""
results = []
for req in requests_list:
result = execute_request(req)
results.append(result)
time.sleep(delay_seconds)
return results
まとめ:データドリブンな意思決定を自動化する
OpenClawによるデータ収集・分析の自動化は、手作業のレポーティングから解放され、意思決定の質とスピードを向上させます。
今日から始められるアクション:
- GA4 Data APIのセットアップ — サービスアカウントを作成し、APIアクセスを有効化する
- 日次レポートのcronジョブ設定 — 毎朝の基本指標レポートを自動化する
- 異常値アラートの導入 — 重要な変動を見逃さない仕組みを作る
- スプレッドシート連携 — チームメンバーとデータを共有できる基盤を整える
データ分析の自動化は、SES事業の成長を加速する最も投資対効果の高い自動化領域です。まずは日次レポートの自動化から始めて、段階的にパイプラインを拡張していきましょう。
OpenClaw 完全攻略シリーズの他の記事:
- Ep.1: OpenClaw使い方入門
- Ep.2: スキル開発ガイド
- Ep.3: マーケティング自動化
- Ep.4: GitHub連携とPR自動化
- Ep.5: マルチエージェント設計
- Ep.6: cronジョブとスケジュール自動化
- Ep.7: ブラウザ自動化
- Ep.8: コスト最適化とモデル選定
- Ep.9: ワークスペース設計
- Ep.10: セッション管理とサブエージェント
- Ep.11: モニタリングとアラート通知
- Ep.12: テスト戦略とデバッグ
出典・参考リンク: