Agent skill
getsales
GetSales CLI-first skill.
Filed under Outbound email.
From solyarikai/boring-gtm-skills · 2 skills · 2 · pushed 2026-06-26
What it does when it runs
GetSales CLI-first skill. Operating layer for contacts, lists, flows, sender profiles, inbox, reply classification, and stats through the public API.
Read from the skill and the 2 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- GETSALES_API_KEY
- Hosts it reaches
- amazing.getsales.io
- api.getsales.io
- help.getsales.io
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- shellwrites files
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/solyarikai/boring-gtm-skills.git /tmp/boring-gtm-skills git -C /tmp/boring-gtm-skills sparse-checkout set "getsales" mkdir -p ~/.claude/skills/getsales cp -R "/tmp/boring-gtm-skills/getsales/." ~/.claude/skills/getsales/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
Before you install: this skill will not complete its job on a bare agent. It needs GETSALES_API_KEY, which you have to obtain separately.
The skill
Source on GitHub ↗Reproduced in full from solyarikai/boring-gtm-skills/blob/24a735bc2ca8e99a06bc6695df1efe718794faa8/getsales/SKILL.md, which is licensed MIT (repository). 397 words, 11 headings.
GetSales - CLI-First Operating Layer
This skill is the default operating layer for direct GetSales API work.
Start with the operational guide:
PLAYBOOK.md- the human workflow for thinking through GetSales operationsSKILL.md- safety rules and the CLI entry points
Use this skill when you need to:
- inspect contact, flow, sender profile, inbox, and reply statistics;
- read replies and classify lead responses;
- export or prepare lead data;
- work with lists, sender profiles, and automations;
- prepare write payloads through a CLI workflow.
Source of Truth
Before ambiguous or write-sensitive operations, check current GetSales documentation:
- OpenAPI index:
https://api.getsales.io/api/openapi - Quick start:
https://api.getsales.io/ - Import guide:
https://help.getsales.io/en/articles/10217814-uploading-and-importing-leads-into-getsales
Local notes and old scripts are operational memory, not the source of truth.
Core Rules
- Run direct GetSales operations through:
python3 getsales/getsales.py <command> [args] GETSALES_API_KEYmust come from the environment.- Before any write/update/delete, show the payload and wait for human approval.
- Use
--dry-runfirst for write commands. - If an API filter is known to be unstable, do not rely on it without verification.
Known Gotchas
/leads/api/leads/searchwithflow_uuidcan fail server-side. For flow-level work, prefer message or lead-envelope aggregation when possible.- The message/inbox firehose is noisy. For broad reads, narrow by
lead_uuid,conversation_uuid,sender_profile_uuid, ortypefirst. - Validate import payloads or CSV files before sending anything to the API.
Skill Folder
- Playbook:
getsales/PLAYBOOK.md - CLI:
getsales/getsales.py - Helper scripts:
getsales/scripts/if you add your own
Basic Commands
# Documentation
python3 getsales/getsales.py docs
# Lists / flows / sender profiles
python3 getsales/getsales.py lists
python3 getsales/getsales.py flows
python3 getsales/getsales.py sender-profiles
# Contacts
python3 getsales/getsales.py contacts-search --filter-json '{"company_name":"Acme"}'
python3 getsales/getsales.py contact-get <lead_uuid>
python3 getsales/getsales.py contacts-export --filter-json '{"list_uuid":"..."}' -o leads.csv
# Inbox / stats
python3 getsales/getsales.py inbox --type inbox --limit 50
python3 getsales/getsales.py stats-messages --type inbox --max-pages 10
python3 getsales/getsales.py stats-contacts --filter-json '{"list_uuid":"..."}'
python3 getsales/getsales.py replies --limit 50
python3 getsales/getsales.py reply-intel --limit 50
python3 getsales/getsales.py replies-export -o replies.csv --max-pages 10
python3 getsales/getsales.py stats-replies --max-pages 10
python3 getsales/getsales.py stats-flows --max-pages 10
python3 getsales/getsales.py stats-senders --max-pages 10
# Write with preview first
python3 getsales/getsales.py contact-upsert <list_uuid> lead.json --dry-run
python3 getsales/getsales.py flow-add-new <flow_uuid> <list_uuid> lead.json --dry-run
python3 getsales/getsales.py flow-start <flow_uuid> --dry-run
reply-intel and stats-replies use heuristic intent classification (not_interested, wrong_person, redirect, timing_later, meeting_signal, existing_customer, acknowledgement, auto_reply, and others). Always review important edge cases manually.
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Need help setting it up?
This page tells you what getsales does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.