π 1. HubSpot OAuth 2.0 Authorization
AuthorizationOAuth 2.0 Standard Protocol
crm.objects.contacts.read, crm.objects.contacts.write, crm.schemas.contacts.read, crm.schemas.contacts.write, and crm.objects.owners.read.
ScaleboX property group and custom fields are created only when you save active field mappings.
π₯ 2. Connecting Outreach Teams (ScaleBox & GetSales)
WorkspacesYou can connect multiple ScaleBox and GetSales workspaces (teams) to a single HubSpot portal. Each connected team operates in an isolated context while syncing into the shared HubSpot contact database.
Required Connection Parameters
https://scaleboxapp.com for ScaleBox, or your custom domain for GetSales (e.g. https://app.getsales.io).
657, 663). This ID is visible in your browser address bar when logged into ScaleBox (parameter team_id=...).
β‘ 3. Webhook Setup & Real-Time Sync Guide
Real-TimeInbound webhooks push newly discovered leads, conversation replies, and status updates directly into HubSpot CRM in real time without polling delays.
Step-by-Step Webhook Configuration
https://scalebox-hubspot.vsubbotin.com/webhook/scalebox?portal_id=[HUB_ID]&team_id=[TEAM_ID]
contact.createdβ Dispatches immediately when a new outreach contact enters the campaign.contact.updatedβ Dispatches when status, pipeline stage, tags, or contact properties change.message.receivedβ Dispatches when a recipient replies on LinkedIn or Email, syncing conversation threads.
π― 4. Owner Synchronization (Agent -> Contact Owner (HubSpot))
RoutingThis module matches outreach Agents from all connected ScaleBox & GetSales teams with Contact Owners (HubSpot), ensuring that new leads are automatically assigned to the correct sales representative.
Profile Matching Logic
-- None --): If an Agent is mapped to -- None -- or if a lead arrives without an assigned Agent, the contact is synced with the HubSpot Contact Owner left blank.
"Overwrite existing Contact Owner (HubSpot) if Agent changes" Toggle
| Lead Scenario | Toggle OFF (Default / Recommended) | Toggle ON |
|---|---|---|
| New Contact | Assigns mapped Contact Owner (HubSpot). | Assigns mapped Contact Owner (HubSpot). |
| Existing Contact without Owner | Fills mapped Contact Owner (HubSpot). | Fills mapped Contact Owner (HubSpot). |
| Existing Contact with Assigned Owner | Protected: Existing Contact Owner is preserved to protect ongoing deals. | Overwritten: Contact Owner (HubSpot) updates to the new Agent's mapped user. |
ποΈ 5. Field Mapping Architecture & Standards
SchemaHubSpot Property Naming Standards
ScaleboX (internal name scalebox).
sb_ (e.g. sb_campaign_name, sb_flow_status). Display labels always start with [SB] for instant identification in CRM views and filters.
Field Mapping Controls
- Select HubSpot Field: Maps to an existing native property (e.g.
firstname,email,phone). The label is synced automatically from HubSpot and locked from manual editing. - Create Custom Field: Provisions a standardized
sb_*property in HubSpot CRM. Internal name and label are locked to maintain system integrity.
- Always Overwrite: Updated on every incoming webhook event. Suitable for statuses, stages, conversation threads, and URLs.
- Write Only if Empty: Only written if the HubSpot field currently has no value. Preserves manual edits made by sales reps. Suitable for first name, phone numbers, and job titles.
π 6. Complete 38-Field Dictionary & Allowed Values
Data DictionaryA. Native HubSpot Properties (Select HubSpot Field)
| ScaleBox Field | HubSpot Property | Default Policy | Description |
|---|---|---|---|
first_name | firstname | Write only if empty | Contact's first name |
last_name | lastname | Write only if empty | Contact's last name |
job_title | jobtitle | Write only if empty | Professional job title |
work_email | email | Write only if empty | Primary business email address |
work_phone_number | phone | Write only if empty | Work phone number |
personal_phone_number | mobilephone | Write only if empty | Mobile / personal phone number |
company_name | company | Always overwrite | Company / organization name |
city | city | Write only if empty | City location |
region | state | Write only if empty | State or province region |
zip | zip | Write only if empty | Postal or ZIP code |
linkedin_url | hs_linkedin_url | Write only if empty | Personal LinkedIn profile URL |
B. Dropdown Properties (Single Select β enumeration/select)
Each dropdown property accepts exactly one value from the defined options list.
| ScaleBox Field | HubSpot Property | HubSpot Label | Allowed Values (Value -> Label) |
|---|---|---|---|
status |
sb_flow_status |
[SB] Campaign Status |
in_progress (In Progress)finished (Finished)canceled (Canceled)ready (Ready)restarted (Restarted)failed (Failed)active_limit (Active Limit)ok (Active / OK)replied (Replied)paused (Paused)
|
linkedin_status |
sb_li_status |
[SB] LinkedIn Status |
ok (OK / Connected)connected (Connected)invited (Invited / Pending)replied (Replied)enrichment_failed (Enrichment Failed)no_data (No Data)
|
pipeline_stage_name |
sb_pipeline_stage |
[SB] Pipeline Stage |
Dynamically synced from ScaleBox pipeline stages (e.g. New, Approaching, Engaging, Replied, In Work, Opportunity, MQL, SQL). |
employees_count |
sb_employees_count |
[SB] Company Employees Count |
1-10 (1-10 employees)11-50 (11-50 employees)51-200 (51-200 employees)201-500 (201-500 employees)501-1000 (501-1,000 employees)1001-5000 (1,001-5,000 employees)5001-10000 (5,001-10,000 employees)10001+ (10,001+ employees)
|
source |
sb_source |
[SB] Source |
ScaleboX (ScaleboX), GetSales (GetSales) |
primary_language |
sb_primary_lang |
[SB] Primary Language |
Two-letter ISO codes: en, ru, de, fr, es, it, zh, ja, pt, nl, pl, tr, uk, ar, he, hi, sv, cs, el |
C. Multi-Select Properties (Multi-Checkbox β enumeration/checkbox)
Multiple values can be selected simultaneously. In the HubSpot API, values are formatted with a semicolon separator ;.
| ScaleBox Field | HubSpot Property | HubSpot Label | Format & Allowed Values |
|---|---|---|---|
campaign |
sb_campaign_name |
[SB] Campaign / Flow |
Internal Value: Flow UUID (e.g. f687d1d1-2e52-4d6b-a243-d82bc4a05857).Display Label: Campaign name with Team ID suffix: Flow Name [#Team ID].Multiple flows are concatenated with ;.
|
tags |
sb_tags |
[SB] Tags |
ScaleBox contact tags concatenated with ; (e.g. VIP;Outreach2026). |
supported_languages |
sb_languages |
[SB] Supported Languages |
Two-letter ISO language codes concatenated with ; (e.g. en;ru;de). |
D. Text & Multi-Line Properties (string/text, string/textarea)
| ScaleBox Field | HubSpot Property | HubSpot Label | Type | Description & Format |
|---|---|---|---|---|
scalebox_url | sb_lead_url | [SB] Profile URL | text | Direct URL link to the lead's profile in ScaleBox / GetSales |
experience | sb_experience | [SB] Experience Summary | textarea | Formatted work history: [2021 β Present] Company\nPosition: Head of Sales |
linkedin_thread | sb_li_thread | [SB] LinkedIn Thread | textarea | Chronological LinkedIn message history with UTC timestamps and sender labels |
email_thread | sb_email_thread | [SB] Email Thread | textarea | Chronological email conversation thread |
hq_location | sb_hq_location | [SB] HQ Location | text | Company headquarters location |
list_name | sb_list_name | [SB] List Name | text | Name of the lead list in ScaleBox |
headline | sb_headline | [SB] LinkedIn Headline | text | LinkedIn profile headline |
timezone | sb_timezone | [SB] Timezone | text | Normalized timezone offset (e.g. +3:00, +0:00, -5:00) |
personal_email | sb_personal_email | [SB] Personal Email | text | Secondary or personal email |
sender_profile_name | sb_sdr_name | [SB] SDR Name | text | Full name of the assigned outreach SDR |
sender_profile_uuid | sb_sdr_uuid | [SB] SDR Profile UUID | text | ScaleBox SDR profile UUID |
task_id | sb_task_id | [SB] Task ID | text | ScaleBox task identifier |
team_id | sb_team_id | [SB] Team ID | text | Numeric Team ID |
user_id | sb_user_id | [SB] User ID | text | ScaleBox User ID |
uuid | sb_contact_uuid | [SB] Contact UUID | text | ScaleBox Contact UUID (primary deduplication key) |
linkedin_id | sb_linkedin_id | [SB] LinkedIn ID / URN | text | LinkedIn profile ID or URN |
twitter | sb_twitter | [SB] Twitter / X URL | text | Twitter / X profile URL |
facebook | sb_facebook | [SB] Facebook URL | text | Facebook profile URL |
π‘οΈ 7. Dynamic Options Sync & On-The-Fly Safety Net
Fault-TolerantHubSpot strictly enforces that any value sent to an enumeration property must exist in the property's predefined options. The integration implements a two-tier architecture to ensure 100% data ingestion reliability:
1. Pre-Caching on Field Mapping Save
/flows/api/flows), pipeline stages (/leads/api/pipeline-stages), and tags (/leads/api/tags) across all connected teams.
NON_UNIQUE_OPTION_LABELS validation rule.
PATCH request, ensuring that historical values are never overwritten or deleted.
2. On-The-Fly Safety Net (Real-Time Fallback)
If a new campaign is launched or a new pipeline stage is created in ScaleBox while leads are arriving, HubSpot returns an HTTP 400
INVALID_OPTION error.The connector catches this specific error, registers the missing option in HubSpot via a PATCH API call, and immediately retries the contact sync. The lead is saved without data loss or administrative intervention.
π₯ 8. Contact Deduplication Hierarchy
ArchitectureTo prevent duplicate records in HubSpot CRM, every incoming lead is matched against existing contacts using a strict three-tier deduplication sequence:
sb_contact_uuid (Primary Key): Searches for an existing contact with the exact ScaleBox Contact UUID. If found, the contact is updated in place.
email (Work Email): If no contact matches the UUID, the engine searches by work email address via the CRM Search API.
phone / mobilephone: If email is not available or not matched, the engine searches by formatted phone number.
If a match is found in steps 1β3, the existing contact is updated according to the Overwrite Policies configured in the Field Mapping tab. If no match is found, a new contact record is created in HubSpot CRM.
π 9. Integration Audit Logs & Health Monitoring
AuditThe Integration Logs tab provides an audit log of every incoming webhook event and synchronization operation:
#ID β) that opens the contact page directly in your HubSpot portal.
created (new contact), updated (existing contact updated), or error (actionable error message with HTTP status).
π¬ 10. HubSpot Custom Channels & Dynamic SDR Slots
Two-Way MessagingHubSpot Custom Channels enable native two-way LinkedIn messaging directly from the HubSpot Conversations Inbox and Help Desk. Sales reps and support agents can view incoming messages, read full conversation threads, and compose replies without leaving HubSpot CRM.
Subscription Tiers & Quota Management
| Tier | Channel Slots | Data Flow Duration | Description |
|---|---|---|---|
| Trial | 3 SDR Slots | 30 Days | Evaluation plan with full access to 38 custom properties and 3 channel slots. |
| Lifetime VIP | 10 SDR Slots | 99 Years (Unlimited) | Standard full tier for connected accounts. Configured with 10 slots (HubSpot inbox optimal capacity). |
| Custom / Paid | N Slots | Flexible | Enterprise tier configured with custom quota and duration via subscription calculator. |
Available Slots = Tier Limit β Connected Channel Accounts. The "+ Connect Channel Slot" button is active whenever Available > 0.
Dynamic SDR Slot Switching (History Retention)
HubSpot Conversations Inbox Setup
/webhook/hubspot/messages endpoint and sent to ScaleBox (POST /flows/api/linkedin-messages).