Detailed content
🍕 The Sales OS pizza — tools at the top
If context ruled on its own in Tax OS (~34%), in Sales OS the stack is more tight: the context drops to ~30% and the tools rise to ~20%, splitting leadership. The shape of the pie is similar, but the proportions tell a different story: sales is a plumbing domain — scrapers, CRM, email.
🌱 New here?
ICP (Ideal Customer Profile) is your ideal customer profile. Lead is a contact/company that could become a client. CRM is the system that stores these contacts and their history. SDR (Sales Development Representative) is the prospecting salesperson who qualifies leads and schedules the demo.
Layer distribution (Sales)
✓ What carries the domain
- ✓Context: ICP, cold email, won/lost deals.
- ✓Tools: Apify scrapers, CRM, email.
- ✓Skills: enrichment, qualification, humanize copy.
✗ What doesn’t solve it on its own
- ✗An army of SDR agents with no qualified leads.
- ✗“Humanized” copy sent to the wrong base.
- ✗Sending volume with no opt-out rule.
Why learn
Because they determine where you spend your energy. Knowing that tools are worth ~20%, you prioritize the scraper→CRM integration instead of polishing a flashy agent. Sales is where “plumbing > model” becomes most obvious: results come from the data flow, not the AI’s eloquence.
Key concepts
📚 Context: cold email, ICP, demographics
Sales context is the knowledge about who you serve and how you speak to them. This is where effective cold email frameworks, a precise ICP definition, lead demographics, and—just as importantly—the history of won and lost deals come in. That's what keeps the scraper from collecting junk.
🔎 What lives in the sales context
- Detailed ICP — segment, size, contact’s role, pain signal.
- Cold email structures — the frameworks that have already converted.
- Demographics — where and how your best clients are alike.
- Won / lost — why you won and why you lost deals.
💡 Where to store the leads
Ask yourself early: do the leads live in a Salesforce, a dedicated CRM, or your “Google Sheets empire”? The answer defines the connection you'll build in the next topic — and where won and lost deals are recorded.
Why learn
Because the ICP is the filter for everything that comes next. Without a clear definition, the scraper brings in irrelevant contacts, enrichment wastes tokens, and qualification has no benchmark. Clear context here is what lets the friction in topic 5 work.
Key concepts
🔌 Tools: scrapers → leads → CRM
This is the ~20% slice. The author uses the Apify skill (without creating your own CLI—the skill already handles that) with different actors to pull leads from LinkedIn, Google Maps, and aggregators. Those leads become a file that goes into the CRM, and email (incoming and outgoing) is connected through a workspace CLI so everything is traceable.
How to read: the actors (in teal) feed the leads file, which goes to the CRM; the email (in cyan) completes the communication loop. Note the Track 3 decision: here, the skill from Apify is enough — it’s not worth maintaining your own CLI.
💡 Skill, CLI, or MCP?
The question from Track 3 comes up again: skill, CLI, API, or just MCP? For scraping, Apify's ready-made skill "does more than necessary" — so don't invent a CLI just to keep it. For the CRM and email, a CLI seamless pays off with heavy use.
Why learn
Because the data pipeline is the skeleton of the Sales OS. Without the scraper→leads→CRM→email path, you have nothing to qualify and no one to write to. It also teaches you to be intentional: every connection you add becomes maintenance—build only what usage justifies.
Key concepts
💎 Skills: custom enrichment + humanizers
Instead of paying for a tool like Clay, the author suggests designing the your own enrichment system: from the raw lead, gather data and prepare it. And at the output end, a series of humanizers ensures all copy comes out in "human speak," not "AI speak."
The sales skills pipeline
Enrich
Takes the raw lead and enriches it with data (role, company, signals) via scrapers — your homegrown Clay.
Qualify
Compare against the ICP and apply friction (topic 5) to disqualify weak leads before investing effort.
Draft + humanize
Drafts the outreach message and runs it through the humanizers so it sounds like a person, not a robot.
🔎 Why internalize enrichment
Building your own enrichment cuts subscription costs and gives you control over which signals matter to your ICP and keeps the data inside your OS — without relying on a third party for the most sensitive part of the funnel.
Why learn
Because skills are ~16% and determine the quality of what comes out. Well-done original enrichment supports honest qualification; humanizers protect your sender reputation. Together, these skills are what separate “automated spam” from “outreach that respects the recipient.”
Key concepts
🎯 Qualification with friction
Here’s the most counterintuitive idea in the module: add friction on purpose. The qualification skill doesn't try to approve leads right away—it pushes back: “keep scanning this file,” “go look for more information with another scraper.” The goal is not to spend 100 calls on 50 bad leads; 50 calls on real leads is better.
How to read: the 200 raw leads (teal) enter the friction gate; those that don’t match the ICP are rescanned (loop) or discarded (red), and only the ~50 that are worth pursuing (cyan) move forward. Less volume, much higher quality.
💡 Friction is a feature
We're used to wanting AI to “approve quickly.” In the sales funnel, the virtue is the opposite: the skill should doubt, ask for more data, and reject when in doubt. Every bad lead it blocks is a saved call and a preserved sender reputation.
Why learn
Because it’s what makes Sales OS sustainable. Without friction, automation becomes a spray-and-pray machine: lots of outreach, few conversions, and a burned domain. With friction, you spend human time only where there’s a real chance—and that’s exactly the behavior the copy-run in topic 7 implements.
Key concepts
🤖 Agents & Anti-Spray Rules
Agents are “mini versions of employees you’d hire”: the SDR does prospecting, outreach, qualification, and tries to book the demo; the orchestrator combines enrichment + qualification + drafting; and a human reviews everything before sending. But the anti-spray rules are what protect the brand.
✓ Sales OS rules & hooks
- ✓Don't send the same message to hundreds of people.
- ✓Opt-out becomes a hook: remove it from the CRM and mark it do-not-contact right away.
- ✓Respect the brand voice (playbook referenced with every submission).
✗ The spray-and-pray anti-pattern
- ✗Blast to more than X people without segmentation.
- ✗Ignoring the person who asked to “leave me alone.”
- ✗Being pushy—people are tired of it and ignore you.
💡 The good Samaritan salesperson
Identity (just 8%) sums up the tone: someone so proud of the product that this pride is contagious — but without being pushy. Pressure pushes people away; genuine enthusiasm brings them closer. That’s the voice standard humanizers should maintain.
Why learn
Because agents without guardrails become a risk. An automated SDR is powerful and dangerous: it can send a thousand identical emails with one click. The anti-spray rules and opt-out hook keep the Sales OS within the law and in good standing—and the human in the loop is the final check.
Key concepts
⚙️ Practical: lead qualification with friction
The prompt below is copy-run: paste it into Claude Code with your leads file ready. It qualifies each lead against the ICP with the friction from Topic 5 — if in doubt, doesn’t approve. Replace the sections <...> by yours.
🎯 Objective
Receive a list of leads and return a verdict for each lead (Qualified / Disqualified / Needs enrichment / Remove), with a reason—without writing any emails yet.
Você é o qualificador de leads do meu Sales OS. Avalie cada lead contra o meu ICP com fricção de propósito: na dúvida, NÃO aprove. Prefira 50 bons a 200 ruins. Meu ICP (cliente ideal): - Segmento: <SaaS B2B, 10–50 funcionários> - Cargo do contato: <fundador ou head de vendas> - Sinal de dor: <time de vendas sem CRM organizado> - Desqualificadores: <freelancer, sem site, fora de <país>> Arquivos: - Leads: <./leads/leads-brutos.csv> - Do-not-contact: <./rules/do-not-contact.md> Para CADA lead, faça: 1. Se o e-mail/domínio estiver na do-not-contact, marque REMOVER e pule. 2. Compare com o ICP campo a campo. Se faltar dado para decidir, marque PRECISA-ENRIQUECER e diga EXATAMENTE qual dado falta — não chute. 3. Só marque QUALIFICADO se TODOS os critérios baterem e nenhum desqualificador aparecer. Caso contrário, DESQUALIFICADO + motivo. 4. Saída: tabela | lead | veredito | motivo | dado-faltante |. Não escreva e-mails ainda; só qualifique. Mostre no fim a contagem por veredito.
✅ How to verify that it worked
- 1.Every lead that is in the do-not-contact appears as REMOVE.
- 2.None QUALIFIED passed without meeting all the ICP criteria.
- 3.Every NEEDS-ENRICHMENT says exactly which data is missing (not “maybe”).
- 4.The table has the columns lead | verdict | reason | missing-data.
- 5.The total number of QUALIFIED leads is much lower than the number of raw leads (the friction worked).
💡 Next step
Only after you have the QUALIFIED list, ask for outreach drafts — and run them through the humanizers. Never write copy before qualifying; that’s exactly what prevents spray-and-pray.
Why learn
Because it turns the concept of friction into real behavior. When you run this copy-run, you watch the skill reject weak leads right in front of you—and come away with the standard of “objective, copyable block, and how to verify” for any future skill in your Sales OS.
Key concepts
✅ Module summary
Next module:
5.3 — Support OS 🎧 (tickets become playbooks)