Alerts and automation

CueScout in n8n

n8n's Webhook node takes the POST and hands the body to the rest of the workflow. Everything on the Zapier and Make pages applies here, with one addition worth the paragraph: n8n is usually self-hosted on a URL you control, which is exactly the case where verifying our signature is worth the five minutes.

The signature is an HMAC-SHA256 of the raw body under the secret shown on your settings screen, sent in X-CueScout-Signature. Verifying it means a public endpoint cannot be fed a fake reading by anyone who guessed the path.

Where the URL comes from: A workflow starting with the Webhook node, POST method

Setting it up

  1. 1.Add a Webhook node set to POST

    Copy the production URL rather than the test one — the test URL only listens while the editor is open, which is a good way to conclude the integration does not work.

  2. 2.Paste it into CueScout with the generic format

    Settings → Webhook. Press the test button and confirm the execution appears in n8n.

  3. 3.Verify the signature in a Code node

    Compare against the raw body, not a re-serialised object — JSON.stringify of a parsed body reorders nothing on most inputs and will bite you eventually. n8n's Webhook node keeps the raw body when "Raw Body" is enabled.

    Code node

    const crypto = require('crypto');
    
    const secret = $env.CUESCOUT_WEBHOOK_SECRET;
    const raw = $input.first().binary
      ? $input.first().binary.data.toString()
      : JSON.stringify($input.first().json);
    
    const expected =
      'sha256=' + crypto.createHmac('sha256', secret).update(raw).digest('hex');
    const got = $input.first().headers['x-cuescout-signature'];
    
    if (expected !== got) throw new Error('bad signature');
    return $input.all();

What arrives

One POST a week. Every field is top-level, because a nested object costs you a mapping step for no benefit. visibility_pct and delta are the two worth building a filter on.

Request body

{
  "event": "weekly.moved",
  "sent_at": "2026-08-14T09:00:00Z",
  "product_id": "5f0e…",
  "product": "Acme",
  "headline": "You are in 41% of AI answers, down 6 points on the previous window.",
  "detail": [
    "Rival turned up for \"best tool for x\", where you are absent.",
    "Your page \"The guide\" is now being cited."
  ],
  "url": "https://cuescout.com/insights/geo",
  "visibility_pct": 41,
  "delta": -6,
  "questions": 8,
  "answers": 11,
  "low_sample": true
}

What this does not do

  • The signature covers the exact bytes we sent. Verifying against a re-serialised body works until the day it does not.
  • n8n's test URL only listens while the editor is open. Use the production URL for the weekly delivery.
  • One destination per product, and one event: the weekly what-moved reading. There is no per-event subscription list.
  • It fires once a week, with the digest email. This is not a real-time feed.
  • No retries. A failed delivery is recorded with the destination's own error text on the settings screen, and the next attempt is next week.
  • Delivery history is the last attempt only. There is no log to page through.

Frequently asked questions

Can n8n run the CueScout MCP server instead?

That is a different thing and this page is not it. The MCP server is a stdio process for AI clients; what n8n receives here is a plain webhook.

How often does it fire?

Once per week per product, at the same time the digest email goes out. The email decides there is something worth saying and the webhook rides that decision, which is also why it cannot double-send.

How do I know it is really CueScout?

Every request carries an X-CueScout-Signature header: an HMAC-SHA256 of the exact body, under a secret shown on the settings screen. Verify it if your endpoint is public — otherwise the URL is the only thing protecting your numbers from anybody who guesses it.

What happens if my endpoint is down?

The delivery is recorded as failed, with whatever your server said, and nothing is retried. You will see it on the settings screen; the next message is next week.

Related

Every integration we publish

Run the checks on your own site

The readiness check is free, needs no signup, and takes about half a minute. It works out what your site is built on and gives you the fixes written for it.