Obscura

Technographics

Web technologies detected on each company's homepage, such as analytics, advertising, commerce and hosting vendors.

technographics — the dataset name to pass to the Obscura API.

Category Corporate Columns 7 Refresh Daily Entity key ticker Point-in-time available_date

What one row means

One (domain, technology) pairing observed on a single company's homepage — e.g. 'restorationhardware.com' runs 'Google Analytics' — detected by the technographics collector fetching the homepage HTML over HTTPS and matching a marker substring for that technology against the lowercased page source. Builds on the crt.sh/subdomain web footprint; keyless (just an HTTP GET of the homepage).

One row per (domain, technology).

Point-in-time availability

Every Obscura dataset carries available_date: the calendar day the publisher made the row available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the same thing on every dataset in the catalog.

For technographics: snapshot: available_date = captured_date, a STORED GENERATED column (migration 000205). WHY THAT IS THE DAY IT BECAME AVAILABLE: there is no upstream publisher of the fact 'company X uses tool Y' — nobody announces it and no archive holds it. The fact is created by our own scan, so the day the scanner first fetched the homepage and matched the fingerprint IS the day the fact became knowable, and no earlier date could be claimed without inventing one. captured_date is deliberately excluded from the upsert's update_columns, so a re-scan that re-confirms the pair does not bump it; last_seen carries the re-confirmation and the two together bracket the observed interval of use.

Refresh cadence

Obscura refreshes technographics daily — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.

Schema — 7 columns

The full public column list for technographics, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/technographics.

ColumnTypeDescription
domaintext · not nullRegistered (eTLD+1) domain the homepage was fetched from, e.g. 'restorationhardware.com'. Normalized via `crt_subdomains::registered_domain`, which strips scheme/subdomain/path down to the registrable domain. Half of the composite primary key; a domain recurs across one row per detected technology.
technologytext · not nullHuman-readable product name of the detected third-party technology, e.g. 'Google Analytics', 'HubSpot', 'Stripe', 'WordPress' — taken verbatim from the `tech` field of the static FINGERPRINTS table in technographics.rs. Other half of the composite primary key.
tickertextNullable stock ticker of the company owning the domain, resolved from our internal common-stock equity universe at scan time via the (ticker, homepage) mapping; refreshed on every re-scan so a ticker change (e.g. after a reorg) overwrites the prior value for that domain/technology pair.
categorytext · not nullTechnology's functional bucket, one of 12 static values in the current fingerprint set: ads, analytics, cdn, cms, ecommerce, martech, monitoring, payments, support, survey, tag-manager, testing. Taken from the `category` field of the matching Fingerprint entry; refreshed on re-scan.
captured_datedate · not nullThe day the scanner FIRST fetched this domain's homepage and matched this technology's fingerprint — UTC calendar date of the scan at first insert. Deliberately excluded from the ON CONFLICT update_columns list so subsequent re-scans that re-confirm the same (domain, technology) pair do NOT bump it; it is a true first-seen marker, distinct from last_seen. available_date is generated directly from this column, because nobody publishes 'company X uses tool Y' and the fact exists only from the moment our scan established it.
last_seendate · not nullUTC calendar date of the most recent scan that re-confirmed this (domain, technology) pairing on the homepage. Set to `today` on every insert AND every conflict update, so it advances forward on each re-detection while captured_date stays fixed at first detection — the pair (captured_date, last_seen) brackets the full observed interval of use.
available_datedatePUBLIC-availability date = captured_date. STORED GENERATED column (migration 000205), read-only; the point-in-time column to filter and join on. It is the day our scanner first detected the pairing, because no upstream publisher discloses it and the fact has no earlier knowable date.

Access technographics

Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.

import obscura

client = obscura.Client("obs_live_…")

df = client.query(
    dataset="technographics",
    symbols=["NVDA", "AAPL"],
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the technographics dataset?

Web technologies detected on each company's homepage, such as analytics, advertising, commerce and hosting vendors. One (domain, technology) pairing observed on a single company's homepage — e.g. 'restorationhardware.com' runs 'Google Analytics' — detected by the technographics collector fetching the homepage HTML over HTTPS and matching a marker substring for that technology against the lowercased page source. Builds on the crt.sh/subdomain web footprint; keyless (just an HTTP GET of the homepage).

How do I avoid look-ahead bias with technographics?

Filter on technographics.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — snapshot: available_date = captured_date, a STORED GENERATED column (migration 000205). WHY THAT IS THE DAY IT BECAME AVAILABLE: there is no upstream publisher of the fact 'company X uses tool Y' — nobody announces it and no archive holds it. The fact is created by our own scan, so the day the scanner first fetched the homepage and matched the fingerprint IS the day the fact became knowable, and no earlier date could be claimed without inventing one. captured_date is deliberately excluded from the upsert's update_columns, so a re-scan that re-confirms the pair does not bump it; last_seen carries the re-confirmation and the two together bracket the observed interval of use. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.

In what formats can I get technographics?

As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="technographics". The column schema is public at https://api.obscura.trade/v1/catalog/technographics.

Can I filter technographics by company or symbol?

Yes. technographics carries ticker, the column the API's symbols filter resolves against.

How often is technographics updated?

Obscura refreshes technographics on a daily schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.

Related datasets

Board InterlocksPairs of public companies that share a director, reconstructed from SEC insider filings: one row per (director, company … Company SubsidiariesParent-and-subsidiary lists taken from the Exhibit 21 that public companies attach to their annual report. Domain SubdomainsSubdomains discovered for each public company's domains through Certificate Transparency logs (crt.sh). Employee CountsEmployee headcount as stated in the text of 10-K annual reports. Executive CompensationExecutive pay from the Pay-versus-Performance table in proxy statements: reported and 'actually paid' compensation for t… Governance EventsGovernance events distilled from company 8-K filings and tagged by type: executive changes, auditor changes, restatement… Insider SentimentMonthly insider buying and selling per company, netted from Form 4 open-market trades: shares and dollars bought versus … Job PostingsOpen job-posting counts for a curated set of companies, captured over time.