Claude Code Plugins

Community-maintained marketplace

Feedback

Gmail-integrated CRM for managing pipelines, deals (boxes), contacts, and email threads

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name streak
description Gmail-integrated CRM for managing pipelines, deals (boxes), contacts, and email threads
vm0_secrets STREAK_API_KEY

Streak CRM

Streak is a CRM built entirely inside Gmail. Use this skill to manage pipelines, boxes (deals), contacts, organizations, tasks, and email threads via the Streak API.

Official docs: https://streak.readme.io/reference


When to Use

Use this skill when you need to:

  • Manage sales pipelines and deal stages
  • Track leads, contacts, and organizations
  • Associate email threads with deals
  • Create tasks and comments on deals
  • Search across boxes, contacts, and organizations

Prerequisites

  1. Install the Streak extension in Gmail
  2. Navigate to Gmail > Streak icon > Integrations > Streak API > Create New Key
  3. Copy your API key

Set environment variable:

export STREAK_API_KEY="your-api-key"

Important: When using $VAR in a command that pipes to another command, wrap the command containing $VAR in bash -c '...'. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.

bash -c 'curl -s "https://api.example.com" -H "Authorization: Bearer $API_KEY"' | jq .

How to Use

Authentication

Streak uses HTTP Basic Auth with your API key as the username and no password. In curl, use -u ${STREAK_API_KEY}: (note the trailing colon).


1. Get Current User

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/users/me" -u "${STREAK_API_KEY}:"' | jq .

2. List All Pipelines

Pipelines represent business processes (Sales, Hiring, Projects, etc.).

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/pipelines" -u "${STREAK_API_KEY}:"' | jq .

3. Get a Pipeline

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/pipelines/{pipelineKey}" -u "${STREAK_API_KEY}:"' | jq .

4. Create a Pipeline

Write to /tmp/streak_request.json:

{
  "name": "New Sales Pipeline"
}

Then run:

bash -c 'curl -s -X PUT "https://api.streak.com/api/v1/pipelines" -u "${STREAK_API_KEY}:" --header "Content-Type: application/json" -d @/tmp/streak_request.json' | jq .

5. List Boxes in Pipeline

Boxes are the core data objects (deals, leads, projects) within a pipeline.

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/pipelines/{pipelineKey}/boxes" -u "${STREAK_API_KEY}:"' | jq .

6. Get a Box

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/boxes/{boxKey}" -u "${STREAK_API_KEY}:"' | jq .

7. Create a Box

Write to /tmp/streak_request.json:

{
  "name": "Acme Corp Deal"
}

Then run:

bash -c 'curl -s -X POST "https://api.streak.com/api/v1/pipelines/{pipelineKey}/boxes" -u "${STREAK_API_KEY}:" --header "Content-Type: application/json" -d @/tmp/streak_request.json' | jq .

8. Update a Box

Write to /tmp/streak_request.json:

{
  "name": "Updated Deal Name",
  "stageKey": "stageKey123"
}

Then run:

bash -c 'curl -s -X POST "https://api.streak.com/api/v1/boxes/{boxKey}" -u "${STREAK_API_KEY}:" --header "Content-Type: application/json" -d @/tmp/streak_request.json' | jq .

9. List Stages in Pipeline

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/pipelines/{pipelineKey}/stages" -u "${STREAK_API_KEY}:"' | jq .

10. List Fields in Pipeline

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/pipelines/{pipelineKey}/fields" -u "${STREAK_API_KEY}:"' | jq .

11. Get a Contact

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/contacts/{contactKey}" -u "${STREAK_API_KEY}:"' | jq .

12. Create a Contact

Write to /tmp/streak_request.json:

{
  "teamKey": "teamKey123",
  "emailAddresses": ["john@example.com"],
  "givenName": "John",
  "familyName": "Doe"
}

Then run:

bash -c 'curl -s -X POST "https://api.streak.com/api/v1/contacts" -u "${STREAK_API_KEY}:" --header "Content-Type: application/json" -d @/tmp/streak_request.json' | jq .

13. Get an Organization

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/organizations/{organizationKey}" -u "${STREAK_API_KEY}:"' | jq .

14. Search Boxes, Contacts, and Organizations

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/search?query=acme" -u "${STREAK_API_KEY}:"' | jq .

15. Get Tasks in a Box

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/boxes/{boxKey}/tasks" -u "${STREAK_API_KEY}:"' | jq .

16. Create a Task

Write to /tmp/streak_request.json:

{
  "text": "Follow up with client",
  "dueDate": 1735689600000
}

Then run:

bash -c 'curl -s -X POST "https://api.streak.com/api/v1/boxes/{boxKey}/tasks" -u "${STREAK_API_KEY}:" --header "Content-Type: application/json" -d @/tmp/streak_request.json' | jq .

17. Get Comments in a Box

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/boxes/{boxKey}/comments" -u "${STREAK_API_KEY}:"' | jq .

18. Create a Comment

Write to /tmp/streak_request.json:

{
  "message": "Spoke with client today, they are interested."
}

Then run:

bash -c 'curl -s -X POST "https://api.streak.com/api/v1/boxes/{boxKey}/comments" -u "${STREAK_API_KEY}:" --header "Content-Type: application/json" -d @/tmp/streak_request.json' | jq .

19. Get Threads in a Box

Email threads associated with a box.

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/boxes/{boxKey}/threads" -u "${STREAK_API_KEY}:"' | jq .

20. Get Files in a Box

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/boxes/{boxKey}/files" -u "${STREAK_API_KEY}:"' | jq .

21. Get Meetings in a Box

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/boxes/{boxKey}/meetings" -u "${STREAK_API_KEY}:"' | jq .

22. Create a Meeting Note

Write to /tmp/streak_request.json:

{
  "meetingDate": 1735689600000,
  "meetingNotes": "Discussed pricing and timeline.",
  "title": "Sales Call"
}

Then run:

bash -c 'curl -s -X POST "https://api.streak.com/api/v1/boxes/{boxKey}/meetings" -u "${STREAK_API_KEY}:" --header "Content-Type: application/json" -d @/tmp/streak_request.json' | jq .

23. Get Box Timeline

bash -c 'curl -s -X GET "https://api.streak.com/api/v1/boxes/{boxKey}/timeline" -u "${STREAK_API_KEY}:"' | jq .

Guidelines

  1. Keys: Pipeline keys, box keys, and other identifiers are alphanumeric strings returned by the API
  2. Timestamps: Use Unix timestamps in milliseconds for date fields (e.g., dueDate, meetingDate)
  3. Rate Limits: Be mindful of API rate limits; add delays between bulk operations
  4. Stages: To move a box to a different stage, update the box with the new stageKey
  5. Email Integration: Streak is tightly integrated with Gmail; threads are Gmail thread IDs
  6. Team Key: When creating contacts, you need a teamKey which can be obtained from the teams endpoint