Quarterly attribution readout: pipeline by channel, checked against the CRM
HockeyStack + HubSpot + Slack
Who it's for
Marketing leaders who need a quarterly pipeline-by-channel number they can defend, with deal counts checked against the CRM before anyone sees it. HubSpot can be swapped for Salesforce, Attio or Pipedrive.
What you get
Readout table, CRM check and the Slack post waiting for approval. Sample output: every company and person in it is fictional.
Report: 'Pipeline by channel, Q3' (saved HockeyStack report, Jul 1 to Sep 30) Company: Mossgate Labs (fictional) Channel Sourced Influenced Paid search 9 deals, $310K 21 deals, $890K Events 6 deals, $420K 14 deals, $760K Organic 11 deals, $280K 25 deals, $640K Partners 4 deals, $190K 7 deals, $330K Outbound 12 deals, $510K 18 deals, $700K CRM check HockeyStack: 42 sourced deals. HubSpot (deals created Jul 1 to Sep 30, New Business pipeline): 45. 3 HubSpot deals missing from HockeyStack: Larkspur Freightworks (fictional) $40K, Quarry Lane Analytics (fictional) $25K, Ashgrove Dental Group (fictional) $18K. All 3 were created by import on Sep 29. Draft Slack post for #marketing-leadership (not posted): Q3 pipeline by channel: 42 sourced deals, $1.71M. Outbound and events led on sourced amount. Influenced totals count a deal in every channel that touched it, so they add up to more than total pipeline. 3 deals created by import on Sep 29 are not in the attribution data yet. No HockeyStack reports were created or changed. Reply 'post' to send.
Time and cost
Estimate About 20–30 minutes, most of it reconciling deal counts.
Assumptions: One quarterly run over about 50 deals, using one saved report or one preview.
- HockeyStack: Reads only: a report and dashboard search, one report read or preview, and a deal list. A saved report only after you approve it. Credit use not confirmed by HockeyStack.
- HubSpot: Reads only: deals created in the quarter, for a count and a list. Credit use not confirmed by HubSpot.
- Slack: One channel message after you approve it. Credit use not confirmed by Slack.
Exact credit costs depend on your plan with each vendor. Check the tool pages before a large run.
MCP servers
Every server is confirmed in: Claude
-
ClaudeChatGPTRead + writeCredits not confirmedNeeds admin or IT
https://mcp.hockeystack.com/mcp -
ClaudeChatGPTRead + writeCredits not confirmedNeeds admin or IT
https://mcp.hubspot.com -
ClaudeClaude CodeCursorRead + writeCredits not confirmedNeeds admin or IT
https://mcp.slack.com/mcp
Set up in a chat app
Every server in this recipe is confirmed for Claude. Connect each one, then paste the prompts below into one conversation.
- Connect HockeyStack without code (Claude, ChatGPT)
- Connect HubSpot without code (Claude, ChatGPT)
- Connect Slack without code (Claude)
Developer setup
Auth setup and mcp.json for Claude Code and Cursor
- HockeyStack: Sign in with OAuth in your client (run
/mcpin Claude Code). Do it once interactively, and the client stores and refreshes the token. - HubSpot: Sign in with OAuth in your client (run
/mcpin Claude Code). Do it once interactively, and the client stores and refreshes the token. - Slack: Sign in with OAuth in your client (run
/mcpin Claude Code). Do it once interactively, and the client stores and refreshes the token.
Put this in .mcp.json (Claude Code, project root) or ~/.cursor/mcp.json (Cursor). Swap the example keys for your own, and don't commit real ones. Remove the // comment lines if your client requires strict JSON.
{
"mcpServers": {
"hockeystack": {
"url": "https://mcp.hockeystack.com/mcp"
},
"hubspot": {
"url": "https://mcp.hubspot.com"
},
"slack": {
"url": "https://mcp.slack.com/mcp"
}
}
}
Step-by-step prompts
- Search my HockeyStack reports and dashboards for pipeline sourced or influenced by channel. List each one with its name and, where it's shown, the date range and attribution settings. Don't create or change anything.
- Using {report name}, show me pipeline sourced and influenced by channel for {quarter}, with deal count and amount for each, in separate columns. If no saved report fits, preview one for {quarter} and show me its definition. Don't save it.
- Cross-check the deal counts in HubSpot: find deals in {pipeline} created in {quarter} and compare the count with HockeyStack's deals for the same range. Show me a table, and list by name any deal that's in one and not the other. Don't change any records.
- Draft a short Slack post for {channel} with the channel table totals, one line on what changed since last quarter, and a note on any deals that didn't reconcile. Post it only after I approve it. If I ask to save the previewed report in HockeyStack, do that only after I approve it too.
Run it on a schedule (optional)
- Run it once at quarter end, after the last deals of the quarter are entered, and again mid-quarter if leadership wants a check-in.
- In a scheduled run, stop at the table and the draft post. Send the draft to yourself and approve it before it reaches a channel.
- Adding HockeyStack as a custom connector needs a workspace Admin in the AI tool, and Slack needs a workspace admin to approve its MCP integration. Do one manual run before you schedule it.
Where this goes wrong
- Influenced pipeline counted as if it adds up. A deal touched by three channels shows up as influenced in all three. Keep sourced and influenced in separate columns, and never sum the influenced column into a total.
- Different date logic in each tool. A report built on close date or touch date won't match a CRM count built on create date. Ask for the date field and range the report uses, and use the same one in the HubSpot query.
- Deal counts that don't reconcile. Ask for the deals that are in one tool and not the other, by name. If the gap is more than a few deals, find the cause (imports, a filtered pipeline, a sync delay) before you post anything.
- A report changed by accident. HockeyStack's MCP can create and update reports, and other people may rely on a saved report. Use preview for anything new, and say 'don't save' in each prompt until you've decided.
Gotchas
- Only one HockeyStack instance can be connected over MCP at a time. If you manage more than one workspace, check which one is connected before you run this.
- In ChatGPT or Codex, switch HockeyStack's connection type from STDIO to Streamable HTTP when you add the connector.
- Non-admin HubSpot users need a Super Admin to approve the connector first. Connect with an account that can see the whole pipeline, or the counts won't match.
- Slack's MCP server needs a workspace admin to approve the integration before anyone can connect.
Download
Get the prompts, guardrails and expected output as one Markdown file. Paste it into a Claude Project or ChatGPT project's instructions, or save it as CLAUDE.md for Claude Code.
Download attribution-readout.md
New recipe and breakage notes every week
Vendor sites: HubSpot · Slack. If we join an affiliate program, these links will be labeled as affiliate links.