Daily Discord Notifications in three n8n Nodes (No XPath Written)

3 min read Original article ↗

CleanShot 2025-11-06 at 16

I'm participating in the Apify 1M Challenge, and I wanted to keep the community engaged by sharing daily updates about how the challenge is ranking on Peerlist.

So I built a simple automation that sends the current Peerlist ranking to Discord every morning:

  • Total setup time: 5 minutes
  • n8n nodes needed: 3
  • No manual XPath writing. No complex scraping logic. Just three connected nodes.

CleanShot 2025-11-06 at 15

Prerequisites

You'll need:

Step-by-Step Setup

1. Schedule Trigger Node

In a new n8n workflow, add a Schedule Trigger node and set it to run daily at your preferred time.

CleanShot 2025-11-06 at 15 Setting the node to trigger the workflow everyday at 9am.

2. Apify Node

Connect an Apify node to the Schedule Trigger output.

You may need to install the Apify node if you haven't already (see documentation).

CleanShot 2025-11-06 at 15 Select Run an Actor and get dataset.

This is where the magic happens. XPathify automatically extracts all text content from a webpage with ready-to-use XPath selectors.

Configure the node:

  1. Actor: Search for "XPathify" or use scratchyscraper/xpathify (step 1 on the screenshot below)
  2. Input JSON: Your target page, formatted as JSON (e.g., {"url": "https://peerlist.io/fabianmume/project/the-apify-1m-challenge"})
  3. Memory: 128MB is enough, this is a very lightweight actor

CleanShot 2025-11-06 at 15 Apify node configuration on n8n

That's it. Run it once to see the output.

CleanShot 2025-11-06 at 15

3. Discord Node

Finally, connect a Discord node to the Apify output.

CleanShot 2025-11-06 at 15 Select Send a message

Use the Webhook connection type and Create new credential to add your Discord webhook url (check out Discord documentation to create your webhook).

Then compose your message (this is the fun part).

The actor returns a structured JSON with all XPath mappings.

Find the one that contains the ranking number drag and drop the element in the message field.

CleanShot 2025-11-06 at 16 In node input, you can search for the value 17 with the magnifier tool

Finish up writing your message template in Markdown:

:rocket: **Apify 1M Challenge** is number **{{ $json.xpaths['normalize-space(//div[contains(@class, "__className_e8a44e")]//div[1]/div/div[3]/div/div[1]/div[2]/div/div[2]/div[2]/div[1]/div/div/div/p/text())'] }}** on **Peerlist** today (🗳️ keep [**voting**](<https://peerlist.io/fabianmume/project/the-apify-1m-challenge>))

Don't worry about the long XPath expression - this was automatically generated by XPathify. Just use the key that corresponds to your desired value from the JSON output.

Discord Pro Tip: If you want to cancel the auto-embed link preview, you can wrap the link in '< >' tags (Source).

Activate and Test

Activate and save the workflow, then execute it.

If everything works, you're done!

CleanShot 2025-11-06 at 16 Tadaaaa

Beyond Challenge Tracking: Other Use Cases

XPathify can be used in many other use cases:

  • Price monitoring (track competitor pricing)
  • Changelog monitoring (get notified of product updates)
  • Stock availability alerts
  • Any "check this daily" task you're tired of doing manually

Feel free to test it.

#apify