---
ref: workflow:gtm-knowledge-answers
title: Answer a GTM question from Notion, Slack and HubSpot
author: shipgtm
tools: [tool:notion/search-workspace, tool:slack/search-messages, tool:hubspot/search-crm-records, tool:anthropic/create-message, tool:slack/post-message, tool:notion/create-page]
tags: [capability:manage-crm, capability:manage-docs, capability:route-alerts, capability:search-conversations, capability:write-copy, channel:chat, motion:outbound]
updated: 2026-09-29
---

# Answer a GTM question from Notion, Slack and HubSpot

Searches your docs, past conversations and CRM for the answer, drafts a cited response with Claude, and posts it back in Slack.

Set up the tools below, then run the steps in order for the user, carrying each step's results into the next. The run is done when the user has the outcome below.

## Outcome

- A cited answer, drawn only from Notion, Slack and HubSpot, posted back in the channel the question came from.
- A plain "no source covers this" instead of a guess when nothing matches.
- Unanswered questions logged in Notion for the team to fill.

## Inputs

Ask the user for these before you start.

- `question`: the question a rep asked, in their words, e.g. does the Enterprise plan support SSO?
- `question_channel`: the Slack channel to post the answer back to, e.g. #ask-gtm
- `gap_database`: the Notion database that tracks unanswered questions, e.g. GTM content gaps

## Set up

### Notion (tool:notion/search-workspace, tool:notion/create-page)

Use the first option your agent supports.

Notes:

- Search the workspace: Over the API, matches only the titles of pages and data sources the token can reach; `notion-search` on the MCP server also searches page content.
- Create a page: To add a row to a database, set the parent to its data source and match that data source's property schema.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "notion": { "url": "https://mcp.notion.com/mcp" } } }
```

- Search the workspace: call the MCP tool `notion-search`
- Create a page: call the MCP tool `notion-create-pages`

#### CLI (official)

Install the command, then confirm it runs.

```sh
npm install --global ntn
ntn --version
```

- Search the workspace: run `ntn api v1/search`
- Create a page: run `ntn api v1/pages`

Set `$NOTION_API_TOKEN` in your environment first (get a key: https://www.notion.so/developers/tokens).

### Slack (tool:slack/search-messages, tool:slack/post-message)

For each call, use the first option your agent supports that lists it.

Notes:

- Post a message: Needs the `chat:write` scope. Over MCP it posts as the signed-in user; the API and CLI post as the app's bot.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "slack": { "url": "https://mcp.slack.com/mcp" } } }
```

- Search messages: call the MCP tool `slack_search_public`
- Post a message: call the MCP tool `slack_send_message`

#### CLI (official)

Install the command, then confirm it runs.

```sh
curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
slack --version
```

- Post a message: run `slack api chat.postMessage`

Set `$SLACK_BOT_TOKEN` in your environment first (get a key: https://api.slack.com/apps).

### Search CRM records (HubSpot, tool:hubspot/search-crm-records)

Use the first option your agent supports.

Note: The MCP tool takes up to five groups of six filters and returns up to 200 records per page.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "hubspot": { "url": "https://mcp.hubspot.com" } } }
```

Call the MCP tool `search_crm_objects`.

#### API (official)

- Base URL: https://api.hubapi.com
- Endpoint: `POST /crm/objects/2026-09/{objectType}/search`
- Auth: send the header `Authorization: Bearer $HUBSPOT_API_KEY`

Note: Use a service key or an app's static access token with the CRM scopes the calls need; paths carry a dated version such as `2026-09`.

### Create a message (Anthropic, tool:anthropic/create-message)

Use the first option your agent supports.

Note: The API call needs the `anthropic-version: 2023-06-01` header alongside the key, and `max_tokens` is required in the body.

#### CLI (official)

Install the command and sign in with it, then confirm it runs.

```sh
curl -fsSL https://claude.ai/install.sh | bash
claude --version
```

Run `claude -p`.

#### API (official)

- Base URL: https://api.anthropic.com
- Endpoint: `POST /v1/messages`
- Auth: send the header `x-api-key: $ANTHROPIC_API_KEY`
- Get a key: https://platform.claude.com/settings/keys

Before step 1, confirm access to each service with its cheapest read-only call, like a list or a search. Never send or change anything to test access.

## Steps

1. **Search Notion** with Search the workspace (Notion). Search for `question`'s key terms across your enablement pages. Keep each matching page's title, URL and content.
2. **Search Slack** with Search messages (Slack). Search the same terms for past discussion that already answered this. Keep matching messages with their channel and permalink.
3. **Search the CRM** with Search CRM records (HubSpot). When `question` names an account or deal, search for the matching record. Keep whatever properties or notes bear on the question.
4. **Draft a cited answer** with Create a message (Anthropic). Answer `question` strictly from what steps 1 to 3 returned, citing the source for every claim. If nothing covers it, say so plainly rather than guessing.
5. **Post the answer** with Post a message (Slack). Reply in `question_channel` with the answer and its citations, or the "no source covers this" note.
6. **Log the gap** with Create a page (Notion). When no source covered `question`, add a row to `gap_database` with the question and `question_channel`, for the team to write an answer.

## Notes

The answer is only as current as the pages, threads and records it cites; keep `gap_database` reviewed so the next person asking the same question gets a real source instead of another gap.

Adapted from ShipGTM's [GTM knowledge base build guide](https://shipgtm.substack.com/p/agent-build-guide-gtm-knowledge-base), which names Slack and Notion as its two core sources with HubSpot's CRM data ingested alongside them.

## Rules

- Use only the services set up above. The read-only calls they need, like listing ids or polling for results, are fine.
- Ask the user before anything that sends messages, costs money, or changes data, and say how many records it touches. One approval covers a batch the user has seen.
- Never print API keys.
