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.