# Bulk scans (/docs/tracking/bulk-scans)



A bulk scan accepts up to 25 prompts and runs every prompt against every selected engine. It supports `chatgpt`, `claude`, and `gemini`; use a live [visibility check](/docs/ai-visibility/live-checks) for Perplexity.

## Start a scan [#start-a-scan]

```bash
curl -X POST https://api.trackee.dev/v1/scans \
  -H "x-access-key: YOUR_ACCESS_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "brand": "Acme",
    "brandId": "BRAND_ID",
    "prompts": [
      "What is the best project management software?",
      "Which project management tool is best for startups?"
    ],
    "engines": ["chatgpt", "claude", "gemini"],
    "competitors": ["Linear", "Asana"],
    "sentiment": true
  }'
```

Bulk scans cost 5 credits per prompt-and-engine check, plus 1 when sentiment is enabled. Trackee charges the full grid when the scan starts. The example has six checks and costs 36 credits.

## Poll for completion [#poll-for-completion]

The create response contains `data.id` and normally starts in a pending state. Poll until `data.done` is `true`:

```bash
curl https://api.trackee.dev/v1/scans/SCAN_ID \
  -H "x-access-key: YOUR_ACCESS_KEY"
```

Polling is free and advances the scan by collecting newly ready results. Read `data.progress` for completed, failed, and pending counts.

If you include `brandId`, completed checks become brand snapshots. Without it, the scan still retains its own results but does not add them to brand history.

List recent scans with `GET /v1/scans`. See the [Scans API reference](/docs/api/scans/createScan) for schemas and pagination.
