Skip to main content

Open the side panel for HubSpot contact and company records

Summary

When a user is on a HubSpot contact or company record, the SurroundR side panel shows the matching SurroundR contact or company page, so reps get the same context in HubSpot as they get on LinkedIn without switching tabs.

Problem Statement

  • Persona: sales reps who use SurroundR and spend part of their day browsing contact and company records inside HubSpot
  • Current pain: the side panel can now be opened on every page, but on HubSpot record pages it only shows the generic "not on a profile" state. To see the SurroundR view of a contact or company they are already looking at in HubSpot, the rep has to find that person or company on LinkedIn first
  • Impact: requested by a user via Featurebase, who says it would save a lot of time while browsing HubSpot profiles; impact not yet quantified

🚦 Definition of Ready (Checklist)

Before entering a cycle, confirm:

  • [ ] Problem statement is clear
  • [ ] Acceptance criteria are defined
  • [ ] Scope & non-goals are explicit
  • [ ] Linked to relevant context
  • [ ] Can be completed by one person in one sprint

If any box is unchecked → do not pull into sprint

Acceptance Criteria

  • [ ] Given a user on a HubSpot contact record of their connected portal, when they open the side panel, then it shows the SurroundR contact page for that record, identical to the view shown for that contact on LinkedIn
  • [ ] Given a user on a HubSpot company record of their connected portal, when they open the side panel, then it shows the SurroundR company page for that record, identical to the view shown for that company on LinkedIn
  • [ ] Record detection works on both the standard and the EU-hosted HubSpot app domains
  • [ ] Given a HubSpot record whose portal ID is not the user's connected portal, or whose contact or company ID is not found in SurroundR, when the side panel is open, then it shows the existing "not on a profile" state
  • [ ] Given the side panel is open on a HubSpot record, when the user navigates to another contact or company record inside HubSpot without a full page reload, then the panel switches to the new record without being closed and reopened
  • [ ] Given a user on a HubSpot deal, ticket, list view or any other non-contact, non-company page, when the side panel is open, then it shows the existing "not on a profile" state
  • [ ] Side panel behavior on LinkedIn pages is unchanged

If this checklist is complete, the issue is done.

Scope

In Scope

  • Detecting HubSpot contact and company record pages from the tab URL
  • Extracting portal ID, object type and record ID from the URL
  • Looking up the record in SurroundR by HubSpot record ID and rendering the existing contact or company page
  • Following in-app HubSpot navigation between records
  • Falling back to the existing "not on a profile" state for portal mismatch, record not found and unsupported pages

Out of Scope

  • Deal and ticket record pages, including resolving their associated contacts or companies (follow-up card)
  • Custom objects and HubSpot list or index views
  • Live HubSpot API fetch when the record is missing from SurroundR (not found means "not on a profile")
  • Creating a contact or company from a HubSpot record that SurroundR does not know yet
  • Injected UI or highlights inside HubSpot pages
  • Any change to the LinkedIn side panel views themselves

| Type | Link / Reference | | -- | -- | | Featurebase (user feedback) | https://feedback.surroundr.io/p/sidepanel-for-hubspot-contact-and-company-pages | | Granola (call notes) | N/A | | PRD / Project | Related: SUR-884 (one side panel open state across all tabs in a window) https://linear.app/surroundr/issue/SUR-884/enable-one-side-panel-open-state-across-all-tabs-in-a-window | | Incident | N/A | | Design | N/A | | Technical Decision Record | N/A |

Implementation Notes (Optional)

  • Modern HubSpot record URLs follow /contacts/{portalId}/record/0-1/{contactId} (contacts) and /contacts/{portalId}/record/0-2/{companyId} (companies). Verify whether legacy paths (/contact/{id}, /company/{id}) still appear in practice before deciding whether to support them
  • Reuse the CRM mirror lookup by HubSpot record ID (see SUR-588 and SUR-654) rather than a new HubSpot call
  • HubSpot is a single-page app: listen for URL changes on the tab rather than relying on page load events
  • Dependency: builds on the every-page side panel work in SUR-884 (In Progress); confirm the extension already has the tab URL access it needs on HubSpot domains, since a new host permission would trigger Chrome Web Store re-review

✅ Definition of Done (Reference)

This issue is done when:

  • [ ] Acceptance criteria are met
  • [ ] Code is reviewed & merged
  • [ ] Tests pass (functional + design where applicable)
  • [ ] Feature is deployed
  • [ ] Docs / release notes updated if needed
Status: In Progress

Log in to comment and vote

No comments yet

Be the first to share your thoughts.