> ## Documentation Index
> Fetch the complete documentation index at: https://deepline.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Deepline Native: Domain Health Check

> Checking whether a company domain resolves, follows redirects to a canonical domain, returns 404/410, or is merely blocked by Cloudflare/Akamai before running.

Checking whether a company domain resolves, follows redirects to a canonical domain, returns 404/410, or is merely blocked by Cloudflare/Akamai before running.

> [!NOTE]
>
> Tool ID: `domain_health_check`

## Run this action

Use the TypeScript SDK for one call. Use `ctx.tools.execute(...)` inside a Play for durable calls, scheduled calls, or CSV processing.

```ts theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
import { Deepline } from 'deepline';

const deepline = await Deepline.connect();
const result = await deepline.tools.execute(
  'domain_health_check',
  {
    "domain": "example.com"
  },
);

console.log(result.toolResponse.raw);
```

### CLI

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline tools execute domain_health_check --input '{
  "domain": "example.com"
}' --json
```

## Example response

The SDK returns this shape at `result.toolResponse.raw`. The example values illustrate the response.

```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
{
  "input_domain": "example.com",
  "input_url": "https://example.com",
  "status": "live",
  "http_status": 1,
  "final_url": "https://example.com",
  "final_domain": "example.com",
  "redirected": true,
  "canonical_url": "https://example.com",
  "page_title": "example",
  "response_server": "example",
  "protection_detected": true,
  "attempts": [
    {
      "method": "HEAD",
      "url": "https://example.com",
      "status": 1,
      "location": "example",
      "error": "example"
    }
  ]
}
```

Use `deepline describe domain_health_check --json` for the latest machine-readable contract.

## Input reference

Check whether a domain resolves to a live website, follows redirects to a canonical domain, or returns a not-found/unreachable status. Use before company contact search to catch stale domains such as old .io domains that moved to .com.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `payload.domain` | `string` | Yes | — | Domain or URL to probe. The action normalizes to a root hostname, tries HTTPS then HTTP, follows redirects, and refuses localhost/private IP targets. Minimum length: 1. |
| `payload.timeout_ms` | `integer` | No | `5000` | Per-request timeout in milliseconds. Minimum: 1000. Maximum: 10000. |
| `payload.fallback_get` | `boolean` | No | `false` | When true, retry with GET only when HEAD is explicitly unsupported (405/501). The probe never retries GET after Cloudflare/protection blocks. |

<details>
  <summary>Show raw input schema</summary>

  ### Input JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Check whether a domain resolves to a live website, follows redirects to a canonical domain, or returns a not-found/unreachable status. Use before company contact search to catch stale domains such as old .io domains that moved to .com.",
    "properties": {
      "domain": {
        "type": "string",
        "description": "Domain or URL to probe. The action normalizes to a root hostname, tries HTTPS then HTTP, follows redirects, and refuses localhost/private IP targets.",
        "minLength": 1
      },
      "timeout_ms": {
        "type": "integer",
        "description": "Per-request timeout in milliseconds.",
        "default": 5000,
        "minimum": 1000,
        "maximum": 10000
      },
      "fallback_get": {
        "type": "boolean",
        "description": "When true, retry with GET only when HEAD is explicitly unsupported (405/501). The probe never retries GET after Cloudflare/protection blocks.",
        "default": false
      }
    },
    "required": [
      "domain"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Output reference

Domain health and redirect resolution result. `final_domain` is the value to prefer as `canonical_domain` when status is live or redirected.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `result.input_domain` | `string` | Yes | — | — |
| `result.input_url` | `string` | Yes | — | — |
| `result.status` | `"live" \| "redirected" \| "not_found" \| "blocked" \| "server_error" \| "unreachable" \| "invalid"` | Yes | — | Allowed: `live`, `redirected`, `not_found`, `blocked`, `server_error`, `unreachable`, `invalid`. |
| `result.http_status` | `integer` | Yes | — | — |
| `result.final_url` | `string` | Yes | — | — |
| `result.final_domain` | `string` | Yes | — | — |
| `result.redirected` | `boolean` | Yes | — | — |
| `result.canonical_url` | `string` | Yes | — | — |
| `result.page_title` | `string` | Yes | — | — |
| `result.response_server` | `string` | Yes | — | — |
| `result.protection_detected` | `boolean` | Yes | — | True when response headers indicate Cloudflare, Akamai, or similar edge protection. Treat blocked protected domains as reachable, not as not-found. |
| `result.attempts` | `array` | Yes | — | — |
| `result.attempts[].method` | `"HEAD" \| "GET"` | Yes | — | Allowed: `HEAD`, `GET`. |
| `result.attempts[].url` | `string` | Yes | — | — |
| `result.attempts[].status` | `integer \| null` | Yes | — | — |
| `result.attempts[].location` | `string \| null` | Yes | — | — |
| `result.attempts[].error` | `string \| null` | Yes | — | — |

<details>
  <summary>Show raw output schema</summary>

  ### Output JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Domain health and redirect resolution result. `final_domain` is the value to prefer as `canonical_domain` when status is live or redirected.",
    "properties": {
      "input_domain": {
        "type": "string"
      },
      "input_url": {
        "type": [
          "string",
          "null"
        ]
      },
      "status": {
        "type": "string",
        "enum": [
          "live",
          "redirected",
          "not_found",
          "blocked",
          "server_error",
          "unreachable",
          "invalid"
        ]
      },
      "http_status": {
        "type": [
          "integer",
          "null"
        ]
      },
      "final_url": {
        "type": [
          "string",
          "null"
        ]
      },
      "final_domain": {
        "type": [
          "string",
          "null"
        ]
      },
      "redirected": {
        "type": "boolean"
      },
      "canonical_url": {
        "type": [
          "string",
          "null"
        ]
      },
      "page_title": {
        "type": [
          "string",
          "null"
        ]
      },
      "response_server": {
        "type": [
          "string",
          "null"
        ]
      },
      "protection_detected": {
        "type": "boolean",
        "description": "True when response headers indicate Cloudflare, Akamai, or similar edge protection. Treat blocked protected domains as reachable, not as not-found."
      },
      "attempts": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "method": {
              "type": "string",
              "enum": [
                "HEAD",
                "GET"
              ]
            },
            "url": {
              "type": "string"
            },
            "status": {
              "type": [
                "integer",
                "null"
              ]
            },
            "location": {
              "type": [
                "string",
                "null"
              ]
            },
            "error": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "method",
            "url",
            "status",
            "location",
            "error"
          ],
          "additionalProperties": false
        }
      }
    },
    "required": [
      "input_domain",
      "input_url",
      "status",
      "http_status",
      "final_url",
      "final_domain",
      "redirected",
      "canonical_url",
      "page_title",
      "response_server",
      "protection_detected",
      "attempts"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Deepline cost

* Pricing model: `fixed` (per call).
* Estimated Deepline credits: `0` per pricing unit.
* Provider-native pricing may still exist outside Deepline credit billing.

## Related documentation

* [SDK V2 quickstart](https://deepline.com/docs/sdk-v2/quickstart.md)
* [SDK reference](https://deepline.com/docs/sdk-v2/sdk-reference.md)
* [Run tools across a CSV](https://deepline.com/docs/sdk-v2/batch-csv.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.