CIP analytics
Use warehouse analytics for trends; use SCAPI/logs for current records and
immediate diagnosis. If b2c is unavailable, use npx @salesforce/b2c-cli.
Choose the surface
- Prefer MCP
cip_discover/cip_querywhen available. Readskill://mcp/cip/SKILL.mdbefore querying and passskillRead: true. Discovery/config inspection is ungated. No terminal or token export needed. - Use CLI for explicit CLI requests, automation, or larger local CSV/JSON exports.
MCP limits results to 500 rows / 24 KB;
truncatedmeans incomplete output, androwCountcounts returned rows. CLI defaults differ: date flags use the current month unless overridden. Set explicit dates for the user's task. - Both surfaces use the same reports and toolkit configuration. Do not run both to repeat a successful result.
Configuration and access
Reuse resolved tenantId, clientId, clientSecret from dw.json, environment,
instance selection, and configuration plugins. Use masked b2c setup inspect
only if target/access is unclear; ask for missing values instead of guessing.
Do not read secret files or export tokens for normal analytics requests.
Requires Account Manager client credentials and the Salesforce Commerce API role with the target tenant in its tenant filter. User/SLAS/JWT flows do not apply. Overrides:
| Value | CLI / environment |
| --- | --- |
| Tenant | --tenant-id (--tenant) / SFCC_TENANT_ID |
| Client | --client-id / SFCC_CLIENT_ID |
| Secret | --client-secret / SFCC_CLIENT_SECRET |
| Analytics host | --cip-host / SFCC_CIP_HOST |
| Force staging analytics | --staging / SFCC_CIP_STAGING |
Tenants ending _prd select production analytics; other tenants select staging.
Explicit host configuration wins. Staging analytics is a destination, not an
instruction to change the target instance. Non-production data requires 26.1+
Enable Reports & Dashboards Data Tracking. Production tenants in test realms
can also need staging analytics. Dashboard: https://ccac.stg.analytics.commercecloud.salesforce.com.
Missing configuration/availability:
analytics guide.
Resolution details: b2c-cli/b2c-config. Read only the relevant section.
Discover and execute
- List/search reports; inspect the selected report's parameters. MCP report details also supply tables and available result notes.
- Fix site/date scope. Warehouse
nsite_idoften resemblesSites-Example-Site; verify it inccdw_dim_siterather than constructing it from a SCAPI site ID. - Run the report. Preview SQL only to adapt it or resolve an unclear definition. Inspect table columns when custom SQL needs them; avoid exhaustive browsing.
b2c cip report list --category "Sales Analytics"
b2c cip report sales-analytics --describe
b2c cip report sales-analytics --site-id Sites-Example-Site --from 2026-09-01 --to 2026-09-07
# Existing report does not fit: inspect the relevant table, then adapt SQL.
b2c cip tables --pattern "ccdw_aggr_sales%"
b2c cip describe ccdw_aggr_sales_summary
b2c cip report sales-analytics --site-id Sites-Example-Site --from 2026-09-01 --to 2026-09-07 --sql
# Execute a reviewed query; CLI replaces <FROM>/<TO> date placeholders.
b2c cip query --file ./query.sql --from 2026-09-01 --to 2026-09-07 --format csv > sales.csv
Raw SQL also accepts a positional query or stdin. MCP SQL must contain literal
dates; placeholder substitution is a CLI feature. Preserve exit status/errors
when redirecting output. --format table|csv|json controls report/query output;
--json uses the CLI's standard JSON envelope.
Select technical reports
| Question | Report / constraint |
| --- | --- |
| Slow SCAPI endpoints | scapi-latency-distribution; histogram buckets describe a distribution, not exact percentiles |
| HTTP failures | scapi-error-rate-by-status --status-class 5xx |
| Cache effectiveness | scapi-cache-hit-ratio |
| Integration client usage | ocapi-client-usage |
| SFRA controllers | controller-health-scorecard, controller-error-rate-trend; site required |
SCAPI traffic can be headless or unassigned. Omit optional site filters only for
an intended all-site analysis; explain scope. Discover exact parameters with
--describe instead of inventing flags. All examples require a chosen date window.
Query and interpret
Filter dates/sites and select needed columns; LIMIT alone does not bound database work. Prefer aggregate tables over fact joins. Use summed revenue / summed orders for period AOV, not daily averages. Preserve null ratios, missing dates, currency, timezone, and coverage limits. Latest event date is not ingestion freshness.
Safety Mode applies; CIP uses POST even for SELECT/metadata. Do not bypass a block. For 401/403, check credentials, role, and tenant filter without inferring that every denial is a missing role. For quota/timeouts, narrow the window or query; no retry loops. Official access and service limits.
Conditional references
Read a matching section only when the task needs it:
- Sales comparisons, gaps, latest activity: SALES_ANALYSIS.md.
- Custom SQL patterns: STARTER_QUERIES.md.
- Unknown table family: KNOWN_TABLES.md, then live metadata.
- CLI options: command reference.
Stop once the requested result and material limitations are established.