Request demo

Domain Search

Pivot From One Indicator to the Domains That Share It.

Investigations rarely start with the answer. They start with an IP, a mail server, a registrant email or a name that looks wrong, and work outward.

Domain Search filters Deepinfo’s domain index on all the layers of a domain’s record, and the finders pivot from a single indicator in one call. Each result is a full domain record, so the next pivot starts from what you just found.

IP 203.0.113.24

  1. Reverse IP GET /discovery/reverse-ip
    • staging.acme.example (the next pivot starts here)
      • WHOIS
      • DNS
      • IP history 203.0.113.24 · 198.51.100.7
      • SSL self-signed
      • Web data
    • partner-portal.example
  2. Reverse MX GET /discovery/reverse-mx
    • acme-mail.example
    • shop.acme.example

Export JSON / CSV

Filters Go In and Domain Records Come Out.

One body carries all the conditions. All must conditions have to match, at least one should condition has to match, and nothing in must_not may match.

POST https://api.deepinfo.com/v1/discovery/domain-search Reference
ParameterTypeDescription
filtersobjectOptionalIn the body. Conditions under must, should and must_not, each a field name, an operator type and a value.
sortarrayOptionalIn the body. One or more {field, order} pairs.
pageintegerOptionalPage number, from 1.
page_sizeintegerOptionalResults per page.
exportbooleanOptionalExport the results instead of paging through them.
export_formatstringOptionaljson or csv.
export_scopestringOptionalHow much of each record to export: basic, default or extended.

Request

curl -X POST \
  "https://api.deepinfo.com/v1/discovery/domain-search?page_size=25" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "filters": {
    "must": [
      { "name": "domain",
        "type": "eq", "value": "acme.example" }
    ],
    "should": [
      { "name": "ssl.signature.is_self_signed",
        "type": "eq", "value": true },
      { "name": "ssl.signature.is_valid",
        "type": "eq", "value": false }
    ]
  },
  "sort": [
    { "field": "ssl_last_change_date", "order": "desc" }
  ]
}'

Response

200 OK · application/json
{
  "page": 1,
  "page_size": 25,
  "result_count": 2,
  "results": [
    {
      "punycode": "staging.acme.example",
      "unicode": "staging.acme.example",
      "is_idn": false,
      "type": 2,
      "domain": { "…": "the parent domain: name, WHOIS, DNS" },
      "dns": { "a": { "ip_addresses": ["203.0.113.24"] }, "…": "…" },
      "ip_history": ["203.0.113.24", "198.51.100.7"],
      "ssl": {
        "issuer": { "common_name": "staging.acme.example", "…": "…" },
        "signature": { "is_self_signed": true, "…": "…" },
        "…": "fqdns, validity, fingerprint, extensions"
      },
      "webdata": { "…": "…" }
    },
    "…"
  ]
}

Browse the Fields Family by Family.

Several fields come in two forms, one for the name itself and one for its registered domain, such as dns.a.ip_addresses and domain.dns.a.ip_addresses, so a filter can target a host’s own records or its parent’s.

Name and extensionName, extension and extension type, length, language, keywords, digits and hyphens, internationalized and confusable characters
SubdomainSubdomain label, first and last label, nesting depth, length
WHOISRegistrar, creation, update and expiry dates, registrant organization and country, name servers, status codes, privacy, past registrant emails
DNSA, AAAA, NS, MX, SOA, TXT, CNAME and other record values, each with its update date, plus when DNS last changed
IP historyEvery IP address the name, or its domain, has resolved to
SSLIssuer, subject, alternative names, validity dates and length, SHA-256, SHA-1 and MD5 fingerprints, self-signed and signature flags
Web data and HTTPConnection status, first and last status codes, redirect chain, final URL, security headers, cookies, page hashes

Operators follow the field type: gte and lte take numbers and dates, contains_any and contains_all take array fields. The Domain Search reference lists the fields under Filtering.

Operators Match and Clauses Combine.

Operators decide how one condition matches. Clauses decide how conditions combine: all of must, at least one should, none of must_not.

Together they fit a whole investigation into one body. Every domain on one name server, registered this year, with mail servers, excluding the domains you own, is four conditions.

filter.json
{
  "filters": {
    "must": [
      { "name": "dns.ns.name_servers",
        "type": "eq",
        "value": "ns1.hosting.example" },
      { "name": "domain.whois.create_date",
        "type": "gte", "value": "2026-01-01T00:00:00Z" },
      { "name": "dns.mx.mail_servers",
        "type": "exists", "value": true }
    ],
    "must_not": [
      { "name": "domain", "type": "in",
        "value": ["acme.example",
          "acme-group.example"] }
    ]
  }
}
  1. On one name server ({ name: dns.ns.name_servers, type: eq, value: ns1.hosting.example })
  2. Registered this year ({ name: domain.whois.create_date, type: gte, value: 2026-01-01T00:00:00…)
  3. With mail servers ({ name: dns.mx.mail_servers, type: exists, value: true })
  4. Not a domain you own ({ name: domain, type: in, value: [acme.example, acme-group.example] })
eq, inThe exact value, or any of several
startswith, endswithA prefix or a suffix, such as hosts that start with login.
wildcardA pattern, with ? for one character and * for any run
fuzzyAn approximate match, for names a few characters away from a brand
contains_any, contains_allArray fields that hold any, or all, of the values
gte, lteNumbers and dates, alone or as a range
existsA field that has a value, or has none

Each Pivot in One Call.

When the question starts from a single indicator, a finder is shorter than a search. Each returns full domain records and exports like a search.

FinderStarts fromOptions
Reverse IPAn IP addressmask of 8, 16 or 24 widens the match to the address’s network
Reverse MXA mail serverapex matches all mail servers under that domain
Reverse NSA name serverapex matches all name servers under that domain
Reverse WHOIS EmailA registrant emailapex matches any address at the email’s domain
Same-Time RegisteredA domainSame registrant, within interval minutes: 1 to 60, default 5
Associated DomainsA domainassociation picks the shared signals: registrant email, organization or phone, name servers, IP, mail servers, SSL organization. strict requires all of them
Subdomain FinderA domainAll known subdomains
All TLDsA domainThe name under other extensions

All finders take page, page_size, ordering and the export parameters, and all except Subdomain Finder take include_subdomains. See the Discovery reference.

Common Investigations Take One Request Each.

Each is one Domain Search body, built from the fields above. The API sample at the top of this page is the weak-certificate search.

Weak Certificates Under Your Domain

Hosts under one domain whose certificate is self-signed or fails signature validation, most recent change first.

Live Sites Without HSTS

Sites with a success connection status and no strict_transport_security header in the response.

Missing Clickjacking Protection

Sites that answered with neither an X-Frame-Options header nor a Content Security Policy.

Redirects to Another Site

Names whose first response is a 301 or 302 that sends visitors to a different site.

Look-Alikes That Take Mail

fuzzy on domain.name, created since a date, dns.mx.mail_servers present, your domain in must_not.

Confusable Internationalized Names

Names where is_idn and name.contains_confusable are both true: the raw material of homoglyph lookalikes.

Questions About Domain Search

When should we use a finder instead of Domain Search?

Use a finder when the question starts from one indicator, such as an IP, a mail server, a registrant email or a domain. Use Domain Search when you are describing a set of domains by several properties at once.

What is a domain record?

The unit that searches and finders return: the name and its analysis (language, keywords, internationalized and confusable flags), WHOIS with normalized and historical fields, DNS by record type, IP history, the SSL certificate and web data. Domain Detail returns the same record for a single domain.

Does Domain Search cover subdomains?

Yes. The index holds registered domains and the hostnames under them, and the type field tells them apart. The Subdomain family filters on the labels themselves, and domain returns every name under one registered domain.

How current is a domain record?

Each DNS value carries its own update date, and the record notes when DNS and the certificate last changed. For the answer as it stands right now, run an Instant Lookup on the result.

Can we find domains registered behind a privacy service?

Yes, through every layer except the hidden registrant: DNS, certificates, IP history and web data still describe them, and WHOIS privacy is itself a searchable field. A registrant that a privacy service hides can’t be matched in a reverse WHOIS search.

Can we export the results?

Yes. Add export=true with export_format (json or csv) and export_scope (basic, default or extended) to Domain Search or to any finder.

Bring an Indicator. We’ll Pivot It Live.

Book a demo with an IP, a mail server, a registrant email or a brand name your team is watching. We run the searches and pivots with you, on the real index.