All posts
Case study

How I built a system that finds me new n8n templates every day

n8n publishes thousands of community workflow templates and adds more every day. A scheduled workflow pulls the new ones, files them in Notion with a category and a difficulty, and sends the interesting ones to Telegram before breakfast.

n8n’s template library is one of the best reasons to use n8n, and one of the worst places to spend an evening. There are thousands of community workflows in it, more arrive every day, and the search is built for someone who already knows what they are looking for. I am usually looking for the opposite: something I did not know was possible, that I could adapt for a client or turn into a product.

So I stopped browsing it. A workflow now checks it for me every day, files anything new in a Notion database, and tells me on Telegram when something has arrived. The templates it finds feed the ones I test and adapt, for clients and for my own products. This is how it works, and why each piece is shaped the way it is.

What it does

Once a day:

  1. Fetch the most recent templates from n8n’s library.
  2. Compare them against the ones already in Notion.
  3. For each new one, work out a category and a difficulty, and file it.
  4. Send a Telegram message listing what arrived, with links.

A lot of what arrives is noise, a Google Sheets to Slack bridge with a different sheet. The point is the occasional one that is not, which I would never have found by hand because I would never have been looking.

The source

n8n’s template library has a public API behind it at api.n8n.io, the same one the editor’s own template browser reads from. A search with no query, sorted by creation date, returns the newest workflows first, each with an id, a name, a description, the author, a created date and, most usefully, the list of nodes it uses.

That makes the fetch one HTTP Request node. The first run has to walk back through the pages to seed the database; after that only the newest page or two matter, because anything older than the newest template already filed has been seen.

The node list is worth keeping even if you do nothing clever with it. A template’s name tells you what the author called it; its nodes tell you what it actually does.

The diff

This is the same pattern as every scanner I run: fetch everything from the source, fetch everything known from Notion, subtract in a Code node.

// Template URLs already filed, from the Notion "Get Many" node.
const known = new Set(
  $('Notion: Known').all().map((row) => row.json.property_url)
);

// Keep only the templates Notion has not seen.
return $('Fetch templates').all()
  .flatMap((page) => page.json.workflows)
  .filter((w) => !known.has(`https://n8n.io/workflows/${w.id}`))
  .map((w) => ({ json: w }));

I wrote about why the filtering happens in code rather than in the Notion node in the n8n and Notion gotchas post. Short version: the node’s filter builder cannot compare against values that came from another node, and this comparison is nothing but that.

Category and difficulty

The library gives you a name, a description and a node list. It does not give you a category you would agree with, and it does not give you a difficulty at all. Both matter, because they are what you filter on later, when you open Notion looking for “something in finance that is not trivial”.

Whatever does the categorising, the thing that makes it work is a fixed list. Let anything choose its own categories and it will invent a new one every week, and Notion will happily create a select option for each, until the column is full of near-duplicates and useless as a filter. So the allowed values live in one place, anything outside them becomes “Other”, and that check happens in a Code node before the write, not after.

Difficulty is easier than it looks, because the node list gives it away. A trigger, a transform and a send is a beginner’s workflow. Anything with a Code node, a Merge, a sub-workflow or an error trigger is not.

Filing in Notion

One Notion Create Page per new template, with these properties:

PropertyTypeFrom
Nametitlethe template
Descriptionrich textthe template, clipped to 1,900 characters
URLurlbuilt from the id, and the dedupe key
Categoryselectfrom the fixed list
Difficultyselectinferred from the nodes
Tagsmulti-selectwhat the template touches

Two things from the n8n and Notion gotchas post apply directly here. The description has to be clipped, because Notion rejects any rich text value over 2,000 characters rather than truncating it. And the creates should sit inside a Loop Over Items with a short wait between batches, because a workflow that is idle all day and then files thirty pages at once is exactly the burst Notion’s rate limit catches.

The Telegram message

The last node sends one message, not one per template. A notification per template is how you end up muting the bot. One message, grouped by category, each line a link:

n8n templates · 14 new

Finance (2)
· Reconcile Stripe payouts to Xero · Advanced
· Weekly cash position to Slack · Beginner

Ops (5)
· ...

One gotcha worth knowing before you build it: in Telegram’s Markdown parse mode, an unescaped underscore or bracket fails the whole send, and n8n template names are full of both. parse_mode: HTML with the three characters HTML cares about escaped is the easier path.

What it is for

It is not a discovery engine that hands me a product every week. Most days nothing in the message needs acting on, and that is fine, because it costs nothing and takes no attention. What it does is make sure that when something useful does appear, it lands in a database I can search by category and difficulty rather than in a feed I would have scrolled past.

It has also become a strange kind of market research. When several templates for the same thing arrive close together, something has changed in what people want.

Building your own

The whole workflow is a handful of nodes, and nothing in it is specific to templates. Swap the HTTP node’s target and the same shape watches a job board, a supplier’s price list or a competitor’s changelog. That is the actual lesson: a scanner is not a project, it is a pattern, and once you have one the next takes an hour.

If you want the same shape watching something for your business, that is the sort of thing I build. Get in touch.