Skip to content

Allow this site to count your visits with Yandex Metrica? Metrica will store cookies in your browser to do this. How the site uses cookies

VC
Case 12 of 25 · Open-source intelligence (OSINT) · Research

Researching a competitor from open sources: what you can see from outside

I built this tool for my own work. From a single website address, in 30–60 minutes I get a working picture: what the product is and on what terms it's sold, what the site runs on, which outside services are connected to it, and how all of that changed over the past few years. Only free public sources are used, with no paid subscriptions. There is also a separate set of rules for drawing conclusions. It appeared after the method caught a mistake of my own.

Type
My own playbook, an internal tool
Technology
bash · whois / dig / openssl · crt.sh · URLscan
Time per analysis
30–60 minutes
Outcome
12 steps, $0 on paid data services
01 · Problem

The site is public, and it says almost nothing about itself

You open a competitor's site, or the site of a company you're about to work with. It's public, yet on its own it answers none of the practical questions. The page won't tell you how old the site is or how long it has looked this way. It won't say what it's built on or which outside services it uses: analytics, chat, payments, contact forms. It's even harder to see what was on the same domain a year ago, with which offer and at what price, and what has been removed or added since.

The usual answer is paid subscriptions for technology lookups and for domain and certificate history. They cost hundreds of dollars a month. I wanted to answer the same questions from free sources, including which technologies actually run on the page today and what changed over the past year.

The second difficulty is drawing the right conclusion. Gathering signals is easy, and reading too much into them is just as easy: you spot the same outside service on two sites and decide they're one product. Such a conclusion looks well-founded, and people make decisions based on it.

02 · Solution

Twelve steps, repeatable collection and careful conclusions

The method has two halves. The first is collection: it runs from scripts, can be repeated at any time and leaves files behind. The second is a set of rules for reading the results. They say which signal actually proves something and which one appears on hundreds of unrelated sites and proves nothing.

01
Age

WHOIS: registrar, domain creation date, name servers; how old the site really is

02
Infrastructure

DNS records (A, NS, SOA, MX, TXT), the domains listed in the certificate, certificate history on crt.sh

03
What it runs on

A HEAD request: server headers, X-Powered-By, how cookies are named

04
Product

What they sell and on what terms: offer, price, guarantees, contact forms

05
History

Public scans, passive DNS and the web archive: how the site looked before

Collection runs with one command

The 01-recon.sh script takes a domain and in one pass runs WHOIS, DNS, certificate parsing, a search of certificate history in the public certificate logs, a HEAD request, public scans, passive DNS and the web archive. Each step is saved as its own file in a working folder. You can come back to that file, attach it to a conclusion and compare it with a new run on the same domain a month later. Nobody can check an analysis that exists only in the analyst's terminal.

Opening the page is a separate step, on purpose

The first script doesn't open the page: WHOIS, DNS and archives come from outside sources, and the certificate and headers are read without loading the page. Opening the page itself is the only step that leaves a trace in the site owner's analytics, so it lives in a separate file, 02-live-click.sh, and runs only when I decide to run it. It captures exactly what the analysis is for:

  • the offer and the price on the date of the analysis, which is what your own offer will be compared with
  • contact forms: how many fields, which are required, what they promise after sending
  • the outside services the page loads: analytics, chat, payments, CDN
  • Set-Cookie and response headers, which identify the site engine quite precisely

The page is saved in full, prices included, as of the date of the analysis. Two dated copies turn "they were cheaper in spring" into a fact.

The platform is recognised by its fingerprints

A site rarely says what it's built on. But every platform leaves fingerprints, and they stay on the site when the text changes. The tracker-signatures.md reference is a "signal → platform" table that grows with every analysis:

  • a response header unique to one platform: the strongest signal, which identifies the platform at once
  • the naming and structure of cookies, which reveal both the site engine and the connected analytics
  • file paths and build file names, which show the framework and how the front end is built
  • the list of outside domains the page loads: CDN, analytics, chat, payments
  • host names in the cloud provider's DNS, which show where everything is hosted and on what

The site's code shows how the product is built

A separate step reads the collected JavaScript and CSS to see how the product is built. Service addresses written into the code show which integrations are connected. Library versions show how fresh the front end is and how often it's updated. Internal names show how the data is organised. The step is cheap, often skipped, and it explains a great deal.

The rules for conclusions are kept in a separate document

Several parties stand behind a single site: the host, a CDN, a website builder or CMS, and the connected outside services. Each of them serves dozens of unrelated clients. So attribution-rules.md splits signals into two lists: those that actually prove something, and those that show up everywhere. A conclusion is drawn only from a unique signature.

No paid sources, by design

All collection relies on sources anyone can use: registry WHOIS servers, public DNS resolvers, public certificate logs, public page scans, passive DNS and the web archive. This limit is good for the method: it makes me rely on signals that anyone can check independently.

03 · Technology

Plain command-line tools and free public services

bash + curl

All collection is a plain shell script that needs only standard command-line tools

whois

Registrar, domain creation date, name servers: how old the site really is

dig (A / NS / SOA / MX / TXT)

A map of the DNS: hosting, mail, verifications for outside services

openssl s_client + x509

The domains listed in the certificate: every related domain issued under one certificate

crt.sh

Public certificate logs: past subdomains and related names

URLscan.io API

Public scans: which files and outside services the page loads

Passive DNS (HackerTarget / OTX)

Free sources of DNS history

Wayback Machine

How the offer, prices and site structure looked one and three years ago

python3 (stdlib)

Reads JSON responses right inside the script, no packages to install

Markdown + git

The signature and conclusion references are versioned together with the scripts

bashcurlwhoisdigopensslcrt.shURLscanpassive DNSWaybackpython3git
04 · Results

A method that catches its own mistakes

Time per analysis
30–60 min

from a site address to a finished profile: offer, platform, connected services, history of changes

Data budget
$0

no paid subscription for technology lookups, DNS history or certificates

Sites analysed
3

three separate analyses; each added new signatures to the reference files

The method caught my own mistake

In the third analysis my first conclusion was wrong. Two different sites used the same outside service, and that looked like proof they were the same product. The signal was striking, repeatable and completely misleading. The error showed up one step later: the response headers carried a platform signature, and the second site had a different one. All the two sites shared was an outside service used by dozens of unrelated companies.

The rule that came out of it

Shared tools do not prove a shared team. That sentence went into attribution-rules.md together with a list of signals that look convincing and prove nothing:

  • anycast addresses of a popular CDN: one shared pool for every customer on the plan
  • the most popular registrar and its default privacy service: that only shows popularity
  • a shared outside widget (chat, form, analytics): dozens of unrelated companies install them
  • a standard landing page template and the usual cookie set of a popular framework

The resulting procedure is short: find a unique signature, identify the platform from it, confirm it with a second independent signal, and only then state a conclusion. Shared infrastructure goes into the write-up only as supporting evidence.

What I have after three analyses

A repository with the playbook, two reusable scripts and two reference documents that grow with each new analysis. There is also a delivery checklist with the fields that must be filled in before a conclusion counts as finished: what the product is, what the site runs on, which services are connected, and what exactly supports each point. The checklist exists for the same reason as the rules: so that the analyst's confidence never stands in for evidence.

In short, the method checks its own conclusions. The document now answers two questions: "how to find out" and "how to tell that you don't know yet".

05 · Where it fits

Where the same method helps

The underlying task is common: build a picture of someone else's site from one public address without drawing the wrong conclusion. It comes up in many situations:

  • → Checking a partner before a deal: domain age, what the site runs on today, related sites under the same certificate, history in the web archive
  • → Technical research on a competitor: what the site is built on, which analytics and outside services it uses, what was on the domain a year ago
  • → Copies of your site and phishing against your brand: a network of lookalike domains often gives itself away through a shared certificate and shared infrastructure
  • → Checks before buying a domain or a project: what used to be there and what it's linked to through certificate history
  • → Looking at your own company from outside: the same research pointed at yourself shows which of your subdomains and internal names anyone can see for free
What I reuse on later projects
  • The one-command collection script: a domain goes in, a folder with a file for each step comes out
  • A separate script for opening the page; the rest of the collection doesn't load the page itself
  • A "signal → platform" reference that grows with every new analysis
  • Rules for conclusions: a clear list of signals that prove something, and a list of those that prove nothing
  • A delivery checklist with required fields, so the result doesn't stay in the analyst's head
Similar challenge?

If you want to know how a competitor does it, the answer is often already public

Much of the answer is in free sources. It has to be collected in the right order and read correctly. One site takes 30–60 minutes. The method, the scripts and the reference files stay with you and keep working without me.