Monitoring

Weekly Plausible and Umami summary to Slack in n8n

Every Monday at 08:00, pulls last week's visitors and pageviews from Plausible and Umami, plus Umami's top three paths, and posts one message to Slack.

Trigger
Schedule Trigger, cron 0 8 * * 1 (Mondays at 08:00)
Nodes
8
Requires
Plausible (HTTP Header Auth), Umami (HTTP Custom Auth), Slack
Category
Monitoring
From the course
Plausible and Umami Analytics
Published
2026-09-10

Node types used

  • Schedule Trigger
  • Edit Fields (Set)
  • HTTP Request
  • Code
  • Slack
Workflow diagram: Weekly Plausible and Umami summary to Slack in n8nMonday 8amDate rangePlausible statsUmami loginUmami statsUmami top pagesMerge and formatPost to Slack
TriggerActionOutput

What it does

Self-hosted analytics only tells you anything if somebody opens the dashboard, and after the first fortnight nobody does. The numbers are worth having in the place the team already reads, once a week, with no login involved.

A Schedule Trigger fires on cron 0 8 * * 1. A Set node computes four date values from last week: two ISO dates for Plausible and the same boundaries as epoch milliseconds for Umami, because the two APIs want different formats. An HTTP Request POSTs to the Plausible /api/v2/query endpoint asking for visitors and pageviews over that range, authenticating with a header credential. Umami needs a session, so a second HTTP Request POSTs to /api/auth/login using a Custom Auth credential that supplies the username and password as a request body, and the token from that response is passed as a bearer header by the next two calls: one for the site stats over the same window, one for the top paths. A Code node reads one value from each response, takes the first three rows of the path metrics, and assembles a plain text message that labels each number with the tool it came from and ends with a reminder not to add the two together. A Slack node posts that text to a channel.

There is no history. Each run posts last week and forgets it, nothing is written to a database, and no attempt is made to reconcile the two tools numbers with each other.

Node by node

  1. 1

    Monday 8am A Schedule Trigger on the cron expression 0 8 * * 1.

  2. 2

    Date range Sets four fields from $now.minus({ weeks: 1 }): plausible_start and plausible_end as yyyy-MM-dd strings from the start and end of that week, and umami_start and umami_end as the same boundaries in epoch milliseconds.

  3. 3

    Plausible stats POSTs to /api/v2/query on your Plausible instance with a JSON body carrying site_id, the metrics visitors and pageviews, and the two ISO dates as date_range. Uses a generic HTTP Header Auth credential for the API key.

  4. 4

    Umami login POSTs to /api/auth/login using a Custom Auth credential whose JSON definition supplies the Umami username and password as the request body. The node carries a note saying to select your own credential rather than typing a password into the node.

  5. 5

    Umami stats GETs /api/websites/{id}/stats with startAt and endAt taken from the Date range node, sending Authorization: Bearer plus the token returned by Umami login.

  6. 6

    Umami top pages GETs /api/websites/{id}/metrics with type=path over the same window and the same bearer token, returning path and count pairs.

  7. 7

    Merge and format A Code node that reads the first result from each response, keeps the top three path rows, and builds one text block: a Plausible line, an Umami line, the three paths, and the closing note that these are two tools measuring two things and should not be added together. Missing values fall back to a question mark rather than breaking the message.

  8. 8

    Post to Slack Posts the assembled text to the channel named on the node.

Setup after import

  1. 1

    Replace https://plausible.yourdomain.example and https://umami.yourdomain.example in the four HTTP Request nodes with your own instance hostnames.

  2. 2

    Replace site_id in the Plausible body with your site, and your-website-id in the two Umami URLs with the website id from the Umami dashboard.

  3. 3

    Create an HTTP Header Auth credential holding your Plausible API key and select it on Plausible stats.

  4. 4

    Create a Custom Auth credential holding the Umami username and password as a body object and select it on Umami login. Do not put the password in the node parameters.

  5. 5

    Create a Slack credential and select it on Post to Slack, then change the channel from the default #analytics.

  6. 6

    None of the four HTTP Request nodes or the Slack node ship with a credential attached, so expect to select all of them after import.

Limits

  • Read and post only. Nothing is stored, so there is no week-on-week comparison.

  • The Umami token is fetched fresh on every run and is not cached.

  • Top pages come from Umami only. The Plausible call asks for totals, not paths.

  • A failure in any one of the four calls fails the whole run, so a Umami outage costs you the Plausible numbers too.

Download the workflow

The 8 node export as n8n reads it. Credential ids, personal values and real endpoints are replaced with placeholders, so nothing here can reach an account that is not yours. No email, no account.

Download weekly-analytics-summary-to-slack.json

Get help with this in the community

If the import fails, if a node errors on the first run, or if you want to point this at a service it does not cover yet, post it in the free House of Loops community. Say which template it is and paste the error. Shannon Atkinson answers, and the answer stays there for the next person who hits the same thing.

Ask in the community