Business Overview
Last 30 days · vs previous period
Auto insights
—
—
—
—
Revenue Trend
Monthly volume — last 12 months
Top 10 Accounts
By total revenue
Tier Distribution
Classified by revenue
Consumables vs Equipment
Category mix
Top Brands
By total revenue
Business Insights — Auto-detected alerts & opportunities
MONTHLY REVENUE
—
AVG ORDER VALUE (AOV)
—
per order line
NEW ACCOUNTS
—
last 30 days
ORDERS NEEDING FOLLOW-UP
—
orders in last 14d · brand-level
Onboarding — New Accounts Pipeline
First 90 days · owned by onboarding lead (new hire)
Onboarding
—
accounts <90d
First Reorder
—
2nd order rate
Time to 2nd Order
—
median days
Account Management — Verticals & Size Tiers
AM focus on specific verticals & business size — owner: JJ
AM Book
—
accounts ≥90d
Tier A/B
—
priority verticals
At-Risk
—
>60d no order
Top 10 Accounts by Revenue
Revenue by City
Order Follow-ups — last 14 days
Recent orders with brand-level summary for CS & AM follow-up (NPS, reorder prompts, tech check-ins)
Account Performance
Sorted by total revenue · 30 / 60 / 90 / 365-day windows
Plan ahead — HubSpot Custom Properties (Starter plan)
The HubSpot Starter plan allows custom properties on contacts / deals / companies and exposes them via the Private App API (polling ≤ 100 req / 10s). Confirmed fields to pre-wire so this hub can fill automatically: account_role (onboarding / AM), vertical_focus, business_size_tier, affiliate_source, holding_group, last_followup_at, followup_outcome. Create them in HubSpot first so the polling worker can map 1-to-1 without schema drift.
Revenue by Brand
All-time total
Brand Penetration
Unique accounts per brand
Brand Trend — Top 5
Last 12 months
Repeat Purchase Rate by Brand
% of accounts with 2+ orders
Brand Mix by Vertical
% of vertical revenue
Cross-Sell Opportunities
Accounts buying A but not B
Sales HUB — Pipeline & Deals
Two HubSpot pipelines · one manual B2B deals flow · one automated e-commerce flow
B2B Sales Pipeline (manual)
Deals created & managed by sales — only pipeline I maintain manually today
Open Deals
—
Weighted €
—
Win Rate
—
E-commerce Pipeline (automated)
Auto-created deals from every B2B-side purchase via HubSpot workflow — dated at order creation
Deals (MTD)
—
Revenue (MTD)
—
Avg Deal
—
B2B Deals — Kanban by Stage
Drag in HubSpot — mirrored here read-only
Close-Date Forecast (next 90d)
Reason Lost Breakdown
Planned Deal Properties (HubSpot custom) — CDC context
• vertical_focus — Coffee Shop / Roaster / HoReCa / Chain / Brunch / Prosumer
• equipment_vs_consumables — deal composition split
• brands_in_deal — multi-select of Hario, Cafetto, Acaia, Mahlkönig, etc.
• estimated_monthly_reorder — projected consumables run-rate (€)
• source_channel — Inbound / Affiliate / Trade Show / Reactivation
• affiliate_partner — links to Referrals hub
• holding_group — parent chain / grupo
• payment_terms — prepay / net15 / net30 / net45 / net60
• demo_scheduled — Y/N, equipment demos (Moccamaster, Mahlkönig, etc.)
• training_required — Y/N, barista / technical training commitment
Rationale: these map onto how CDC actually sells — equipment is consultative (demo + training), consumables are subscription-like (reorder cadence). Filtering the pipeline by vertical + brand + reorder projection tells us where to invest AM time vs onboarding time.
AI Chat — CDC Intelligence
No data loaded
Claude can make mistakes — verify important information before acting.
| Account | Tier | Vertical | Last Order | Days Inactive | Revenue | Brands |
|---|
| Account | Vertical | Last Consumable | Days Since | Product | Revenue |
|---|
| Cuenta | Tier | Vertical | Group / Source | Revenue | Orders | AOV | Último pedido | Estado | Top marcas |
|---|
Group / Source flags — chips shown per row:
CHAIN part of a multi-location group or holding (e.g. Grupo Hostelero BCN).
AFFILIATE brought in by a P2B affiliate — partner name shown on hover (e.g. Innefable).
DIRECT inbound / self-sourced. Links to the Referrals HUB for ROI attribution.
Marketing HUB — HubSpot
Email marketing · forms & landing pages · workflows & lists
Demo
EMAILS SENT
—
all campaigns
AVG OPEN RATE
—
% open rate
AVG CTR
—
click-through rate
ACTIVE PIPELINE
—
total deals value
Campaign Performance — Opens vs Clicks
Contact Funnel
Pipeline by Stage (€)
Contact Activity — Views · Cart · Orders
Campaign Details
Sorted by date — latest campaigns
Browsed but Didn't Buy
HubSpot contacts who viewed products but didn't place a B2B order
✨ Análisis IA — Email Marketing
Claude analyses campaigns and behaviour to surface priority actions
Google Analytics 4
Web traffic, acquisition sources and user behaviour
Load GA4 CSV
SESSIONS
—
GA4 total
USERS
—
GA4 total
Sessions & Users (last 90 days)
Traffic Sources
Top Landing Pages
New vs Returning
🐊 Crocodile Effect — Impressions vs Clicks gap
Jaws widening = AI Overviews / zero-click searches eating traffic. Critical for complementosdelcafe.com (D2C) in a rising-AI-SERP market.
Gap Δ (30d)
—
Status
WATCH
Tracks the divergence between organic impressions (GSC) and on-site sessions (GA4) on complementosdelcafe.com (D2C — the only property with GSC). A growing gap means users see us in results but don't click — commonly caused by AI Overview answers, featured snippets, or brand-only queries.
Coffee & Specialty Retail — Industry Benchmarks
Benchmarks tuned for complementosdelcafe.com (D2C equipment & consumables)
Add-to-cart rate
—
industry 6–10%
Checkout conversion
—
industry 1.5–2.5%
Consumables reorder rate
—
60-day window
Equipment AOV
—
grinders · brewers
Search → Product CTR
—
internal site search
Direct / brand share
vs paid / referral
✨ Análisis IA — Google Analytics 4
Claude analyses your GA4 data and identifies trends, opportunities and alerts
Google Search Console
Rendimiento orgánico — consultas, impresiones y posicionamiento
Load GSC CSV
TOTAL CLICKS
—
GSC total
IMPRESSIONS
—
GSC total
AVG CTR
—
click-through rate
AVG POSITION
—
organic ranking
Clicks & Impressions (last 90 days)
Devices
Top 10 Queries by Clicks
Top Countries
Query Performance Detail
Sorted by clicks — last 90 days
🤖 AI Crawlability & GEO Impact
How LLM & AI-Overview traffic touches complementosdelcafe.com (D2C, GSC-tracked) — bots visiting + SERP position stolen by AI answers
AI Overview exposure
—
% queries with AIO shown
CTR on AIO queries
—
vs CTR baseline
Zero-click share
—
impressions w/o clicks
AI-bot hits (30d)
—
GPTBot · ClaudeBot · PerplexityBot
AI-bot crawl volume — last 30 days
Bot share
What to watch. If AIO exposure rises and CTR falls on the same queries, complementosdelcafe.com is being summarised away. Counter-moves: tighten product schema (Offer / Product / Review), add FAQ & HowTo markup on the PrestaShop theme, and keep
robots.txt open to GPTBot, ClaudeBot, PerplexityBot, Google-Extended so the brand appears in AI answers. Bot hits are pulled from PrestaShop / host access logs — no extra tooling needed.
✨ Análisis IA — Search Console
Claude analyses queries, rankings and SEO opportunities for your B2B store
Operations HUB — Returns & Incidents
Returns on one tab · technical service on the other · credit status & total cost on both
AMOUNT REFUNDED
—
€ refunded · all returns
RETURN RATE
—
% of revenue
AVG TIME TO RESOLVE
—
open → closed
CREDIT OPEN
—
customer refunds pending
BRAND COVERED
—
% cost absorbed by brand
Returns by Brand (€ refunded)
Most Returned Products
Returns Log
Status · credit status · brand coverage · total cost per case
Operations HUB — Stock Alerts
Unified feed of out-of-stock pings — site form submissions + manually-added items
Google Sheet · Demo
OPEN ALERTS
—
waiting on restock
FROM SITE FORM
—
complementosdelcafe.com submissions
MANUALLY ADDED
—
CS / warehouse entries
OLDEST OPEN
—
days since request
| Created | Product / SKU | Brand | Customer | Source | Qty | Status | Notes |
|---|
📋 Setting up the automation — Google Sheet → this dashboard
Step 1 — Google Sheet columns. Create a sheet with:
created_at · product_name · sku · brand · customer_email · customer_name · qty_requested · source · status · notes. The source column must be exactly form or manual.Step 2 — Site form (PrestaShop, both sites). Wire the "Notify when back in stock" module on complementosdelcafe.com and b2bcomplementosdelcafe.com to post to a Google Apps Script webhook with
source=form and a site field. Use the built-in PrestaShop Stock Alert / Mail Alerts hook, or a small custom module.Step 3 — Manual entries. CS / warehouse staff add rows directly on the sheet with
source=manual. Use Data Validation on the status column: open · notified · restocked · closed.Step 4 — Publish to the dashboard. File → Share → Publish to web as CSV. Paste the published CSV URL in Settings → Google Sheets → "Stock Alerts Sheet URL". The dashboard polls every 5 minutes.
Step 5 — Downstream automation (optional). Add an Apps Script trigger: on edit, if status changes to "restocked" → send templated email to
customer_email and flip status to "notified". One-click close later.Once ERP inventory is wired, this same table can auto-match by SKU and auto-trigger when inventory > 0 — the sheet becomes the single source of truth until then.
Operations HUB
Open & closed cases · time to resolve · status tracking
Demo
OPEN CASES
—
currently unresolved
CLOSED · LAST 30D
—
resolved cases
HIGH PRIORITY OPEN
—
requires attention
AVG TIME TO RESOLVE
—
hours · closed cases
Open Cases — SLA health
Within SLA · Breached · Closed last 30d
Cases by Supplier
Open + closed · all priorities
Issue Types
Courier · equipment · defect · calibration · late
Case Volume Trend
Opened vs closed · last 12 weeks
SLA Compliance by Priority
% of closed cases resolved within SLA target
| Priority | SLA target | Met | Compliance |
|---|
Avg Resolution Time vs SLA
Actual hours vs SLA target, per priority
Cases by Brand
Which brands drive the most after-sale work
Top Accounts — case volume
Open cases only · who calls us the most
| Case | Account | Brand / Supplier | Priority / SLA | Issue | Opened | Next Action |
|---|
| Closed | Case | Order | Issue Type | Brand | Supplier | Priority | Resolution |
|---|
Purchases HUB
Purchase orders, supplier reliability and cost trends
PURCHASES (YTD)
—
cost accumulated
ACTIVE POs
—
open purchase orders
AVG LEAD TIME
—
days · weighted by cost
ON-TIME RATE
—
last 60d deliveries
Purchases by Supplier
Cost accumulated · YTD
Purchases by Brand
Cost share · YTD
Cost Trend
Monthly spend · last 12 months
Estimated Margin by Brand
Sale price minus cost · last 90d
High-Demand Brands with Supply Risk
Fast-moving × late deliveries
| Supplier | POs (YTD) | Cost | Lead Time (d) | On-Time % | Defect % | Late Deliveries | Reliability |
|---|
📎 Drop PO PDF — Auto-Import
Drop the supplier PO PDF. Claude extracts lines → brand, SKU, qty, cost, ETA, carrier — merges into the Purchase Orders table below.
| PO | Supplier | Brand | Items | Cost | Ordered | ETA | Carrier | Tracking | Status | Next Follow-up |
|---|
Purchasing Manager — scheduled follow-ups
Auto-created 3 / 7 / 14 days before ETA · also on brand "no-reply" streaks
Carrier Performance — on-time vs delay
DB Schenker (pallets) · UPS · DHL · manual pickups
Built for the whole team. CS reps can search any PO by brand / SKU / supplier above to answer "when is this coming?" without pinging the purchasing manager. The manager closes the loop by tagging Confirmed · Shipped · Delayed, uploading the supplier PDF (auto-imports items + ETA), and adding tracking numbers per carrier (DB Schenker, UPS, DHL, manual pickup). The old Teams card lives on — this is the structured layer on top.
Referrals HUB — Partners & Commissions
Google Sheets back-end · monthly partner report → pre-tax order total × agreement rate
💬 Commission Report Intake
Drop the monthly supplier Excel here. It matches orders → affiliates → agreements and computes commissions on pre-tax totals automatically.
Ready. Expected columns:
order_ref · account · pre_tax_total · affiliate_code · period. Drop an Excel or paste a conversation below — the chat will ask follow-ups if anything is missing.Channel comparison — D2C vs B2B
D2C Affiliates
Revenue
—
Commission
—
Partners
—
B2B Affiliates
Revenue
—
Commission
—
Partners
—
REFERRED REVENUE
—
YTD · all partners
COMMISSIONS DUE
—
unpaid balance
COMMISSIONS PAID
—
YTD · closed payments
ACTIVE PARTNERS
—
with sales this year
Top Partners by Sales Generated
YTD · referred revenue
ROI by Partner
Sales ÷ commissions paid
| Partner | Referred Account | Rate | Period | Sales | Commission | Status | Agreement |
|---|
Payout Alerts
Missing payouts, duplicates and mismatches
Commission Mix by Agreement Type
YTD · commission-weighted
| Partner | Code | Type | Rate | Base | Start | End | Status | Doc |
|---|---|---|---|---|---|---|---|---|
Sample row — Innefable (family affiliate) · code INN-2025 · %-of-pre-tax · base: order total ex VAT · drop the signed PDF to auto-extract. | ||||||||
Shared tool, not a silo. CS reps can look up any affiliate-sourced account here (chip says AFFILIATE) to answer partner questions. Monthly flow: upload Excel → reconcile against agreements → approve → export PDF → send to each partner. No next-step tracking, no deal management — just clean monthly reporting.
Admin HUB — Data Control
Sync freshness, data quality and pending cleanup
SOURCES HEALTHY
—
of 0 sources
QUALITY ISSUES
—
open records
DUPLICATES
—
detected records
UNMAPPED
—
brands · categories · accounts
| Source | Type | Last Sync | Cadence | Rows (last run) | Rejected | Duration | Status |
|---|
| Type | Source | Count | Severity |
|---|
| Task | Owner | Due | Priority |
|---|
| When | Source | File / Endpoint | Row / Ref | Error | Status |
|---|
ERP Import
Drop your ERP export here. The dashboard automatically filters B2B series and discards the rest.
B2B Series (comma-separated)
📂 Drop your ERP file here or click to select
CSV · Excel export · any comma-delimited format
Google Analytics 4 + Search Console
Direct OAuth connection — two GA4 properties (D2C + B2B), one GSC (D2C only). No CSV exports needed.
Client ID (Google Cloud)
GA4 Property ID — D2C (complementosdelcafe.com)
GA4 Property ID — B2B (b2bcomplementosdelcafe.com)
GSC Site URL — D2C only
Note
Search Console is only configured for the D2C site. The B2B site is GA4-only (typical for account-gated B2B stores).
How to get your Client ID (10 min, one-time setup)
- Go to
console.cloud.google.com→ Create a new project - Left menu → APIs & Services → Library → enable
Google Analytics Data APIandGoogle Search Console API - Go to Credentials → Create credential → OAuth 2.0 Client ID
- Type:
Web application· Authorized JS origins:https://cdc-intelligence-demo.netlify.app - Copy the Client ID and paste it above
HubSpot CRM + Marketing (B2B only)
HubSpot is connected only to the B2B account (b2bcomplementosdelcafe.com). D2C customers are not in HubSpot. Private App token — campaigns, pipeline, contacts and browse behaviour.
Private App Token
How to get your token (5 min)
- Go to your HubSpot portal → Settings → Integrations → Private Apps
- Create a new app → give it a name (e.g.
CDC Dashboard) - Minimum scopes:
crm.objects.contacts.read·crm.objects.deals.read·marketing.email.read - Copy the
pat-eu1-…token and paste it above
AI Assistant — Anthropic API
Claude API key for the AI chat. Stored locally in your browser only.
API Key