Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Designing and configuring Salesforce Sales Cloud — leads and lead conversion, opportunities and pipeline stages, forecasting, territory management, price books and products, campaigns, and sales-productivity/AI features. Use when scoping or implementing Sales Cloud, picking automation tools, modeling the sales data layer, designing the sharing model, planning migrations/dedupe, or building sales reports and dashboards. Not Service Cloud (see salesforce-service-cloud-consultant), external portals
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 214% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 284% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 444% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 247% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 303% | 0% |
> This file is an operational playbook, not an exam outline. Every section > states the rule as an actionable instruction, gives the real limits/numbers, > tells you when to choose one tool over another, and flags the anti-patterns > to catch in review. Read the Operational Rules Quick Reference first.
The Salesforce Certified Sales Cloud Consultant credential validates the ability to translate business requirements into scalable, maintainable Sales Cloud configurations across the full sales lifecycle (lead → opportunity → order → analytics). The lasting value is the platform-design judgment it exercises: sharing models, declarative-vs-code decisions, data migration, governor limits, and deployment discipline — applicable to any Salesforce org.
Exam code: Sales-Con-201 Credential level: Consultant (intermediate) Maintenance: Pass a short release-maintenance module each Salesforce release cycle; the credential expires if not maintained.
The exam outline was restructured in June 2024, collapsing nine topic areas into five consolidated domains. The skills tested are identical; only the labels/groupings changed. The blueprint was subsequently updated to add a Predictive and Generative AI domain (~13% [volatile — verify live]); exact current domain weights are in references/study-resources.md.
> Load this skill when… scoping or implementing Sales Cloud; designing lead conversion, opportunity pipeline stages, or forecasting; picking automation tools (Flow vs Apex) for a sales workflow; modeling the sales data layer or sharing model; planning a data migration or deduplication; or building sales reports and dashboards. > Not this skill: service console or case management → see salesforce-service-cloud-consultant; external portals or communities → see salesforce-experience-cloud-consultant; general org admin, profiles, or permission sets not tied to a sales implementation → see salesforce-administrator.
> Deeper context: Study resources live in references/study-resources.md (loaded on demand). For org-specific applications of these rules, see a per-org appendix you maintain in your own project, referenced from a CLAUDE.md. For NPSP/nonprofit-specific guidance, see salesforce-nonprofit-cloud-consultant.
> Verify steps assume nothing about your tooling — use your project's Salesforce MCP connection, the Salesforce CLI (sf), or the Salesforce setup UI, in that order of preference.
Credential logistics and study path: see references/study-resources.md.
[volatile — verify live] inline below), license pricing and tier names, sandbox refresh intervals, feature availability (e.g. Einstein Scoring minimum record thresholds), and Apex governor-limit numbers — these can change between Salesforce releases.[volatile — verify live] or [opinion — house style]. If you act on an untagged fact and the live system disagrees, that is a signal to file feedback, not to silently trust this file.The rule: always solve at the lowest-power tier that meets the requirement. Reach for code only when declarative tools genuinely can't do it. Over-engineering (an Apex trigger for what a validation rule does) is a review failure, not a flex.
| Requirement | Use | Why / threshold | |---|---|---| | Block a bad save with a field-level condition | Validation Rule | Runs before save, no code, shows inline error. First choice for data integrity. | | Field default, simple field update on same record, screen-based intake | Flow (record-triggered or screen) | Salesforce's strategic no-code engine. Workflow Rules and Process Builder are retired for new builds — do not create them. | | Multi-object orchestration, complex branching, subflows | Flow | Still the default before code. | | Bulk logic, recursion control, complex rollups, callouts with retry, > Flow's comfort zone | Apex trigger / class | Justify it. Triggers run in bulk and you control the transaction. | | Cross-record dedupe at entry | Duplicate + Matching Rules | Declarative; no code. | | Prevent two flows/triggers on the same object fighting | One trigger per object + handler class | Order of operations is otherwise non-deterministic. |
Decision criteria:
validation rule. If you need to change data or do something, use a Flow.
you can't bulkify, or needs guaranteed bulk-safe behavior at scale, move to Apex. Multi-object writes that must be transactional and bulk-safe (e.g. a record-approval handler that upserts a Contact, creates related records, and sets role flags) belong in Apex precisely because of those guarantees.
Anti-patterns / red flags:
order.
npe01 package; see salesforce-nonprofit-cloud-consultant for NPSP-specific details.)Bulkify everything. Never put SOQL or DML inside a for loop. Full limit table, decision criteria, and anti-patterns: references/apex-limits.md — load when writing or reviewing Apex triggers, Batch Apex, or callout logic.
Key numbers to hold [volatile — verify live]: 100 SOQL / 150 DML / 50,000 rows / 10,000 DML rows / 200 records per trigger batch / 10,000 ms CPU / 6 MB heap (sync).
Object access (CRUD on the object) does NOT grant field access (FLS). A user or integration can have full Read/Edit on an object and still get "Invalid field" on a SOQL query because FLS on that field is granted to no one.
The rule: every field a profile/permset/integration user needs to read or write must have an explicit <fieldPermissions> entry in a profile or permission set. There is no inheritance from object access.
Hard deployment trap: SFDX field-meta.xml does NOT carry FLS. Deploying a custom field via SFDX creates the field but grants FLS to no one — not even System Administrator. You must follow every field deploy with a permission set (or profile) that lists <fieldPermissions>.
Two more rules that bite on the permset:
<fieldPermissions>. Salesforce rejectsthe deploy with "You cannot deploy to a required field" — required fields are always visible/editable, so omit them from the permset's field permissions.
but are a value-allowlist problem. A write of a value not in a restricted picklist's allowed set fails even with full FLS — describe the field and check its allowed values before assuming any string is valid.
Anti-patterns / red flags:
field" at query time.
Rules:
relationshipName must be unique per parent object. Two Lookups on thesame child both pointing at the same parent object cannot share a relationshipName — deploy fails with "Duplicate relationship name". Use role-specific suffixes. SOQL parent traversal (Parent__r.Name) keys on field name, not relationshipName, so renaming the relationship is safe.
to the parent, supports roll-up summary fields, and inherits sharing. Lookup is loosely coupled and optional. Choose Lookup when the child should survive parent deletion and have independent sharing — e.g. an immutable audit record that must persist forever even if its related person record is reworked.
External Id + Unique to upsertidempotently from an integration. Keying re-link operations on a stable External Id (e.g. a submission identifier) lets later writes find the same parent records with no new write logic.
Field-length discipline: any string an integration writes to a Salesforce field should be validated against that field's real max length at the boundary, not silently truncated downstream. When length/picklist constants are generated from the org's metadata, treat the generated files as read-only and regenerate them when the org changes — never hand-edit, which drifts from the org silently.
Anti-patterns / red flags:
actual metadata.
Design from the most-restrictive baseline up. OWD sets the floor; you open access selectively.
| Mechanism | When to use | |---|---| | Org-Wide Defaults (OWD) | Set the baseline. Private for sensitive PII; Public Read-Only only if everyone should see everything. | | Role Hierarchy | Grant managers access to subordinates' records. Vertical access. | | Sharing Rules (owner/criteria-based) | Open records laterally to a role/group beyond the hierarchy. | | Manual / Apex sharing | One-off or programmatic grants. | | Teams (Account/Opportunity) | Per-record collaborator access without changing OWD. | | Permission Sets / Permset Groups | Grant abilities (object CRUD, FLS, system perms) additively. Prefer over editing profiles. |
Rules:
a requirement is "most users see nothing, a few see all," set OWD Private and share up.
and the modern best practice (Salesforce is deprecating permissions on profiles).
not via a "permission set assigned apps" page. In modern org configs the working path is ECA detail → Policies → Edit → App Policies → Select Permission Sets. The classic "Assigned Connected Apps" page does not authorize ECA usage. Verify via API (PermissionSetAssignment, SetupEntityAccess) before trusting it.
contents in object storage (encrypted), referenced by key, never duplicated into Salesforce field values.
Anti-patterns / red flags:
edited.
Tool selection by volume and object:
| Tool | Use when | |---|---| | Data Import Wizard | ≤ 50,000 records [volatile — verify live], standard + some custom objects, simple loads, built-in dedupe. | | Data Loader | Bulk (millions), all objects, insert/update/upsert/delete, scriptable/automatable. | | Bulk API 2.0 | Programmatic large-volume loads; async, chunked. | | Purpose-built package import tools | e.g. NPSP Data Import / Gift Entry for nonprofit-shaped imports — use the org's native import tool when one exists. |
Rules:
duplicates on re-run.
children, permission sets before assignments, FLS before data that needs the fields visible.
Anti-patterns / red flags:
error per-row).
Data skew thresholds, SOQL selectivity rules, skinny tables, and Big Objects: references/ldv-performance.md — load when designing for millions of records or diagnosing query timeouts.
Core rules inline: avoid ownership skew (> ~10,000 records per user) and lookup skew (> ~10,000 children per parent); always filter SOQL on an indexed field to avoid full table scans.
Rules:
Configure field mapping in Setup so custom lead fields don't vanish on convert.
aligned; a stage with the wrong forecast category corrupts pipeline reports.
required fields).
go on a custom price book. Associate currency entries for multi-currency orgs.
CPQ when you need configurable bundles, complex discounting, approval-gated pricing.
Anti-patterns: orphaned lead custom fields lost on convert; stage/forecast category drift; a product on a custom price book with no standard price.
Rules:
Sandbox types: Developer (config only, daily refresh [volatile — verify live]), Developer Pro (more storage), Partial Copy (config + sample data, 5-day refresh [volatile — verify live]), Full (complete copy, 29-day refresh [volatile — verify live] — use for UAT/performance/staging).
automation → assignments. Get this wrong and the deploy fails on missing dependencies.
sf project deploy, DevOps Center) overChange Sets for repeatable, version-controlled metadata.
sf project ... commands from the SFDX project root, not thesurrounding repo root, or they fail with "InvalidProjectWorkspaceError".
Common deployment traps:
connectedApp-meta.xml may return "You can't create a connected app…". The modern workaround is an External Client App; stage classic Connected App metadata for the day creation is unblocked.
exposes it; it's behind email verification in the SF UI.
an existing Quick Action's quickActionLayoutItems via SFDX updates the metadata, but the runtime QA cache (driving Lightning contextual tabs via console:relatedRecord) often does not invalidate — the new fields are silently absent with no error. Cache-bust by editing any non-field-list metadata on the QA (<description>, <label>, <layoutSectionStyle>) and redeploying; SF treats it as a structural change and flushes the org-level cache.
one-time setup step.
Anti-patterns: deploying fields without their FLS permset in the same change; running sf from repo root; trusting a QA field-add without the cache-bust.
Rules:
for cross-object and to expose lookup fields not in standard types.
— the only native way to trend point-in-time data (pipeline-over-time, backlog-over-weeks).
data visibility. Use a running user whose access matches the audience, or dynamic dashboards for per-viewer data.
about which currency a number is in.
Anti-pattern: a dashboard whose running user can see more than the audience should → data leak.
Decision criteria for Einstein Scoring, Sales Engagement, and Agentforce (formerly Einstein Copilot) — including data-volume prerequisites and when not to recommend heavyweight AI features: references/ai-sales-features.md — load when evaluating or recommending AI add-ons for a Sales Cloud implementation.
> Rename: Einstein Copilot was renamed Agentforce (officially "Agentforce Assistant, formerly Einstein Copilot") in the Spring '25 release. In exam and implementation contexts, use "Agentforce for Sales" for the agent-based sales assistant. The product functionality is unchanged; only the name changed. The exam's Predictive and Generative AI domain (~13% [volatile — verify live]) covers Agentforce for Sales, predictive AI tools, and Salesforce's Trusted AI Principles (Responsibility, Accountability, Transparency, Empowerment, Inclusivity).
Core rule to hold inline: Einstein Lead/Opportunity Scoring needs history — minimum volume of closed/converted records (hundreds+) [volatile — verify live]. Do not recommend for low-volume orgs.
DO:
<fieldPermissions> in a permset — SFDX field-meta grants FLS to no one.<fieldPermissions> (deploy fails otherwise).relationshipName per parent object; suffix by role.PermissionSetAssignment API.sf project ... from the SFDX project root, not the repo root.<description>/<label> and redeploying.DON'T:
for loop, or assume Trigger.new has one record.Territory Management:
Forecasting:
Fit/gap matrix, requirements-gathering discipline, Phase 1 scoping rules, and success-metrics definition: references/consulting-practices.md — load when running discovery or scoping a Sales Cloud implementation.
AssignmentRuleHeader in the API call, insert a test lead, query Lead.OwnerId. → gate: OwnerId = expected queue/user, not the running user.[volatile — verify live] → gate: at least one forecast type shows in Setup.IsActive = true). → gate: query SELECT Id, Name FROM Product2 WHERE IsActive = true — product appears.[volatile — verify live] → gate: Standard Price Book entry exists for each active currency.SELECT PricebookEntryId FROM OpportunityLineItem on a test Opportunity — confirms the entry resolves.Scenario 1 — Automation tool selection (Flow vs. Apex)
> Situation: A client wants to automatically create a follow-up Task and update three fields on an Opportunity when the Stage changes to "Negotiation." A developer on the team suggests writing an Apex trigger because "it's more reliable." > > Competent move: Build a record-triggered Flow. A Stage change → create a child Task + update three fields on the same record is exactly what record-triggered Flow handles well. No bulk-unsafe anti-patterns are involved, and Flow is the strategic declarative tool. Apex is unjustified overhead here. > > Tempting-but-wrong: Agreeing that Apex is "more reliable" and coding a trigger. The reliability argument is a rationalization — for straightforward single-object updates and child-record creation at this scale, Flow and Apex are equally reliable. Adding Apex without a genuine need increases maintenance cost and violates the lowest-power-tier principle. > > Verify: Open Flow in Setup, confirm the record-triggered Flow runs After Save with the Stage-change entry condition, creates the Task via Create Records element, and updates the Opportunity fields. Test in sandbox with a single record and a bulk load of 200 to confirm governor-limit safety.
Scenario 2 — Sharing model: Private OWD with lateral access
> Situation: A B2B company has three regional sales teams. Each team should see only its own Accounts, but regional managers need to see all Accounts across all regions. The default "Public Read/Write" OWD is currently set. > > Competent move: Set Account OWD to Private. Assign reps to roles under their regional manager in the Role Hierarchy — managers automatically inherit access to subordinates' records. No sharing rules are needed for this structure because the Role Hierarchy alone provides the vertical access. > > Tempting-but-wrong: Leaving OWD at Public Read/Write and attempting to lock records down with validation rules or page-layout tricks. OWD is the floor — you cannot narrow access below it with anything other than OWD itself. Validation rules control writes, not visibility. > > Verify: Log in as a rep in Region A and confirm Region B Accounts are invisible. Log in as a regional manager and confirm all Accounts in their sub-hierarchy are visible. Check Setup → Sharing Settings → Account OWD.
Scenario 3 — FLS after SFDX field deploy
> Situation: A developer deploys a new custom currency field Estimated_Budget__c to Opportunity via sf project deploy. The field appears in Setup. Reps report they cannot see the field on records, and an integration user gets "Invalid field" on SOQL. > > Competent move: Deploy a Permission Set that includes <fieldPermissions> for Estimated_Budget__c with readable: true / editable: true, then assign the permset to the affected profiles/users. SFDX field-meta.xml creates the field but grants FLS to no one — not even System Administrator. > > Tempting-but-wrong: Re-deploying the field or opening a support case assuming the field is broken. The field itself is fine; the problem is FLS, a separate layer. Also wrong: editing the profile directly instead of using a permission set (profiles are being deprecated as the primary access vehicle). > > Verify: Run SELECT Id, SObjectType, Field, PermissionsRead FROM FieldPermissions WHERE Field = 'Opportunity.Estimated_Budget__c' in the org's Tooling API or query via Data Loader. Confirm the permset assignment via SELECT AssigneeId, PermissionSetId FROM PermissionSetAssignment.
Scenarios 4–5 (Forecast Category vs. Stage drift; Territory model activation over-broad rules): references/scenarios.md — load for the forecasting/territory gotchas.
Study resources (official Salesforce + community) are kept in references/study-resources.md. For nonprofit/NPSP-specific operational guidance, see salesforce-nonprofit-cloud-consultant.
Using this skill and hit a wall? If you find a claim contradicted by the live system or official docs, a missing rule that cost you a wrong attempt, or a decision this skill gave no criteria for — append an entry in the moment to .skill-feedback/salesforce-sales-cloud-consultant.md at the project root (create it if absent):
date | skill last-reviewed | claim or gap | what you observed instead | evidence (error text / doc URL / query output) | suggested fix
These are harvested back into the skill via the learning loop. When the live system and this file disagree, trust the live system.
[volatile — verify live] marks, executable workflows, tool-agnostic verify steps, and the feedback protocol above. Exam logistics relocated to references/study-resources.md; last-reviewed set to 2026-06-09. Section 2 (Apex governor limits) condensed to a stub with full detail moved to references/apex-limits.md to keep body within word budget.[volatile — verify live]); updated blueprint domain names and weights to reflect post-2024 restructure (Consulting + Implementation merged; AI domain added). (2) Renamed Einstein Copilot → Agentforce throughout §11 and ai-sales-features.md (Spring '25 official rename confirmed). (3) Passing score updated in study-resources.md (68% → [volatile — verify live] with conflicting third-party values 69–73%). Eval probes 13–14 added.Independent educational content to upskill AI agents. Not affiliated with or endorsed by Salesforce; all trademarks belong to their respective owners. "Salesforce," "Sales Cloud," "Einstein," "Flow," "Apex," and related marks are property of Salesforce, Inc., used here solely to identify subject matter. Guidance only — verify against official Salesforce documentation and live orgs before acting. No certification outcome is implied or guaranteed.
Other measured skills in the registry, with their headline benchmark lift.