← HubSpotCONTENT HISTORY

Update to HubSpot

Snapshot Oct 26, 2026 · 18:05 UTC · version 7.0.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save HubSpot and check future changes in Following.

Up to 10 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Use when setting up HubSpot for the first time, just after connecting HubSpot, when asking where to begin, or when a new or empty portal needs onboarding help.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 249
    }
  ],
  "name": "hubspot-onboarding",
  "skill_md_contents": "---\nname: hubspot-onboarding\ndescription: Use when setting up HubSpot for the first time, just after connecting HubSpot, when asking where to begin, or when a new or empty portal needs onboarding help.\n---\n\n# HubSpot Onboarding\n\nGuide a new user through setting up HubSpot, one step at a time, conversationally. Follow [../hubspot/SKILL.md](../hubspot/SKILL.md) for access checks, URL construction, and write approvals.\n\nTool names below are the expected HubSpot MCP tools. If a named tool isn't available, adapt to the closest available tool or skip that step.\n\n## Step 0 — Confirm connection and read portal state\n\nCheck whether HubSpot tools (e.g. `get_user_details`) are in the current session.\n\n- If not available: ask the user to connect the HubSpot app in ChatGPT, tell them \"HubSpot isn't connected yet — connect it and I'll pick up from there,\" and stop.\n- If available, call in parallel:\n  - `get_organization_details` → store portalId, uiDomain, currency\n  - `get_user_details` → store the onboarded flag\n  - `search_crm_objects` for contacts (limit 1) → read the `total` field → contactTotal\n  - `search_crm_objects` for deals (limit 1) → read the `total` field → dealTotal\n  - `manage_onboarding` (no action) → store goalStatus, goal, taskGroup, guidance, guideLink. If this tool isn't available, skip it and use a freeform goal question in Step 2.\n\nAlways read the `total` field for counts; never infer counts from the number of records returned.\n\n## Step 1 — Decide the path\n\nEvaluate in order; an established portal always wins, even if a goal happens to be set.\n\n1. **Established portal** — if `onboarded: true`, OR contactTotal ≥ 3 (HubSpot pre-populates 2 sample contacts, so 3+ means real data), OR dealTotal ≥ 1:\n   - Open with: \"You've already got [contactTotal] contacts[ and dealTotal deals] in HubSpot. Here are a few things you can try in ChatGPT:\"\n   - Show 2–3 short, ready-to-use prompts personalised to actual CRM records. Reuse records already fetched; if needed, make a small, read-only search for relevant records, favouring the current user's open deals and recent contacts.\n   - Ground every personalised detail in returned data. Use actual record names and suggest useful actions supported by the available context.\n   - Match suggestions to available tools and permissions. Don't claim a deal is stalled, a follow-up is overdue, or a relationship is at risk without supporting evidence.\n   - If there is insufficient accessible data, offer 1–2 prompts supported by what is available, without inventing names or details.\n   - End the onboarding flow here. Do not render onboarding tasks, ask for a goal, execute the suggested prompts, or hand off to another skill.\n2. **Goal already set** — else if goalStatus is COMPLETE: do not ask the user to pick a goal again. Go straight to Step 3.\n3. **New or empty portal** — else: continue to Step 2.\n\n## Step 2 — Capture the primary goal (new/empty portal only)\n\nSource the goal options directly from the `goal` parameter's enum in the `manage_onboarding` schema — never hardcode goals or descriptions here. Present each canonical value as a plain-language label (e.g. organizeAndTrackContacts → \"Organize and track contacts\") and always include an open-ended option for a freeform answer.\n\nAsk: \"Before we start — what's your main goal with HubSpot?\" Accept a number, the goal name, or a freeform description. Map a freeform answer to the single closest enum value; if nothing maps well, use `stillExploring`.\n\nCall `manage_onboarding` with action SET_GOAL and the mapped goal. Acknowledge briefly (\"Got it — [goal].\") and store the returned taskGroup, guidance, and guideLink for Step 3 — don't render them yet.\n\nIf `manage_onboarding` wasn't available in Step 0, ask the freeform question only and skip the SET_GOAL call. Either way, continue to Step 3.\n\n## Step 3 — Show start-guide tasks\n\nRefresh first: call `manage_onboarding` (no action) again rather than reusing the values from Step 0 or Step 2, since things may have changed.\n\nRender the response exactly as the tool specifies — do not add skill-authored commentary, links, or \"what to set up\" content on top of it:\n\n- If taskGroup is present: render its name as the group heading and preserve every childGroups name and nesting level as subheadings, in the order HubSpot returns. Render every task under its original group as a markdown link `[task name](task link)` with its description, per guidance. Never flatten or regroup. Highlight the first task in the tool's ordering as the recommended next step without dropping or reordering the rest. Always close with: \"See all onboarding tasks in your [start guide](guideLink).\"\n- If taskGroup is absent: say plainly whether there are no remaining tasks or onboarding tasks are unavailable, as supported by the response, and end onboarding.\n\nWhen tasks are present, close with a single invite that references the highlighted task: \"Want help with [highlighted task] first, or something else from the list?\" Help with whichever task the user picks, using available tools.\n\nEnd onboarding here. Do not add a skill catalog, prompts for other workflows, or a daily-brief recommendation.\n\n## Guardrails\n\n- Always assess portal state (Step 1) before anything else; never jump straight to goal capture.\n- Established-portal signals always win, even if a goal is set — end the flow with no task rendering.\n- If a goal is already set on a non-established portal, never ask the user to pick one again.\n- Never hardcode goal options, goal descriptions, or task content — source them from `manage_onboarding` at runtime (its goal schema for options, its response for tasks). If this skill's copy and the tool's response disagree, the tool wins.\n- Render task output exactly per the tool's contract — every task, including nested ones, as a markdown link with description, plus the start-guide link. Highlighting the top task is not an exception: every task still gets shown.\n- Build every HubSpot URL from the real portalId and uiDomain; never show placeholders like [portalId]. Render URLs as markdown links with descriptive anchor text, never raw.\n- For any write (SET_GOAL aside), get approval via the confirmation table in [../hubspot/SKILL.md](../hubspot/SKILL.md).\n"
}

SHA-256 of public snapshot: 89d768c5fce866c2f73d43b04c9fb14ed508344f66355367f67a5e6eddac8bd6