Open-source competitive intelligence: from a public link to the operator behind it
My own tooling, not a client project. Starting from a single public ad link, the technical chain gets reconstructed in 30-60 minutes: what the infrastructure runs on, which tracker serves it, and who stands behind it. Free public sources only — not a single paid subscription. Plus a separate rulebook that exists because the methodology caught a mistake of my own.
The link is public and yet tells you nothing
You see a competitor's ad link, or a link in an email from a prospective counterparty. It's public — and it answers none of the practical questions on its own. Where does it actually lead? Between the click and the final page sits a filter that serves a neutral placeholder to anyone who doesn't look like the intended visitor. Who owns it? Domain registration is hidden behind a privacy provider. Which tracker serves it? Nowhere stated — platforms don't sign their work.
The commercial answer is paid subscriptions: passive DNS, certificate history, infrastructure attribution. That's hundreds of dollars a month, and it still covers only part of the question. A service will show you neighbouring domains, but it won't tell you which tracker sits inside, nor whether that adjacency means shared ownership at all.
The second place this work breaks isn't data collection — it's the discipline of the conclusion. Gathering signals is easy. Over-reading them is just as easy: spot a shared intermediate service in two different chains and declare them one operation. That conclusion is worse than no conclusion — it looks well-founded, and people make decisions on it.
Twelve steps, two scripts, and discipline about conclusions
The methodology has two halves, and the second one matters more. First: collection — reproducible, scripted, leaving artifacts behind. Second: rules of interpretation — which signal proves an owner, and which one shows up across hundreds of unrelated operators and proves nothing at all.
WHOIS: registrar, domain creation date, privacy provider, name servers
DNS records A / NS / SOA / MX / TXT, certificate SANs, crt.sh history
HEAD request: server headers, X-Powered-By, cookie naming patterns
The real redirect chain, requested with a genuine visitor's parameters
Public scans, passive DNS, the web archive: what others saw before you
Collection collapsed into one command
The
01-recon.sh
script takes a domain and, in a single pass, runs WHOIS, DNS, certificate parsing, historical
enumeration from certificate transparency, a HEAD request, public scans, passive DNS and the web
archive. Each step lands as its own file in a working directory — an artifact you can return to,
attach to a conclusion, and diff against a re-run of the same domain a month later. Intelligence
that exists only in the analyst's terminal isn't intelligence.
The live click is a separate script — on purpose
The serving filter hands a neutral page to anyone who doesn't look like the intended visitor: wrong
region, wrong device class, wrong referring source. So
02-live-click.sh
issues the request with a genuine visitor's parameters and captures everything the hop exposes:
- the full redirect chain — every hop is a separate domain and, possibly, a separate party
Set-Cookieat each hop — cookie names identify a platform far better than page content does- response headers per hop: web server, framework tells, CDN identifiers
- the final response with real content — the thing the whole chain exists to deliver
Keeping this in its own file isn't cosmetic. It's the only step that sends a request with a substituted referring source, and it must never go out accidentally as part of routine collection. The reasoning is written into the script's header comment so the decision outlives its author.
Identify the tracker by signature, not by name
A tracker never introduces itself. But every platform leaves a fingerprint, and the fingerprint is
more durable than anything printed on the page. The
tracker-signatures.md
reference is a "signal → platform" table that grows with every analysis:
- a service response header unique to one platform — the strongest signal, identification is instant
- cookie naming shape and structure — say, a name carrying a fixed-length hash plus a signed value
- the shape of the click URL path: where the campaign id sits, where the partner id sits
- the field set in an integration JSON payload — the key composition maps cleanly onto a platform family
- the load-balancer hostname in cloud DNS — often the operator's internal project codename
The code on the page says more about the team than the page does
A dedicated step reads the collected JS and CSS not for logic, but for traces of the authors: hard-coded service endpoints, internal entity names and — above all — comments written in a non-Latin script. One or two lines in a developer's native language narrow the candidate set more than the rest of the technical collection combined. It's a cheap step, and it's almost always skipped.
Attribution rules live in their own document, not in a closing paragraph
A chain involves several independent parties, not one: the masking layer, the tracker, an
intermediate redirect service, the end merchant. Each is a separate company, and each may serve
dozens of unrelated clients. So
attribution-rules.md
splits signals into two lists: those that prove a specific operator, and those that show up
everywhere. The conclusion is drawn from the first unique signature in the chain — not from the last
hop, and not from shared intermediate links.
Zero paid sources is a constraint, not a saving
The whole collection stands on what's available to anyone: registry whois servers, public DNS resolvers, certificate transparency, public page scans, passive DNS and the web archive. The constraint is methodologically useful: it forces you to rely on signals anyone can independently re-verify, rather than on the verdict of a closed service that can be neither challenged nor reproduced.
Tools that are already on every machine
The whole collection is a plain shell script — no dependencies, no install step
Registrar, domain creation date, privacy provider, name servers — the first filter
The DNS map: hosting, mail, third-party service verifications
Certificate SANs — every adjacent domain issued under one certificate
Certificate transparency: historical subdomain and related-name enumeration
Public scans: the full chain of loaded assets, headers and cookies
Free equivalents of paid DNS-history services
How the domain looked before — often before privacy was switched on
JSON response parsing inline in the pipe, no packages to install
Signature and attribution references are versioned alongside the scripts
A methodology that catches its own errors
from a public link to a named operator, its stack, and how the claim is verified
no paid subscription for passive DNS, certificate history or attribution
three independent analyses; each one added new signatures to the references
The most valuable result was catching my own mistake
On the third analysis the attribution was wrong at first. Two different chains converged on the same intermediate redirect service, and that looked like proof of shared ownership — a vivid, reproducible and entirely false signal. The error surfaced one step later: the response headers carried a tracker signature belonging to one specific platform and found nowhere else. The operator turned out to be a different one — and that was confirmed independently, through the public site of the platform's owner.
The rule that came out of it
Shared tools do not prove shared ownership.
That sentence went into
attribution-rules.md
together with an explicit list of signals that prove nothing while looking convincing:
- anycast addresses of a popular CDN — a shared pool across every customer on the tier
- the most popular registrar and its default privacy provider — that's popularity, not a relationship
- a third-party redirect service mid-chain — independent SaaS used by dozens of unrelated operators
- a boilerplate landing template and the standard cookie set of a popular framework
The resulting algorithm is short: find the first hop carrying a unique signature, identify the platform from it, confirm with a second independent signal — and only then name an operator. Overlap in shared infrastructure enters the write-up as supporting evidence, never as the primary claim.
What's left after three analyses
A repository with the playbook, two reusable scripts and two reference documents that grow with each new chain. Plus a delivery checklist — the fields that must be filled before a conclusion counts as finished: who the operator is, where it's publicly corroborated, what the stack is, and exactly what proves the attribution. The checklist exists for the same reason the rules do: so the analyst's confidence never substitutes for evidence.
The overall takeaway, details aside: a methodology that catches its own errors is worth more than one that is always certain. The document now answers not only "how to find out", but also "when you don't know yet".
Where else the same methodology applies
This case isn't about ad links. It's the generic task of "reconstruct who stands behind an infrastructure from one public identifier — and don't get the conclusion wrong". It comes up far more often than you'd expect:
- → Counterparty checks before a deal — domain age, the real infrastructure owner, related properties under the same certificate, history in the web archive
- → Technical competitor research — what the site is built on, which analytics and third-party services are wired in, what lived on the domain a year ago
- → Clones and phishing against your brand — a network of lookalike domains usually gives itself away through a shared certificate and shared infrastructure
- → Due diligence before buying a domain or a project — what used to be hosted there and what it's tied to through certificate history
- → Auditing your own perimeter — the same reconnaissance pointed inward: which of your subdomains and internal names are visible from outside for free
- The one-shot recon script: a domain in, a folder of per-step artifacts out
- The isolated live-click script — the risky request never leaves as part of routine collection
- A "signal → platform" reference that grows with every new analysis
- Attribution rules: an explicit split between signals that prove and signals that don't
- A delivery checklist — mandatory output fields, so the result doesn't stay in the analyst's head
If the question is "who is behind this" — the answer is usually already public
Most of the answer sits in free sources — it just has to be collected in the right order and read correctly. One chain takes 30-60 minutes; the methodology, the scripts and the references stay with you and keep working without me.
The 5,000 ₽ audit — with a concrete report and quote
I'll tell you what to deploy in your business first, what the payback looks like, and whether you need AI for the task at all (sometimes you don't).
Or just send your question — I reply within 2 hours