{"id":768,"date":"2026-11-01T09:55:21","date_gmt":"2026-11-01T09:55:21","guid":{"rendered":"https:\/\/basein.dev\/blog\/?p=768"},"modified":"2026-11-01T09:55:22","modified_gmt":"2026-11-01T09:55:22","slug":"building-a-small-radar-for-competitor-websites","status":"publish","type":"post","link":"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/","title":{"rendered":"Building a Small Radar for Competitor Websites"},"content":{"rendered":"\n<p>Checking competitor websites is easy to start and difficult to maintain.<\/p>\n\n\n\n<p>You open a few tabs, look through service pages, skim the blog, and try to remember what was there last time. With a longer list of companies, the process becomes repetitive. A new landing page can disappear into a large website long before you notice it.<\/p>\n\n\n\n<p>I started building a small tool to make that research more consistent. The question behind it was simple: what pages are competitors adding, and which changes are worth a closer look?<\/p>\n\n\n\n<p>The first version uses a source many websites already publish: their sitemap.<\/p>\n\n\n\n<p><strong>Starting with a record of what exists<\/strong><\/p>\n\n\n\n<p>The tool stores a name and a sitemap address for each company. On its first successful check, it creates a baseline of the URLs it finds.<\/p>\n\n\n\n<p>That baseline matters. Importing a website with several thousand pages should not create several thousand \u201cnew\u201d discoveries. Those pages are the starting point. Future checks compare against them.<\/p>\n\n\n\n<p>When an unfamiliar URL appears, the tool marks it as new. When a known URL reports a later modification date, it appears as an update.<\/p>\n\n\n\n<p>The result is a feed that can be viewed across all monitored companies or narrowed to one competitor.<\/p>\n\n\n\n<p>A new service page, an industry-specific landing page, or a cluster of articles can become a useful research lead. Each still needs to be opened and interpreted.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"798\" src=\"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_51_57-1024x798.png\" alt=\"\" class=\"wp-image-769\" srcset=\"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_51_57-1024x798.png 1024w, https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_51_57-300x234.png 300w, https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_51_57-768x598.png 768w, https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_51_57.png 1421w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>One sitemap can mean many files<\/strong><\/p>\n\n\n\n<p>A sitemap address does not always lead to a list of pages. It can point to an index containing separate maps for articles, services, categories, or other sections.<\/p>\n\n\n\n<p>The importer follows those nested maps and combines their URLs into one snapshot. It also supports compressed sitemap files and multiple starting maps for the same company.<\/p>\n\n\n\n<p>This became an important part of the build. A monitor can appear to work while quietly missing most of a website if it reads only the first file.<\/p>\n\n\n\n<p><strong>There are two different versions of \u201crecent\u201d<\/strong><\/p>\n\n\n\n<p>A page discovered today may have existed for months. A page that appeared in yesterday\u2019s scan may report a modification date from this morning.<\/p>\n\n\n\n<p>Those are different events, so the feed keeps separate dates for first discovery and the modification time supplied by the sitemap. It also records when an update was detected.<\/p>\n\n\n\n<p>The interface lets you sort by those dates and apply a time filter to the selected one.<\/p>\n\n\n\n<p>This makes it possible to ask more precise questions: what has the tool recently discovered, or what does the website say it recently changed?<\/p>\n\n\n\n<p>Neither date should automatically be treated as a publication date.<\/p>\n\n\n\n<p><strong>Most of the interface is about reducing noise<\/strong><\/p>\n\n\n\n<p>Collecting URLs quickly creates a second problem: deciding which ones deserve attention.<\/p>\n\n\n\n<p>The current version has three small controls that make the feed easier to use.<\/p>\n\n\n\n<p>A new-page marker can be cleared after review. A hide action removes an unhelpful URL from the normal feed and keeps it hidden through later updates. A heart saves an interesting page to a separate collection.<\/p>\n\n\n\n<p>Saved links remain accessible even if the page later disappears from the sitemap. That preserves the research reference, although it does not guarantee the original page will remain available.<\/p>\n\n\n\n<p>These controls help turn a stream of changes into a manageable reading list.<\/p>\n\n\n\n<p><strong>Checking less often<\/strong><\/p>\n\n\n\n<p>Once the watchlist grew, repeatedly scanning the same sources added little value.<\/p>\n\n\n\n<p>Checks now have a minimum interval of twelve hours per competitor. The limit applies to manual requests, automatic checks, and scheduled runs. Recently checked sources are skipped before their sitemaps are downloaded again.<\/p>\n\n\n\n<p>For this version, that is a practical balance between noticing changes and repeatedly processing the same data.<\/p>\n\n\n\n<p><strong>What the signals actually mean<\/strong><\/p>\n\n\n\n<p>Sitemap data has limits. Some websites omit modification dates. Others update them broadly, including after changes that have little editorial significance. A newly discovered URL may be an old page that was only recently added to the map.<\/p>\n\n\n\n<p>The tool currently compares URLs and reported dates. It does not compare page text or establish why a company made a change.<\/p>\n\n\n\n<p>A group of new pages about one industry might suggest a new commercial focus. It might also be a routine content project. The feed provides a reason to investigate; the interpretation still requires context.<\/p>\n\n\n\n<p>The working prototype now has the core loop: collect, compare, review, hide, and save. The next question is how much useful research that loop produces over time\u2014and whether the saved discoveries help reveal patterns that occasional browsing would miss.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Checking competitor websites is easy to start and difficult to maintain. You open a few tabs, look through service pages,&hellip;<\/p>\n","protected":false},"author":1,"featured_media":770,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[878],"tags":[],"class_list":["post-768","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-in-progress-build"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Building a Small Radar for Competitor Websites - Inside the Lab<\/title>\n<meta name=\"description\" content=\"A sitemap-based monitoring tool that turns new and updated competitor pages into a research feed\u2014with saved links, persistent hiding, and a few lessons about noisy data.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a Small Radar for Competitor Websites - Inside the Lab\" \/>\n<meta property=\"og:description\" content=\"A sitemap-based monitoring tool that turns new and updated competitor pages into a research feed\u2014with saved links, persistent hiding, and a few lessons about noisy data.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/\" \/>\n<meta property=\"og:site_name\" content=\"Inside the Lab\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-01T09:55:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-01T09:55:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_54_49.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Yevhen D.\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yevhen D.\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/\",\"url\":\"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/\",\"name\":\"Building a Small Radar for Competitor Websites - Inside the Lab\",\"isPartOf\":{\"@id\":\"https:\/\/basein.dev\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_54_49.png\",\"datePublished\":\"2026-11-01T09:55:21+00:00\",\"dateModified\":\"2026-11-01T09:55:22+00:00\",\"author\":{\"@id\":\"https:\/\/basein.dev\/blog\/#\/schema\/person\/e1073793a1beab22e3970c5639ed44f3\"},\"description\":\"A sitemap-based monitoring tool that turns new and updated competitor pages into a research feed\u2014with saved links, persistent hiding, and a few lessons about noisy data.\",\"breadcrumb\":{\"@id\":\"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/#primaryimage\",\"url\":\"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_54_49.png\",\"contentUrl\":\"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_54_49.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/basein.dev\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building a Small Radar for Competitor Websites\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/basein.dev\/blog\/#website\",\"url\":\"https:\/\/basein.dev\/blog\/\",\"name\":\"Inside the Lab\",\"description\":\"Experiments, systems, and monetization in motion.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/basein.dev\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/basein.dev\/blog\/#\/schema\/person\/e1073793a1beab22e3970c5639ed44f3\",\"name\":\"Yevhen D.\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/basein.dev\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2025\/05\/avatar_user_1_1746891952-96x96.jpeg\",\"contentUrl\":\"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2025\/05\/avatar_user_1_1746891952-96x96.jpeg\",\"caption\":\"Yevhen D.\"},\"description\":\"Business Ideas \u2022 Software ecosystems \u2022 Online business \u2022 Marketplaces \u2022 Digital Products \u2022 Startups \u2022 SaaS Tips for beginners and experienced businessmen. We help in the study of useful and effective tools for online business. Tips and guides for the services you use or would like to use. We are experts in online business, or at least our experience allows us to talk about many interesting things :)\",\"sameAs\":[\"https:\/\/basein.dev\/blog\/\"],\"url\":\"https:\/\/basein.dev\/blog\/author\/shopexpertfy\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building a Small Radar for Competitor Websites - Inside the Lab","description":"A sitemap-based monitoring tool that turns new and updated competitor pages into a research feed\u2014with saved links, persistent hiding, and a few lessons about noisy data.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/","og_locale":"en_US","og_type":"article","og_title":"Building a Small Radar for Competitor Websites - Inside the Lab","og_description":"A sitemap-based monitoring tool that turns new and updated competitor pages into a research feed\u2014with saved links, persistent hiding, and a few lessons about noisy data.","og_url":"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/","og_site_name":"Inside the Lab","article_published_time":"2026-11-01T09:55:21+00:00","article_modified_time":"2026-11-01T09:55:22+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_54_49.png","type":"image\/png"}],"author":"Yevhen D.","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Yevhen D.","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/","url":"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/","name":"Building a Small Radar for Competitor Websites - Inside the Lab","isPartOf":{"@id":"https:\/\/basein.dev\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/#primaryimage"},"image":{"@id":"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/#primaryimage"},"thumbnailUrl":"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_54_49.png","datePublished":"2026-11-01T09:55:21+00:00","dateModified":"2026-11-01T09:55:22+00:00","author":{"@id":"https:\/\/basein.dev\/blog\/#\/schema\/person\/e1073793a1beab22e3970c5639ed44f3"},"description":"A sitemap-based monitoring tool that turns new and updated competitor pages into a research feed\u2014with saved links, persistent hiding, and a few lessons about noisy data.","breadcrumb":{"@id":"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/#primaryimage","url":"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_54_49.png","contentUrl":"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2026\/11\/\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f-ChatGPT-1-\u043b\u0438\u0441\u0442.-2026-\u0440.-11_54_49.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/basein.dev\/blog\/2026\/11\/01\/building-a-small-radar-for-competitor-websites\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/basein.dev\/blog\/"},{"@type":"ListItem","position":2,"name":"Building a Small Radar for Competitor Websites"}]},{"@type":"WebSite","@id":"https:\/\/basein.dev\/blog\/#website","url":"https:\/\/basein.dev\/blog\/","name":"Inside the Lab","description":"Experiments, systems, and monetization in motion.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/basein.dev\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/basein.dev\/blog\/#\/schema\/person\/e1073793a1beab22e3970c5639ed44f3","name":"Yevhen D.","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/basein.dev\/blog\/#\/schema\/person\/image\/","url":"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2025\/05\/avatar_user_1_1746891952-96x96.jpeg","contentUrl":"https:\/\/basein.dev\/blog\/wp-content\/uploads\/2025\/05\/avatar_user_1_1746891952-96x96.jpeg","caption":"Yevhen D."},"description":"Business Ideas \u2022 Software ecosystems \u2022 Online business \u2022 Marketplaces \u2022 Digital Products \u2022 Startups \u2022 SaaS Tips for beginners and experienced businessmen. We help in the study of useful and effective tools for online business. Tips and guides for the services you use or would like to use. We are experts in online business, or at least our experience allows us to talk about many interesting things :)","sameAs":["https:\/\/basein.dev\/blog\/"],"url":"https:\/\/basein.dev\/blog\/author\/shopexpertfy\/"}]}},"_links":{"self":[{"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/posts\/768","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/comments?post=768"}],"version-history":[{"count":1,"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/posts\/768\/revisions"}],"predecessor-version":[{"id":771,"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/posts\/768\/revisions\/771"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/media\/770"}],"wp:attachment":[{"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/media?parent=768"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/categories?post=768"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/basein.dev\/blog\/wp-json\/wp\/v2\/tags?post=768"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}