HubSpot (Portal 6193101)
PAT : /home/opsadmin/.openclaw/workspace/data/hubspot-pat.txt
Base URL : https://api.hubapi.com
Pipeline : Wholesale (816046)
Contact search : POST /crm/v3/objects/contacts/search
Deal CRUD : GET/PATCH /crm/v3/objects/deals/{id}
Custom objects : See FIELDS.md for type IDs
SalesMsg (API v2.2)
Base URL : https://api.salesmessage.com/pub/v2.2
OAuth token : /home/opsadmin/.openclaw/workspace/data/salesmessage-oauth.json (auto-refreshed every 6h)
Send SMS : POST /messages → { phone_number, message, inbox_id }
Tags : POST /tags (create), POST /contacts/{id}/tags (apply)
Contacts : GET /contacts?phone={phone}&limit=1
Saved Replies : Use for initial address request responses
Inbox IDs
Inbox ID Use Dispo A 128279 Channel 1 (personalized) + Channel 2 (CRMLS) + Channel 4 (PropStream) End Buyer CA 143887 Channel 3 (InvestorBase) — CA deals End Buyer FL 160031 Channel 3 (InvestorBase) — FL deals
Supabase (svueekfvfrvhylxygktb)
URL : https://svueekfvfrvhylxygktb.supabase.co
Key : Service role key in webhook handlers
Tables
Table Purpose deal_reviewsHubSpot deal mirror (15-min sync + real-time webhook) deal_review_activityAll deal events and changes dispo_blast_recipientsAll blast sends across 4 channels dispo_property_interestDetected buyer interest (address req, offer, showing) conversationsLead tracking with hot_lead_score salesmsg_inboxAll SalesMsg messages (inbound/outbound) salesmsg_eventsRaw webhook events call_eventsCall recordings, voicemails, transcripts messagesAll messages with conversation threading
Discord
Dispo Offers Webhook : Posts embed when offer detected
Alert channel : socal-dispo — OFFERS ONLY (not address requests)
External Sources
Source Auth Script CRMLS Playwright login (Cv47512) dispo-crmls-agent-blast.jsInvestorLift Cookie-based via gateway (:3848) dispo-investorbase-blast.jsPropStream Playwright login dispo-propstream-blast.js
Scripts
Script Purpose dispo-blast-engine.jsCore engine — triggers all 4 channels dispo-buyer-scorer.js10-factor buyer scoring (0-100) dispo-crmls-agent-blast.jsChannel 2 — CRMLS agent blast dispo-investorbase-blast.jsChannel 3 — InvestorBase end buyers dispo-propstream-blast.jsChannel 4 — PropStream flippers tag-automation-handler.jsTag suffix parsing + custom object creation hubspot-custom-object-manager.jsCRUD for Offers, Showings, Views, Referrals hubspot-deal-sync.js15-min HubSpot → Supabase sync
Webhooks
Endpoint Port Handler /webhook/hubspot18790 Deal property changes, stage changes /actions/dispo-blast18790 Trigger blast for a deal /webhooks/salesmessage18793 SalesMsg events → intent detection → auto-response
Skills (Claude Code) — added 2026-04-28
Dispo owns 1 skill covering buyer-side blast across 4 channels. READ the skill’s SKILL.md before working in this domain.
Skill Path Purpose Audit recipe dispo-blast~/.claude/skills/dispo-blast/4-channel buyer blast: InvestorBase end-buyers, CRMLS agents, PropStream flippers, showing-day. Wraps dispo-blast-engine.js (4-channel coordinator) + per-channel scripts (dispo-crmls-agent-blast.js, dispo-investorbase-blast.js, dispo-propstream-blast.js, showing-blast-generic.js, showing-blast-compiled.js, w4-broadcast-blast.js, audit-blast-responses.js) + IB scoring/history libs docs/HANDOFF-FOR-KIMI.md
Rules:
4 history checks BEFORE every blast: already-blasted (7d), recent-engagement (14d), saturation (≥3 in 7d), suppression
IB fit score ≥60 to send (zip 25%, beds 15%, price 20%, condition 20%, recent 10%, velocity 10%)
NEVER run any blast script without --dry-run unless Henry explicitly authorizes a live blast
Inbound replies route to acquisitions-followup skill (it handles classification across all channels)
Cross-reference: project_skill_suite_il_outreach_pipeline.md
Perplexity Pro (web research with citations)
Purpose: Real-time web data with citations — for per-deal research (comp validation, market context, CH/buyer-side intel) and nightly batch intel
Auth: Cookie session (Henry’s 20/ m o P ro pl an , 0 marginal cost per call)
Wrapper: /home/opsadmin/.openclaw/tools/perplexity-cookie-session/comprehensive_wrapper.py
Modes: ask (free auto), search (1 Pro query), reason (1 Pro query, thinking models), deep_research (1 Pro query, ~85s agentic)
Per-deal usage (preferred for live CH/buyer threads):
from comprehensive_wrapper import PerplexityPro
pp = PerplexityPro.from_env()
r = pp.search( "Recent comps for [address], 90d window" , model = "claude-sonnet-4.6" , sources = [ "web" ])
Nightly batch intel: /home/opsadmin/.openclaw/workspace/scripts/dispo_perplexity_collector.py — buyer-pool intel (4 cited queries: cash buyer activity, wholesale close signals, flipper demand, rate sensitivity). Output: /tmp/dispo-perplexity-intel-{date}.{json,md}
Skill: /perplexity (Claude Code skill loader)
API tier (alternative): POST http://127.0.0.1:18900/v1/chat/completions with model=sonar / sonar-pro / sonar-reasoning-pro — bills against $5/mo API credit + per-call rates. Use for high-volume / cached scenarios.
Quotas: 400 cookie Pro queries/day total (soft alert via daily_summary.py); 30 deep_research/day
KB: workspace/knowledge-base/perplexity/ (6 docs)