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

# Track outreach campaigns

> Create an outreach list, add contacts, update statuses, and filter by response.

This walkthrough sets up a cold outreach tracker using lists. You'll create a list with a status field, add contacts to it, update statuses as responses come in, and query entries by status.

## Prerequisites

You need a Contacts object type. If you don't have one:

```bash theme={null}
npx supersonic-cli objects create \
  --name "Contacts" \
  --slug "contacts" \
  --fields '[
    {"name": "Name", "field_type": "text", "required": true},
    {"name": "Email", "field_type": "text"},
    {"name": "Company", "field_type": "text"},
    {"name": "Title", "field_type": "text"}
  ]'
```

<Steps>
  <Step title="Create the outreach list">
    ```bash theme={null}
    npx supersonic-cli lists create \
      --name "Q1 Cold Outreach" \
      --object-type-slug "contacts" \
      --fields '[
        {"name": "Status", "field_type": "select", "options": ["Queued", "Sent", "Replied", "Not Interested", "Bounced"]},
        {"name": "Sent At", "field_type": "date"},
        {"name": "Notes", "field_type": "text"}
      ]'
    ```

    Save the `list_id`.
  </Step>

  <Step title="Add contacts to the list">
    Create contact records and add them to the outreach list in queued state.

    ```bash theme={null}
    # Create the contact
    npx supersonic-cli records create \
      --object-type-slug "contacts" \
      --data '{"Name": "Sarah Miller", "Email": "sarah@techcorp.io", "Company": "TechCorp", "Title": "Head of Engineering"}'

    # Add to outreach list (use the record ID from above)
    npx supersonic-cli lists add-entry \
      --list-id "LIST_ID" \
      --record-id "RECORD_ID" \
      --data '{"Status": "Queued"}'
    ```

    Repeat for each contact. For bulk operations, see [Import contacts from CSV](/examples/import-contacts).

    Here's a batch add via the REST API:

    ```bash theme={null}
    # Add multiple entries in sequence
    for RECORD_ID in "id_1" "id_2" "id_3" "id_4" "id_5"; do
      curl -s -X POST https://mcp.supersonic.cv/api/developers/mcp/call/ \
        -H "Authorization: Bearer supersonic_live_YOUR_KEY" \
        -H "Content-Type: application/json" \
        -d "{
          \"tool\": \"lists.add_entry\",
          \"params\": {
            \"list_id\": \"LIST_ID\",
            \"record_id\": \"$RECORD_ID\",
            \"data\": {\"Status\": \"Queued\"}
          }
        }"
    done
    ```
  </Step>

  <Step title="Mark emails as sent">
    When you send an email, update the entry status and record the date:

    ```bash theme={null}
    npx supersonic-cli lists update-entry \
      --list-id "LIST_ID" \
      --entry-id "ENTRY_ID" \
      --data '{"Status": "Sent", "Sent At": "2026-03-24"}'
    ```
  </Step>

  <Step title="Record a reply">
    ```bash theme={null}
    npx supersonic-cli lists update-entry \
      --list-id "LIST_ID" \
      --entry-id "ENTRY_ID" \
      --data '{"Status": "Replied", "Notes": "Interested, wants a demo next week"}'
    ```
  </Step>

  <Step title="View all entries">
    Fetch every entry in the list:

    ```bash theme={null}
    npx supersonic-cli lists entries --list-id "LIST_ID"
    ```
  </Step>

  <Step title="Query by status">
    Use the API to filter entries. This returns only entries with status "Replied":

    ```bash theme={null}
    curl -X POST https://mcp.supersonic.cv/api/developers/mcp/call/ \
      -H "Authorization: Bearer supersonic_live_YOUR_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "tool": "lists.entries",
        "params": {
          "list_id": "LIST_ID",
          "filters": {"Status": "Replied"}
        }
      }'
    ```

    Check who hasn't been contacted yet:

    ```bash theme={null}
    curl -X POST https://mcp.supersonic.cv/api/developers/mcp/call/ \
      -H "Authorization: Bearer supersonic_live_YOUR_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "tool": "lists.entries",
        "params": {
          "list_id": "LIST_ID",
          "filters": {"Status": "Queued"}
        }
      }'
    ```
  </Step>

  <Step title="Track campaign stats">
    Get a breakdown of how many contacts are in each status:

    ```bash theme={null}
    npx supersonic-cli analytics pipeline --list-id "LIST_ID"
    ```

    Output shows counts per status: how many queued, sent, replied, not interested, and bounced.
  </Step>
</Steps>

<Tip>
  You can run multiple outreach campaigns in parallel. Create a separate list for each campaign (e.g., "Q1 Cold Outreach", "Conference Follow-ups", "Referral Introductions") and add the same contacts to different lists.
</Tip>

## Automating status updates

If you're sending emails through Supersonic's email integration, you can automate status tracking. See [Deal stage notifications](/workflows/deal-notifications) for the pattern of polling for changes and reacting to them.
