Skip to main content
Foglift

Automation Templates

Pre-built templates for connecting Foglift to your existing tools. Use webhooks + these recipes to automate your SEO/GEO monitoring workflow.

Quick Setup

  1. 1. Go to Settings > Webhooks and create a webhook endpoint
  2. 2. Choose which events to listen for (scan.completed, score.dropped, score.changed)
  3. 3. Point the webhook URL to your automation platform (Zapier Webhook URL, n8n Webhook node, etc.)
  4. 4. Copy the code from a template below and paste it into your workflow

Webhook Payload Reference

{
  "event": "scan.completed",
  "url": "https://example.com",
  "scores": {
    "overall": 85,
    "seo": 90,
    "geo": 80,
    "performance": 85,
    "security": 90,
    "accessibility": 80
  },
  "previousScore": 78,
  "newScore": 85,
  "scannedAt": "2026-03-19T12:00:00Z",
  "userId": "abc123"
}

Slack Alert on Score Drop

Get notified in Slack when a monitored URL's score drops below a threshold.

Zapier / n8n
Trigger:Webhook (score.dropped)
Action:Post to Slack channel
Event:score.dropped
View code template
// n8n Code Node — Format Slack message
const data = $input.first().json;
return [{
  json: {
    text: "Score dropped for " + data.url + ": " + data.newScore + "/100",
    blocks: [{
      type: "section",
      text: {
        type: "mrkdwn",
        text: ":warning: *Score Drop Alert*\n" + data.url
          + " score: " + data.previousScore + " → " + data.newScore
      }
    }]
  }
}];

Log Scans to Google Sheets

Automatically log every scan result to a Google Sheets spreadsheet.

Zapier / n8n / Make
Trigger:Webhook (scan.completed)
Action:Append row to Google Sheet
Event:scan.completed
View code template
// n8n Code Node — Prepare row for Google Sheets
const data = $input.first().json;
return [{
  json: {
    url: data.url,
    overall: data.scores.overall,
    seo: data.scores.seo,
    geo: data.scores.geo,
    performance: data.scores.performance,
    security: data.scores.security,
    accessibility: data.scores.accessibility,
    grade: data.scores.overall >= 90 ? "A" : "B",
    scannedAt: data.scannedAt,
  }
}];

Email Weekly Report to Client

Send a formatted email summary to clients every Monday with their latest scores.

n8n (Cron trigger)
Trigger:Cron (every Monday 9am)
Action:HTTP Request → Format → Send Email
Event:weekly.digest
View code template
// n8n HTTP Request node config:
// URL: https://foglift.io/api/v1/scan?url=CLIENT_URL
// Method: GET
// Headers: { "x-api-key": "your-foglift-api-key" }

// Then use Code Node to format:
const data = $input.first().json;
const grade = data.scores.overall >= 90 ? "A" : "B";
return [{
  json: {
    to: "client@example.com",
    subject: "Weekly SEO Report: " + data.url + " — Grade " + grade,
    html: "<h2>Report for " + data.url + "</h2>"
      + "<p>Overall: <strong>" + data.scores.overall + "/100</strong></p>"
      + "<ul><li>SEO: " + data.scores.seo + "</li>"
      + "<li>GEO: " + data.scores.geo + "</li></ul>"
  }
}];

Discord Notification on Scan Complete

Send a Discord embed when any scan completes, with scores and a link.

n8n / Custom Webhook
Trigger:Webhook (scan.completed)
Action:POST to Discord Webhook
Event:scan.completed
View code template
// n8n HTTP Request node — POST to Discord Webhook
// URL: https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN
const data = $input.first().json;
const color = data.scores.overall >= 80 ? 0x22c55e : 0xef4444;
return [{
  json: {
    embeds: [{
      title: "Scan Complete: " + data.url,
      color: color,
      fields: [
        { name: "Overall", value: String(data.scores.overall), inline: true },
        { name: "SEO", value: String(data.scores.seo), inline: true },
        { name: "GEO", value: String(data.scores.geo), inline: true },
      ],
      footer: { text: "Foglift — foglift.io" },
      timestamp: new Date().toISOString(),
    }]
  }
}];

Sync Scans to Airtable

Keep an Airtable base in sync with your latest scan results for reporting.

Zapier / n8n / Make
Trigger:Webhook (scan.completed)
Action:Create/Update Airtable record
Event:scan.completed
View code template
// n8n Code Node — Format for Airtable
const data = $input.first().json;
return [{
  json: {
    fields: {
      URL: data.url,
      "Overall Score": data.scores.overall,
      "SEO Score": data.scores.seo,
      "GEO Score": data.scores.geo,
      Grade: data.scores.overall >= 90 ? "A" : "B",
      "Last Scanned": data.scannedAt,
      Status: data.scores.overall >= 80 ? "Healthy" : "Needs Attention",
    }
  }
}];

Monitor Competitor Score Changes

Scan competitor URLs daily and alert when their scores change significantly.

n8n (Cron)
Trigger:Cron (daily at 6am)
Action:HTTP Request → Compare → Alert
Event:score.changed
View code template
// n8n workflow:
// 1. Cron Trigger (daily)
// 2. HTTP Request to Foglift API for each competitor URL
// 3. Code node to compare with stored scores
// 4. IF node to check threshold
// 5. Slack/Email notification

const competitors = ["competitor1.com", "competitor2.com"];
const results = [];
for (const url of competitors) {
  const res = await this.helpers.httpRequest({
    method: "GET",
    url: "https://foglift.io/api/v1/scan?url=" + url,
    headers: { "x-api-key": "your-foglift-api-key" },
  });
  results.push({ url, scores: res.scores });
}
return results.map(r => ({ json: r }));

Supported Platforms

Zapier

Use Webhooks by Zapier trigger

n8n

Use Webhook node as trigger

Make

Use Custom Webhook module

Custom

Any HTTP endpoint works

Need a custom integration? Check the API docs or set up webhooks.