Getting found online

Find what competitors cover and you do not, with n8n

The manual version of this is scrolling somebody's blog for an hour and remembering a quarter of it. This reads both sitemaps, groups the subjects, and hands you the difference.

Build time
An afternoon
Difficulty
Intermediate
Template
7 nodes

What you need before you start

  • An n8n instance.
  • Your own sitemap URL, and two or three competitors' sitemaps.
  • An OpenAI or Anthropic API key. This one costs a few pence per run.
  • An honest list of who your competitors actually are, which is harder than it sounds.

The manual version of this takes an hour. You open a competitor’s blog, scroll, open a few things, get distracted by one that annoys you, and come away with three ideas of which you write down one.

The automated version takes forty seconds and gives you all of it. Not because it is cleverer, but because it does not get bored.

What it actually compares

Not URLs. Subjects.

Comparing URLs is useless, because they will have written about the same thing you did and called it something different. /blog/how-long-should-a-quote-take/ and /resources/quote-turnaround-times are the same subject with nothing in common as strings.

So both sitemaps get read, both lists of page titles get grouped into subjects by a model, and then you subtract. What comes out is a list of things they answer and you do not.

Finding the sitemaps

Yours you know. Theirs takes about thirty seconds each.

Try /sitemap.xml. If that fails, try /sitemap_index.xml. If both fail, open /robots.txt, which is a public file every site has, and look for a line beginning Sitemap:. It is there far more often than not.

Occasionally a site genuinely has no sitemap. That is useful intelligence on its own, and it usually means the rest of their SEO is not receiving much attention either.

The build, seven nodes

1. Manual Trigger. This is a thinking tool rather than a monitor. Run it when you are planning, not on a schedule.

2. Code node, called Targets. Your sitemap and theirs, as a list with a who label on each:

return [
  { json: { who: 'us',  url: 'https://yoursite.co.uk/sitemap.xml' } },
  { json: { who: 'them', url: 'https://competitor.co.uk/sitemap.xml' } },
  { json: { who: 'them2', url: 'https://another.co.uk/sitemap.xml' } },
];

3. HTTP Request + XML. Fetch each, parse each. Same pattern as the on-page audit build, including the sitemap-index check if any of them use one.

4. Code node, called Titles. URLs alone are thin evidence, so this is where you decide how much to spend.

The cheap version derives a subject from the slug: take the last path segment, replace hyphens with spaces, and you get “how long should a quote take”. Good enough surprisingly often, and it costs nothing.

The better version fetches each page and takes the real <h1>. More accurate, and on a competitor with 200 pages it is 200 requests, so pace it and be reasonable about it.

Start with slugs. Move to titles only if the output is too vague to use.

5. Code node, called Bundle. Collapse everything into two lists, one per side, as plain text. The next node is a single model call, so this is where you make sure you are sending two tidy lists rather than four hundred separate items.

6. Basic LLM Chain, called Compare. One call, both lists, and a prompt that asks for something specific:

Here are the page subjects covered by two competitors, and the subjects
covered by us.

List up to fifteen subjects THEY cover that WE do not. Group near-duplicates.
For each one give:
  subject   - six words or fewer
  who       - which competitor covers it
  guess     - one sentence on why a customer might search for this

Ignore subjects that are clearly about their own company: about pages,
careers, team, locations, case studies. Ignore anything we cover under a
different name.

Return nothing else.

That exclusion list is the difference between fifteen usable rows and fifteen rows of “About Us”. Without it the top of the output is always the pages every business has.

7. Google Sheets, Append. With today’s date. Run it again in six months and the difference between the two runs tells you what they have been working on, which is arguably more useful than either run alone.

Reading it properly

A gap is a question, not an instruction.

For each row, ask one thing: do my customers ask this? If they do, it belongs on your list regardless of what any competitor is doing. If they do not, it does not, and a competitor writing about it does not change that. Plenty of published pages were somebody’s bad Tuesday afternoon and are earning nothing at all.

Then sort what is left by how close it is to a sale. A page about how quotes are structured is worth more than a page about the history of your trade, even if the second one is more fun to write and will get more shares.

The output is usually five to eight things worth doing out of fifteen. That is a good hit rate for a tool that cost you pennies and forty seconds.

The variant worth building second

Point it at yourself, twice, six months apart.

Same workflow, both inputs your own sitemap, one from the Wayback Machine. What comes back is what you have added, and it is a sharper look in the mirror than most people expect. A common result is discovering you wrote nine posts about the same thing under different titles, which is also the most likely reason two of your pages are competing for one term.

Where it falls short

It has no idea what anything is worth. There is no search volume here, no difficulty score, no sense of whether a subject gets a hundred searches a month or none. That is genuinely what the paid tools are for, and if you get to the point of choosing between twenty good ideas rather than looking for five, that is when buying one starts to make sense.

Until then, this answers the question you actually have, which is what to write next.

Published 28 August 2026. Written by the people who run this sort of thing for clients, on n8n, including our own lead pipeline.

Next in getting found online: The on-page audit of any URL. Or go back to all 4 in this category.

Questions about this build

How do you find a content gap without a paid tool?

Read both sitemaps and compare the subjects rather than the URLs. A sitemap is a public list of every page a site thinks is worth indexing, so it tells you what a competitor has decided to write about. Grouping both lists into subjects and subtracting one from the other gets you most of what an expensive tool would, minus the search volume figures.

Where is a competitor's sitemap?

Try /sitemap.xml first, then /sitemap_index.xml, and check /robots.txt, which is required to be public and usually names the sitemap explicitly. If none of those work the site may have no sitemap at all, which is itself worth knowing about a competitor.

Is a gap always an opportunity?

No, and treating it as one is how you end up with forty pages earning nothing. Plenty of what any competitor publishes was a bad idea that nobody has taken down. A gap is a question to ask, which is whether their customers ask this and yours would too. The list tells you what to consider, not what to write.

How many competitors should I compare against?

Two or three, and pick them on who ranks for your terms rather than who you think about at trade shows. The firm winning the searches you want is your competitor for this purpose even if they are twice your size and in a different county.

Does this work for local service businesses?

It works better for them than for most, because local service sites are small enough to read whole and their gaps tend to be obvious once listed. A plumber with eleven pages against a competitor with forty is a very quick conversation about what those other twenty-nine are.

The next step

Stop losing leads.Let's fix it this week.

Tell us what keeps slipping and we'll scope something around it. You'll be talking to Max, who runs the work, not a sales team. Most clients are live within 48–72 hours of that first conversation.

30-day rolling retainers. No lock-in. Cancel anytime.