---
title: Enrich Brand
api: POST /brands/{brand_id}/enrich/brand
description: "Crawl the brand website to extract trust signals, services, certifications, and identify content gaps."
---

> **For AI agents:** the complete documentation index is at [llms.txt](https://docs.boringmarketing.com/llms.txt). Append `.md` to any page URL for its markdown version.

Crawls up to 30 pages of the brand's website. Extracts structured identity information and generates brand findings categorized by type and severity.

**Duration:** 3-8 minutes.

## Path parameters

<ParamField path="brand_id" type="string" required>
  The brand UUID.
</ParamField>

## Response (202 Accepted)

```json
{
  "run_id": "run-uuid",
  "status": "queued"
}
```

After completion, brand findings are available via `GET /brands/{id}/insights`.

## What it produces

- **Brand identity:** services, differentiators, trust signals, testimonials, certifications
- **Brand findings:** classified as `trust_gap`, `eeat_gap`, `content_gap`, or `technical_gap` with severity
- **Brand pages:** crawled content stored for reuse by brief generation (no duplicate crawls)

## Example

```bash
curl -X POST \
  -H "X-API-Key: $BM_API_KEY" \
  https://api.boringmarketing.com/brands/$BRAND_ID/enrich/brand
```

<Tip>
Run enrichment before discovery for the best results. Brand context improves family seed generation and opportunity scoring.
</Tip>

## Errors

| Status | Meaning |
|---|---|
| `404` | Brand not found, or not owned by the caller. |
| `409` | Returned when **(a)** another `brand_enrichment` run is already active for this brand, or **(b)** a `full` (`/analyze`) run is currently writing to all tables. Other partial runs do **not** block this endpoint. Response carries an `X-Running-Run-Id` header with the existing run's UUID. Active runs older than 15 minutes are auto-expired before the conflict check. |
| `422` | `brand_id` is not a valid UUID. |
