Skip to main content

Make.com Integration Guide

Paste this into Claude Code, Copilot, Cursor, or any AI coding agent to apply changes in your repo.

Quick answer: Use Make.com’s visual flow editor with a “Custom webhook” trigger. Point Surmado’s webhook_url at it, filter on event = report.completed and report.product, then fan out to Google Sheets / Slack / Airtable / Notion. For deeper data, add an HTTP module that calls GET https://api.surmado.com/v1/reports/{{1.report.id}} with Bearer auth.

Reading time: 14 minutes


Prerequisites

  1. Make.com account (free plan works for low-volume; Core $9/month for regular use)
  2. Surmado API key (sur_live_...) — create at app.surmado.com → Settings → API Keys
  3. Destination app (Google Sheets, Slack, Airtable, Notion, etc.)

Make Plan Requirements

Free plan:

  • 1,000 operations/month
  • 2-scenario limit
  • Sufficient for 1-5 clients, low volume

Core plan ($9/month):

  • 10,000 operations/month
  • Unlimited scenarios
  • Recommended for regular use

Pro plan ($16/month):

  • 10,000 operations + higher data limits
  • Custom variables, priority execution
  • For agencies with 10+ clients

The Integration Pattern

  1. Trigger: “Webhooks → Custom webhook”. Make gives you a unique URL.
  2. Configure Surmado to POST report completions to that URL via webhook_url when creating a report.
  3. Filter on event and report.product.
  4. Parse the nested payload using Make’s dot notation (1.report.summary.presence_score).
  5. (Optional) HTTP module to fetch deeper data via REST API.
  6. Act — write to destination app.

Example payload

{
  "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 reports ("product": "solutions") have no summary object — only report.token and report.pdf_url.


Workflow 1: AI Visibility to Google Sheets

Scenario modules

Module 1 — Webhooks: Custom webhook

  • Add a new webhook. Make generates a URL like https://hook.eu2.make.com/abc123def456.
  • Click Determine data structure and trigger a sample Surmado report (see the curl example below) so Make can capture the payload shape.

Create the sample with:

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"
  }'

Module 2 — Tools: Filter

Condition: 1.event Equal to report.completed AND 1.report.product Equal to signal.

Module 3 — Google Sheets: Add a Row

Map columns:

  • 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}}

Operations used per run: 3.


Workflow 2: Site Audit with Conditional Alerts

Single scenario that writes every Site Audit to Google Sheets and pings Slack only when performance_score < 70.

Module 1 — Custom webhook (reuse from Workflow 1 or create a new one).

Module 2 — Filter: 1.event = report.completed AND 1.report.product = scan.

Module 3 — Google Sheets: Add a Row with the Site Audit summary fields (seo_score, performance_score, accessibility_score, total_pages, critical_issues_count).

Module 4 — Router: split into two paths.

  • Path A (always): continues to completion.
  • Path B: Filter 1.report.summary.performance_score < 70 → Slack: Create a message.

Slack message template:

: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}}

Operations used per run: 4-5 depending on path taken.


Workflow 3: Strategy Digest Email

Strategy reports don’t include a summary. Pattern:

  1. Custom webhook trigger.
  2. Filter: 1.event = report.completed AND 1.report.product = solutions.
  3. Gmail / Email: Send an email with the PDF link.

Email body:

<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>

Operations: 2.


Fetching Deeper Data

The webhook summary covers most needs. For platform-specific breakdowns (e.g. ChatGPT vs Claude presence) or per-page Site Audit issues, add an HTTP module after the filter:

Module: 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

Then downstream modules can reference {{2.public_intelligence.data.platform_variance.chatgpt.presence_score}} or {{2.public_intelligence.data.audit_data.enrichment.content_gaps.executive_summary}}.

Security: store your API key in a Make Connection or Custom Variable instead of pasting it inline.


Advanced Patterns

Router by product

Use a Router after the webhook to dispatch by 1.report.product:

  • Branch 1: signal → AI Visibility workflow
  • Branch 2: scan → Site Audit workflow
  • Branch 3: solutions → Strategy digest

One webhook URL handles every report type.

Multi-client agency setup

Use 1.report.summary.business_name as the client identifier in a Data store lookup to route each client to its own sheet tab or Notion page. Create each client as a Surmado brand once via POST /v1/brands/ensure, then reuse the brand_slug on every report.


Token Formats

Intelligence Token prefixes:

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

Tokens don’t expire. Signed download URLs from the REST API are valid for ~15 minutes; the magic-link pdf_url in webhooks is valid for ~30 days.


Troubleshooting

Webhook trigger doesn’t fire — Confirm webhook_url was set on the report creation call, and try webhook.site as a staging URL to verify Surmado is sending payloads.

Fields show as undefined in downstream modules — The report may not have that field populated (e.g. top_competitor is null for brands with no identified competitors), or you’re looking at a Strategy report which doesn’t include a summary. Verify the product with 1.report.product.

HTTP module returns 401 — API key is missing or malformed. Header must be Authorization: Bearer sur_live_... (including Bearer ).

Operations used higher than expected — Routers and filters each count as one operation per run. Consolidate where possible: a single Google Sheets module using mapped values is cheaper than multiple modules.


Related: API Integration Guide | Structured Data & Intelligence Tokens | Zapier Integration | n8n Integration | Notion Integration