Make.com Integration Guide
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
- Make.com account (free plan works for low-volume; Core $9/month for regular use)
- Surmado API key (
sur_live_...) — create at app.surmado.com → Settings → API Keys - 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
- Trigger: “Webhooks → Custom webhook”. Make gives you a unique URL.
- Configure Surmado to POST report completions to that URL via
webhook_urlwhen creating a report. - Filter on
eventandreport.product. - Parse the nested payload using Make’s dot notation (
1.report.summary.presence_score). - (Optional) HTTP module to fetch deeper data via REST API.
- 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 nosummaryobject — onlyreport.tokenandreport.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:
- Custom webhook trigger.
- Filter:
1.event = report.completedAND1.report.product = solutions. - 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
- Name:
- 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