メインコンテンツにスキップ

Make.com連携ガイド

結論:Make.com(メイク・ドットコム)のビジュアルなフローエディタで、「Custom webhook」トリガーを使います。Surmado(スルマド)の webhook_url をそこに向け、event = report.completed と report.product で絞り込み、Google Sheets / Slack / Airtable / Notionへ振り分けます。さらに詳しいデータが必要な場合は、Bearer認証で GET https://api.surmado.com/v1/reports/{{1.report.id}} を呼び出すHTTPモジュールを追加します。

読了時間:14分


前提条件

  1. Make.comのアカウント(少量の利用ならFreeプランで足ります。定期的に使うならCoreの$9/monthです)
  2. Surmado APIキー(sur_live_...)。app.surmado.com → Settings → API Keys で作成します
  3. 送信先のアプリ(Google Sheets、Slack、Airtable、Notionなど)

Makeのプラン要件

Freeプラン:

  • 月1,000オペレーション
  • シナリオは2件まで
  • クライアント1〜5社の少量の利用には十分です

Coreプラン($9/month):

  • 月10,000オペレーション
  • シナリオは無制限
  • 定期的な利用におすすめです

Proプラン($16/month):

  • 10,000オペレーション + より大きいデータ上限
  • カスタム変数、優先実行
  • クライアントが10社以上あるエージェンシー向けです

連携の基本パターン

  1. トリガー:「Webhooks → Custom webhook」。Makeが専用のURLを発行します。
  2. Surmadoの設定:レポートを作成するときに webhook_url を指定して、完了通知をそのURLにPOSTするようにします。
  3. Filter:event と report.product で絞り込みます。
  4. 解析:ネストされたペイロードを、Makeのドット表記(1.report.summary.presence_score)で読み取ります。
  5. (任意)REST APIでさらに詳しいデータを取得するHTTPモジュール。
  6. 実行:送信先のアプリに書き込みます。

ペイロードの例

{
  "event": "report.completed",
  "timestamp": "2026-04-15T12:00:00+00:00",
  "report": {
    "id": "rpt_abc123xyz",
    "token": "SIG-2026-04-A1B2C",
    "product": "signal",
    "status": "completed",
    "tier": "basic",
    "data_url": "https://api.surmado.com/v1/reports/rpt_abc123xyz",
    "pdf_url": "https://api.surmado.com/v1/reports/view/VIEW_TOKEN",
    "summary": {
      "business_name": "Acme Coffee Roasters",
      "presence_score": 34.2,
      "authority_score": 42.7,
      "competitive_rank": 4,
      "top_competitor": "Blue Bottle"
    }
  }
}

Strategyレポート("product": "solutions")には summary オブジェクトがありません。あるのは report.token と report.pdf_url だけです。


ワークフロー1:AI VisibilityをGoogle Sheetsへ

シナリオのモジュール

モジュール1:Webhooks: Custom webhook

  • 新しいwebhookを追加します。Makeが https://hook.eu2.make.com/abc123def456 のようなURLを生成します。
  • Determine data structure をクリックし、Surmadoのサンプルレポートを実行して(下のcurlの例を参照)、Makeにペイロードの形を取得させます。

サンプルは次のように作成します。

curl -X POST https://api.surmado.com/v1/reports/signal \
  -H "Authorization: Bearer sur_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "brand_slug": "acme_corp",
    "url": "https://acme.com",
    "email": "founder@acme.com",
    "industry": "B2B SaaS",
    "location": "United States",
    "persona": "Small business owners",
    "pain_points": "Losing track of customer conversations",
    "brand_details": "Simple CRM with email integration",
    "direct_competitors": "HubSpot, Pipedrive",
    "webhook_url": "https://hook.eu2.make.com/abc123def456"
  }'

モジュール2:Tools: Filter

条件:1.event Equal to report.completed AND 1.report.product Equal to signal。

モジュール3:Google Sheets: Add a Row

列をマッピングします。

  • Date: {{1.timestamp}}
  • Token: {{1.report.token}}
  • Business: {{1.report.summary.business_name}}
  • Presence Score: {{1.report.summary.presence_score}}
  • Authority Score: {{1.report.summary.authority_score}}
  • Competitive Rank: {{1.report.summary.competitive_rank}}
  • Top Competitor: {{1.report.summary.top_competitor}}

1回の実行で使うオペレーション:3。


ワークフロー2:Site Auditと条件付きアラート

Site Auditをすべて1つのシナリオでGoogle Sheetsに書き込み、performance_score < 70 のときだけSlackに通知します。

モジュール1:Custom webhook(ワークフロー1のものを再利用するか、新しく作成します)。

モジュール2:Filter:1.event = report.completed AND 1.report.product = scan。

モジュール3:Google Sheets: Add a Row。Site Auditのサマリーのフィールド(seo_score、performance_score、accessibility_score、total_pages、critical_issues_count)を入れます。

モジュール4:Router:2つの経路に分けます。

  • 経路A(常に実行):そのまま完了まで進みます。
  • 経路B:Filter 1.report.summary.performance_score < 70 → Slack: Create a message。

Slackのメッセージのテンプレート:

:warning: Performance regression on *{{1.report.summary.business_name}}*

Performance: {{1.report.summary.performance_score}} (below 70 threshold)
SEO: {{1.report.summary.seo_score}}
Accessibility: {{1.report.summary.accessibility_score}}
Critical issues: {{1.report.summary.critical_issues_count}}

View report: {{1.report.pdf_url}}

1回の実行で使うオペレーション:通る経路によって4〜5。


ワークフロー3:Strategyの要約メール

Strategyのレポートにはサマリーがありません。流れは次のとおりです。

  1. Custom webhookトリガー。
  2. Filter:1.event = report.completed AND 1.report.product = solutions。
  3. Gmail / Email: PDFリンクを添えてメールを送ります。

メールの本文:

<p>Strategy report <code>{{1.report.token}}</code> has been delivered.</p>
<p><a href="{{1.report.pdf_url}}">View the full report (PDF)</a></p>

オペレーション:2。


さらに詳しいデータの取得

webhookのサマリーでほとんどの用途はまかなえます。プラットフォーム別の内訳(たとえばChatGPTとClaudeのPresence)や、Site Auditのページごとの問題が必要な場合は、フィルターのあとにHTTPモジュールを追加します。

モジュール:HTTP: Make a request

  • URL: https://api.surmado.com/v1/reports/{{1.report.id}}
  • Method: GET
  • Headers:
    • Name: Authorization
    • Value: Bearer sur_live_YOUR_API_KEY
  • Parse response: Yes

これで、下流のモジュールから {{2.public_intelligence.data.platform_variance.chatgpt.presence_score}} や {{2.public_intelligence.data.audit_data.enrichment.content_gaps.executive_summary}} を参照できます。

セキュリティ:APIキーは、直接貼り付けずに、MakeのConnectionまたはCustom Variableに保存してください。


応用パターン

プロダクトごとのRouter

webhookのあとにRouterを置き、1.report.product で振り分けます。

  • 分岐1:signal → AI Visibilityのワークフロー
  • 分岐2:scan → Site Auditのワークフロー
  • 分岐3:solutions → Strategyの要約配信

1つのwebhook URLで、すべての種類のレポートを処理できます。

複数クライアント向けのエージェンシーの設定

1.report.summary.business_name をクライアントの識別子にしてData storeを参照し、クライアントごとにシートのタブやNotionのページへ振り分けます。各クライアントは、最初に1回だけ POST /v1/brands/ensure でSurmadoのブランドとして作成し、以降のレポートでは brand_slug を再利用します。


トークンの形式

Intelligence Tokenの接頭辞:

  • AI Visibility: SIG-YYYY-MM-XXXXX(正規表現:SIG-\d{4}-\d{2}-[A-Z0-9]{5})
  • Site Audit: SCN-YYYY-MM-XXXXX(正規表現:SCN-\d{4}-\d{2}-[A-Z0-9]{5})
  • Strategy: SOL-YYYY-MM-XXXXX(正規表現:SOL-\d{4}-\d{2}-[A-Z0-9]{5})

トークンに有効期限はありません。REST APIの署名付きダウンロードURLは約15分間有効です。webhookに入っているマジックリンクの pdf_url は、約30日間有効です。


トラブルシューティング

webhookトリガーが動作しない:レポート作成の呼び出しで webhook_url を設定したか確認してください。また、webhook.site をテスト用のURLに使うと、Surmadoがペイロードを送っているか確認できます。

下流のモジュールでフィールドが undefined になる:レポートにそのフィールドの値が入っていないか(たとえば、競合が特定されていないブランドでは top_competitor がnullです)、サマリーを持たないStrategyのレポートを見ている可能性があります。1.report.product でプロダクトを確認してください。

HTTPモジュールが401を返す:APIキーがないか、形式が正しくありません。ヘッダーは Authorization: Bearer sur_live_...(Bearer を含む)にする必要があります。

オペレーションの使用量が想定より多い:RouterとFilterは、それぞれ1回の実行につき1オペレーションとして数えられます。できるだけまとめてください。マッピングした値を使う1つのGoogle Sheetsモジュールのほうが、複数のモジュールを使うより安く済みます。


関連:API連携ガイド | 構造化データとIntelligence Token | Zapier連携 | n8n連携 | Notion連携