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:
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"}
]'
Create the outreach list
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.Add contacts to the list
Create contact records and add them to the outreach list in queued state.# 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.Here’s a batch add via the REST API:# 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
Mark emails as sent
When you send an email, update the entry status and record the date:npx supersonic-cli lists update-entry \
--list-id "LIST_ID" \
--entry-id "ENTRY_ID" \
--data '{"Status": "Sent", "Sent At": "2026-03-24"}'
Record a reply
npx supersonic-cli lists update-entry \
--list-id "LIST_ID" \
--entry-id "ENTRY_ID" \
--data '{"Status": "Replied", "Notes": "Interested, wants a demo next week"}'
View all entries
Fetch every entry in the list:npx supersonic-cli lists entries --list-id "LIST_ID"
Query by status
Use the API to filter entries. This returns only entries with status “Replied”: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: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"}
}
}'
Track campaign stats
Get a breakdown of how many contacts are in each status:npx supersonic-cli analytics pipeline --list-id "LIST_ID"
Output shows counts per status: how many queued, sent, replied, not interested, and bounced.
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.
Automating status updates
If you’re sending emails through Supersonic’s email integration, you can automate status tracking. See Deal stage notifications for the pattern of polling for changes and reacting to them.