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

# Keyword monitoring

Verify a deploy went through, a banner is gone, or your marketing site hasn't been hijacked.

# Keyword monitoring

A keyword monitor is an HTTP monitor with a content assertion. The monitor passes if a substring is present (or absent) in the response body.

## Use cases

- **Deploy verification** — assert the response contains the new version string.
- **Hijack detection** — assert known content is still present (e.g. your company name).
- **Maintenance bypass** — alert when "we're under maintenance" stays up too long.
- **Vendor health** — assert third-party iframes / widgets render their expected content.

## Setup

Create a monitor with `type: "keyword"`:

```bash
happy monitors create \
  --name "Site contains pricing copy" \
  --type keyword \
  --url https://myapp.com/pricing \
  --keyword "$29 / month" \
  --keyword-type contains
```

| Field | Values |
|---|---|
| `keyword` | The substring to look for |
| `keyword_type` | `contains` (default) or `not_contains` |

## What the assertion runs against

The full response body, including HTML, JSON, plain text. Case-sensitive by default. For complex matches consider:

- **Status code assertion** — `expected_status_codes: [200, 201]` instead of keyword.
- **Header assertion** (HTTP type) — assert `X-Build-Version` matches.
- **Visual regression** — for visual / iframe / widget content that doesn't appear in the raw HTML (React-rendered, etc.). See [screenshots](/concepts/screenshots).

## Examples

```js
// Detect site hijack — alert if our company name is removed
{
  type: "keyword",
  url: "https://myapp.com",
  keyword: "Acme Corporation",
  keyword_type: "contains"
}

// Detect maintenance overstay — alert if we're still in maint mode
{
  type: "keyword",
  url: "https://myapp.com/api/health",
  keyword: "maintenance",
  keyword_type: "not_contains"
}
```