Agent Templates
HubSpot to Slack Updates Agent

CRM digest agents that notify owners on-behalf-of your users

Connect two real services, delegate OAuth to your users, and ship a working agent in minutes. Clone the sample, swap in your tools, and go from zero to multi-connector in a single afternoon.

HubSpot to Slack Updates Agent
Sample Agent for Acme
May 22 · 10:00 AM ·
47s
Send today's deal updates to each owner
J
Fetching modified HubSpot deals
Fetch modified deals
hubspot_get_deals
Detect changes vs snapshot
snapshot_diff
DM each deal owner
slack_send_message
CRM digest: June 15
Largest change
"Initech deal moved: Proposal → Contract"
Owner notified via DM as themselves, not a bot
Result
3 deals changed, 3 owners notified via personal DM
Team digest posted to #revenue-ops
Message Claude...
Trusted by teams shipping agents to production
HubSpot to Slack Updates Agent
Sample Agent for Acme
May 22 · 10:00 AM ·
47s
Send today's deal updates to each owner
J
Fetching modified HubSpot deals
Fetch modified deals
hubspot_get_deals
Detect changes vs snapshot
snapshot_diff
DM each deal owner
slack_send_message
CRM digest: June 15
Largest change
"Initech deal moved: Proposal → Contract"
Owner notified via DM as themselves, not a bot
Result
3 deals changed, 3 owners notified via personal DM
Team digest posted to #revenue-ops
Message Claude...

How the agent detects CRM changes and notifies each deal owner in four steps

A real working agent you can deploy

This repo uses a single SCALEKIT_USER_ID env var to simulate one user. In production, pass each user's real ID as the identifier on every Scalekit call, and send them an authorization link whenever their connector status is not ACTIVE. HubSpot's 30-minute token expiry is handled automatically.

01
Authorize, then orchestrate
main.py
Every connection is authorized once via a one-time link. Scalekit checks both HubSpot and Slack connections are ACTIVE before fetching: a connector that has lost authorization surfaces a new link immediately rather than delivering a partial digest. main.py runs on a daily cron and fetches all deals modified in the last 24 hours.
main.py
tools = client.actions.langchain.get_tools(
    identifier="user@example.com",
    connection_names=["hubspot", "slack"],
)
02
Fetch recently modified HubSpot deals
fetch_deals.py
03
Detect changes via snapshot diff
detect_changes.py
04
Send personalized Slack DMs per owner
notify_owners.py
Why choose Scalekit

Delegated identity. Not service accounts.

Credentials never touch agent code or LLM context. The agent acts as the user, not as a shared bot.
Delegated OAuth - Agent reads your calendar, your inbox — scoped to the authorizing identity, not org-wide.
Credentials outside agent runtime  -  Tokens never touch agent code or LLM context. Both failure modes covered.
Token lifecycle automatic  -  Refresh, expiry, rotation across all connectors. One SDK call. Zero management code.
200+ prebuilt connectors  -  Google, Slack, HubSpot, GitHub, Jira, Notion, Salesforce — same auth pattern everywhere.

Agents that deliver CRM digests, without the auth plumbing

Two things you'd otherwise build: HubSpot OAuth with 30-minute refresh and Slack credentials per user. Handled.

OAuth flow per connector
One SDK call returns a delegated token for any connector. Google, HubSpot, Slack, same pattern across all 200+ connectors
tools = client.actions.langchain.get_tools(
    identifier=user_id,
    connection_names=["hubspot", "slack"],
)
agent = create_tool_calling_agent(llm, tools, prompt)
Secure token vault  
Scalekit stores OAuth credentials outside agent code and outside LLM context. Both are separate failure modes. Both covered
client = ScalekitClient(
    env_url=os.environ["SCALEKIT_ENV_URL"],
    client_id=os.environ["SCALEKIT_CLIENT_ID"],
    client_secret=os.environ["SCALEKIT_CLIENT_SECRET"],
)
# Credentials never in agent code or LLM context
Token refresh logic
Token lifecycle handled automatically — expiry, rotation, re-auth — across every connector. Agent runs in 6 months. Same call works
# Day 1 or day 180 — same call works
tools = client.actions.langchain.get_tools(
    identifier=user_id,
    connection_names=["hubspot", "slack"],
)
Try other Agent Templates

Prebuilt agents you can ship today

Each one runs on delegated identity, scoped per user.

SALES
Sales call prep agent
Pull Granola notes and Attio contact history to draft a pre-call brief before every sales meeting. Zero rep input.
GTM
CRM AI agent
Log calls, update opportunity stages, and surface stalled deals across HubSpot or Salesforce. No manual data entry.
SALES
Deal intelligence agent
Combine Gong, Attio, and Slack signals to surface deal risks and next-best actions. Updated after every call.
SALES
Outbound prospecting agent
Build targeted prospect lists with Apollo, enrich with firmographic data, and draft personalised outreach. Runs on a schedule.
GTM
Salesforce customer insights agent
Surface Salesforce account activity, NPS signals, and renewal flags into Slack threads for the account team.
SUPPORT
Support triage agent
Read Zendesk tickets, fetch runbooks from Notion, and route to the right Slack channel with a drafted response.
Customize the sample

Clone it and own it with connectors you choose

Don't sweat the integration. Point a coding agent at the repo. It clones, swaps in your connectors, and adds new steps for you.

1
Install a coding agent
terminal

claude "Set up a CRM-to-Slack digest agent using HubSpot and Slack via Scalekit"

terminal

codex "Set up a CRM-to-Slack digest agent using HubSpot and Slack via Scalekit"

terminal

gh copilot suggest "Set up a CRM-to-Slack digest agent using HubSpot and Slack via Scalekit"

terminal

Open Cursor Composer (Cmd+Shift+I) Paste the prompt from the Prompt tab

terminal

npx skills add scalekit-inc/skills --skill setup-scalekit

2
Give it this prompt

Clone github.com/scalekit-inc/python-connect-demos/langchain. Set connection_names = ["hubspot", "slack"]. Build a CRM digest pipeline: fetch HubSpot deals modified in the last 24 hours, diff against a local snapshot, group changes by owner, send a personalized Slack DM to each rep using their own Slack identity (not a bot). Map HubSpot owner IDs to Slack user IDs per tenant. Set SCALEKIT_ENV_URL, SCALEKIT_CLIENT_ID, SCALEKIT_CLIENT_SECRET in .env.

Build your own
multi-connector agent

Add connectors. Change the LLM. Same delegated auth pattern.