Value-First Studios · HubSpot Academy Bootcamp

The AI-Augmented HubSpot Stack

Everything we shared in the course, in one place.

You don’t need to be a developer. Get good at asking for the help you need, when you need it — and decide whether that help is a tool or a teammate. Treat it like a teammate and coach it; just never stop being the one who checks the work.

A

AI, in plain language

The vocabulary the course assumes, in plain English. See the term, recall what it means, then flip to check yourself — and each answer names where it showed up in the bootcamp. Shuffle any time.

1 / 25

Plain-language AI terms
LLM (Large Language Model)

What does this mean?

AI Foundations?

tap the card to reveal

Your self-check stays on your device — it is your own read on what landed, never a score kept on you.

B

Resources

Show
Session 2Teaching graphic

Your CLAUDE.md, section by section

A real CLAUDE.md for a HubSpot enrichment service — every section with the do-this / not-that, closing on the teammate-not-tool mindset.

Open the guide
Session 2Copy & fill in

The CLAUDE.md starter

A blank, fill-in CLAUDE.md — six short sections with a one-line reminder each. Paste it, swap the blanks for your own project, and you have a working file in a couple of minutes.

Copy the starter
Session 2Copy & keep

The gold prompt

The clean, specific ask we built the endpoint from. Notice what it names: framework, path, method, what “done” means, and the miss case.

“Add a POST route at /api/enrich that takes a contact email, looks up company context from HubSpot, and returns company name, size, and a one-line enrichment summary. If no company is found, return status: no_match and do not write anything back.”

Session 2Reference build

The enrichment endpoint

The /api/enrich pattern we built live — reads company context, returns a structured summary, handles no-match cleanly. Yours to adapt for your own portal.

See how it is built
Session 1Cheat sheet

Which model for which job

Don’t default to the biggest model. Haiku for simple lookups, Sonnet for real enrichment, and save the top tier for the problems that actually need it.

In the session recording
BonusVocabulary

The Language of Value

A different deck from the AI terms above: the vocabulary we build and coach with — words that name value instead of the inherited business jargon most tools ship with. Browse the full gallery and drill those too.

Browse the Value Vocabulary
Agent SkillTeach your agent

Install the vocabulary in your own Claude

A downloadable Agent Skill — the always-on reflex plus the full glossary — that teaches your own agent to speak in value by default. Copy it, or drop the folder straight into Claude Code. Open the Teach your agent tab.

Install the Agent Skill
BonusJob description

The AI Orchestrator job description

The job description for the role you’re growing into — the person who coordinates AI and humans and owns the handoffs, not just the machines. Fill in your context and export a finished, hireable JD as text or a Word doc.

Build the job description
HubSpot loginGated

Slides & session recordings

The full decks and every session recording live in your HubSpot Academy bootcamp resource center — managed by HubSpot, open to enrolled participants.

Open in HubSpot · link coming
C

Build it yourself, from scratch

Want to recreate the Session 2 build on your own machine? Here’s the whole thing from an empty folder. The mock version runs with no API keys at all — the AI here is Claude Code writing the endpoint, not a key inside it.

  1. Blank slate

    mkdir hubspot-enrich && cd hubspot-enrich
  2. Scaffold the minimal Next.js app

    Pinning @14 keeps you on the course’s Node 18+ floor.

    npx create-next-app@14 . --ts --app --no-src-dir --no-tailwind --no-eslint --import-alias "@/*" --use-npm
  3. Open Claude Code

    claude
  4. Write a CLAUDE.md first (optional)

    Say to Claude Code

    Create a short CLAUDE.md: Next.js App Router, TypeScript, Node 18+; one job — a HubSpot workflow calls this and it enriches a contact. Never guess a property; read it back; sandbox before production.

  5. The prompt (mock-first — no keys)

    Say to Claude Code

    Add a POST route at /api/enrich that takes a contact email, looks up company context, and returns company name, size, and a one-line enrichment summary. If no company is found, return status: no_match. For now, resolve the company from a small local fixture keyed by the email domain — no external API yet. Then run it and show me it works.

  6. Run it locally

    npm run dev     # -> http://localhost:3000
  7. Test the round trip

    Match an email domain to one of the fixtures Claude Code created (it’ll list them), and use any unknown domain for the miss case.

    curl -X POST http://localhost:3000/api/enrich \
      -H "content-type: application/json" \
      -d '{"email":"you@<a-fixture-domain>"}'
    # -> {"companyName": ... ,"status":"matched"}
    
    curl -X POST http://localhost:3000/api/enrich \
      -H "content-type: application/json" \
      -d '{"email":"you@unknown-domain.com"}'
    # -> {"status":"no_match"}
  8. Point it at your real HubSpot

    Say to Claude Code

    Now add a real mode: when HUBSPOT_TOKEN is set, look the company up live from HubSpot by the email’s domain instead of the fixture.

    Use a private-app token — a Service key from the auth section below — scoped to companies read.

    echo 'HUBSPOT_TOKEN=pat-…' > .env.local
    # restart dev, then curl a real contact's email

That’s the whole thing — no code you wrote by hand, just the ask. The CLAUDE.md guide shows how to make it repeatable.

D

HubSpot auth, decoded

Six ways to authenticate to HubSpot, and they get mixed up constantly — it’s the “which key?” question that stalled the room in Session 1. Here’s what each one actually is, and when to reach for it.

RetiredAccount-wide

Legacy app tokens (API key)

The old account-level API key — one key, full access, no scoping. HubSpot deprecated it on Nov 30, 2022.

Use for: nothing new — migrate to a private app.

Per userLocal dev

Personal Access Key

Authenticates you — your user, carrying your own permissions. Never share it.

Use for: the HubSpot CLI and local development. Caveat: only sees what your user can — some objects need a private app.

Dev accountApp-level

Developer API Key

Authenticates your app developer account — not a customer portal’s data.

Use for: managing app definitions, webhooks, and testing in a developer account. Not for production CRM data.

Current standardServer-to-server

Service keys (Private App token)

A scoped, static token for a single account — no user, no refresh, you choose the scopes. The modern replacement for the legacy key.

Use for: server code that reads or writes one portal — like the endpoint we build. Token format pat-…

For AI toolsOAuth + PKCE

MCP Auth Apps

Connects an AI assistant (Claude, ChatGPT, Cursor) to HubSpot through the remote MCP server. Create one under Development > MCP Auth Apps; scopes are assigned automatically.

Use for: wiring an AI client to HubSpot with no code. There’s also a one-click Claude Connector.

ToolingTerminal

HubSpot CLI (hs)

The command-line tool for local work — themes, modules, projects, serverless functions. It’s the tool, not the credential.

Authenticates via: a Personal Access Key (or OAuth). Use for: fetch/upload and build from the terminal.

For this course, reach for…

  • Build the Session 2 endpoint (server reads a portal) → a Private App token / Service key, scoped to what you read.
  • Follow along in Claude Code / the CLI → a Personal Access Key.
  • Wire Claude straight to HubSpot, no code → an MCP Auth App or the one-click Claude Connector.
  • A legacy API key → don’t. It’s retired — use a private app.
E

The elephant we named on stage

Should you humanize your AI?

We name our agents. We talk to them like teammates. Some of that feels like a lot — so here’s why we do it on purpose. Treat an AI as a tool and you poke it for one-off answers. Treat it as a teammate you coach — give it your context, hold it to a standard — and the relationship compounds, exactly like a real hire. That’s all an agent is: a CLAUDE.md that spells out who to be, plus a name. Go all-in on working with it.

Humanize the collaboration

Coach the teammate. Brief it well, correct it kindly, let it get better at your work over time.

Never your judgment

Read the record back. Keep your hands on anything that writes to production. You decide what ships.

F

The three sessions

Session 1 · Complete

Where agents fit

Native HubSpot AI vs. workflows vs. agents, and the first live Claude Connector build inside HubSpot.

Session 2 · Complete

Building with Claude Code

From plain English to a real HubSpot integration, and the CLAUDE.md that makes it repeatable.

Session 3 · Today

Productionizing and scaling

Failure modes, monitoring, human-in-the-loop, and governance so the system outlasts the person who built it. Ends with your Production Audit.

After the courseOpen

Want to keep building?

There is nothing to sign up for yet — no date, no price, no curriculum. If you want a next thing, tell us what would actually help and we will tell you when it is real.

The AI-Augmented HubSpot Stack — co-led with Nico Lafakis (opens in a new tab).