InvestorLift Marketplace Hub

InvestorLift is the primary wholesale deal marketplace sourcing ~3,600 active deals across 48 US states. This hub covers data ingestion pipeline, the AWS Mac Ultra hard dependency, cookie auth lifecycle, deal enrichment (Apollo + Hunter), and the OSIL strategic displacement track (B13). Read this hub before any InvestorLift scraping, sync, enrichment, or cookie operation. All VPS-side API attempts will 403 — see the mandatory routing rule below.

⚠️ MANDATORY: Scraping ALWAYS via AWS Mac Ultra

The Linux VPS (Hostinger) IP is CloudFront-blocked by InvestorLift. All API calls from the VPS return 403 Request blocked regardless of cookie freshness or auth headers.

EnvironmentStatusUse For
AWS Mac Ultra (ec2-user@100.123.248.46, Tailscale)✅ RequiredALL API calls, cookie refresh, detail enrichment
Linux VPS (/home/opsadmin)❌ Blocked (403)Supabase sync, HubSpot sync, analytics ONLY (reads cached data)

SSH pattern:

ssh -i ~/.ssh/openclaw-mac.pem ec2-user@100.123.248.46

Cookie file (Mac only): /Users/ec2-user/openclaw/workspace/data/investorlift-cookies-raw.txt

  • Format: browser cookie STRING (single line, semicolon-separated), NOT Netscape tab-separated
  • Copying cookies to VPS does NOT bypass the IP block
  • See feedback_il_enrichment_runs_on_mac_ultra — mandatory pre-read for any IL work

⚠️ AWS Mac Ultra status: Instance was impaired since 2026-05-02 22:15 UTC (EBS state preserved). Resume via AWS Console reboot before running any IL operations. See aws for current status.


Quick reference

FieldValue
VendorInvestorLift
URLhttps://investorlift.com
KB docAPI
Auth methodSession cookies (oid-token JWT, valid 30 days)
Auth credentialCookie file at Mac: /Users/ec2-user/openclaw/workspace/data/investorlift-cookies-raw.txt — managed by cookie refresh script; no 1Password entry (session-only)
Cred-proxy portn/a (session cookie auth, not API key)
Execution hostAWS Mac Ultra ONLY (ec2-user@100.123.248.46)
SSH key~/.ssh/openclaw-mac.pem
Webhook portn/a (outbound pull only — no inbound webhook)
Webhook handlern/a (outbound pull only)
Tunnel pathn/a
Outbound API basehttps://investorlift.com/marketplace/api/customer/api/
Rate limits~3+ rapid requests → 429; enforce 1,500ms delay between detail calls
Rate-limit action429 → wait 1,500ms + retry; abort batch if sustained; Discord ops alert
S3 image URLhttps://s3.us-east-2.amazonaws.com/sendlift/property-images/{ID}.jpg (public-read, no auth)
CostIL subscription fee (separate); AWS Mac instance charges
Backup/recoverySupabase il_deals table — append-only upsert; full re-sync any time from IL API (via Mac)
Discord alert channelops
Drift cadenceDaily sync (investorlift-daily-sync.sh via Mac)
Statusproduction

APIs

List API — All Active Deals

GET https://investorlift.com/marketplace/api/customer/api/properties?status=available
  • Returns JSON columns (field names) + data (33-element arrays per deal)
  • ~3,604 active deals, 48 states (as of 2026-04-27); ~1.1MB response
  • Field index 0=id, 3=title, 5=city, 8=price, 10=arv_estimate, 16=state_code, 19=arv_percentage

Detail API — Single Deal Enrichment

GET https://investorlift.com/marketplace/api/customer/api/properties/{id}
  • Returns: dispositions_manager (name, email_verified_at, twilio_phone_number_id), account (company title), description (HTML), condition, occupancy, repair_estimate_min/max, min_emd, expires_at, zestimate, property_page_url, matterport_url
  • NOT provided: contact email, contact phone, full street address
  • Rate limit: 1,500ms inter-call delay required

Address Reveal API

GET /marketplace/api/customer/api/property-address-request?property_id={id}&type=address_request
  • Requires oid-token JWT cookie (30-day session)
  • Returns {"result": {"full_address": "123 Main St, City, CA 90000"}} if account has credits
  • Alternative: Reverse geocode via lat/lon (Detail API always returns coordinates) → Google Maps Geocoding at $0.005/call

  1. SSH to Mac Ultra: ssh -i ~/.ssh/openclaw-mac.pem ec2-user@100.123.248.46
  2. cd ~/openclaw && node scripts/mac-cookies.js
  3. Cookies auto-saved to ~/openclaw/data/investorlift-cookies-raw.txt
  4. Copy for reference only: scp -i ~/.ssh/openclaw-mac.pem ec2-user@100.123.248.46:~/openclaw/data/investorlift-cookies-raw.txt /home/opsadmin/.openclaw/workspace/data/
  5. Validate: oid-token JWT valid for 30 days from last login

Cookie extraction for curl:

OID_TOKEN=$(cat ~/openclaw/data/investorlift-cookies-raw.txt | tr ";" "\n" | grep "oid-token=" | sed "s/.*oid-token=//" | tr -d " ")

Components

  • workspace/scripts/investorlift-daily-sync.sh — full pipeline orchestrator; must run from Mac via SSH
  • workspace/scripts/sync-il-api-to-supabase.js — Supabase upsert (runs on Linux, reads cached JSON from Mac)
  • workspace/scripts/enrich-il-deals-detail-api.js — detail enrichment per-deal (must run on Mac)
  • workspace/scripts/investorlift-refresh-cookies.js — cookie refresh (must run on Mac; Mac-adapted as mac-cookies.js)
  • workspace/scripts/workers/acq-deals-hs-syncer.js — HubSpot sync (runs on Linux after Supabase upsert)
  • workspace/investorlift/scripts/region-classifier.js — regional queue splitter (CA/AZ/NV priority)
  • workspace/scripts/lib/il-folder-photos.js — S3 image extraction pattern (proven: SSH → curl → parse HTML → build S3 URLs)

How it’s used

  • Daily sync trigger: investorlift-daily-sync.sh via cron (Mac) → List API → parse 33-element arrays → Supabase il_deals upsert (via VPS) → HubSpot acq deal creation via hubspot-deal-ingest → enrichment worker queues detail API calls (Mac)
  • Deal ingest to HubSpot: acq-deals-hs-syncer.js reads il_deals rows → calls createDealFromParsed() → dual-pipeline write (acq 877963314 + dispo 816046)
  • Agents involved: _summary (deal processing, scoring), _summary (outreach approval)
  • Failure mode: VPS-side API call → 403 CloudFront block (silent failure); Cookie expiry → 401 on all IL endpoints; Mac instance impaired → all IL operations blocked
  • Success criteria: il_deals table updated with fresh deal list, enrichment rows populated for top-priority deals (score, arv_pct, contact info), HubSpot acq deals created for qualifying deals

Contact enrichment flow

IL Detail API does NOT return contact phone or email. Enrichment chain:

  1. dispositions_manager.name + account.title → Apollo company lookup
  2. Apollo → Hunter.io domain search → contact email
  3. Results stored in wholesaler_contacts Supabase table
  4. See il-marketplace-pull v2 enrich-contacts.js component

Contact precedence rule: feedback_il_contact_precedence_rule — InvestorBase skip-trace > API contact > manual

Price and deal scoring

⚠️ OSIL Strategic Displacement Track (B13)

osil-il-ai-replication-2026-05-03 — B13 blocker (pending Henry decision).

The OSIL plan proposes replicating InvestorLift’s AI buyer-matching capability using the OpenClaw stack (Voyage-4 embeddings + GEPA optimizer + LLM-as-judge scorer). This is a strategic displacement track — the goal is to match IL’s buyer-property scoring natively, reducing dependency on IL subscription and building proprietary match quality.

Current blockers:

  • B13: IL AI replication feasibility — requires evaluation dataset (IL deal + buyer history export)
  • Dependent on OSIL Phase 5 (vector store + Voyage-4 fleet wiring)
  • InvestorBase buyer data required as match corpus (see supabaseinvestor_base_contacts table)

Until B13 is ratified: IL remains the authoritative deal source. Do not bypass IL subscription.


Agents that touch this

  • _summary — primary consumer of IL deals; scores, stages, dispatches outreach
  • _summary — approves IL deal-to-HubSpot writes; handles inbound CH reply routing

Skills that invoke this

  • il-marketplace-pull — v2 pipeline; wraps sync-il-api-to-supabase.js, enrich-il-deals-detail-api.js, investorlift-daily-sync.sh, investorlift-refresh-cookies.js + net-new: enrich-contacts.js (Apollo+Hunter enrichment → wholesaler_contacts), account-rollup.js, cookie-status.sh
  • hubspot-deal-ingest — receives enriched IL deal → dual-pipeline HubSpot write

Plans that govern this

Feedback rules

KB / source docs

  • API — endpoint reference, field mapping (33-element array), cookie format, enrichment availability table

System maps

Peer hubs in the deal-source CRM cluster:

  • hubspot — all IL deals flow into HubSpot via hubspot-deal-ingest; acq pipeline 877963314 receives IL-sourced deals
  • supabaseil_deals table is the VPS-side cache; wholesaler_contacts stores enriched contact data

InvestorLift has a hard AWS Mac Ultra dependency — it is NOT a standalone integration:

  • aws — Mac Ultra host (ec2-user@100.123.248.46); SSH key ~/.ssh/openclaw-mac.pem; instance currently impaired (see aws hub for status + reboot instructions); ROOT KEY ROTATION P0 pending. Forward-ref: W1-S7 authors the aws hub.
  • hetzner — VPS host; receives Supabase sync output from IL pipeline (Linux-safe leg only)
  • cloudflare — DNS + tunnel; not on IL ingestion path but governs FUNNEL-REGISTRY

InvestorLift uses session cookie auth (not API key), but AWS Mac Ultra credentials (used for SSH-based scraping) come from 1Password.

  • 1password — credential vault anchor
  • Cookie file: /Users/ec2-user/openclaw/workspace/data/investorlift-cookies-raw.txt (on AWS Mac Ultra)
  • AWS Mac SSH key: ~/.ssh/openclaw-mac.pem (op://Aurora/aws/openclaw-mac-ssh-key)
  • Memory: reference_il_marketplace_pipeline

Open issues / TODOs

  • AWS Mac Ultra instance impaired since 2026-05-02 22:15 UTC — resume before next IL sync run
  • B13 decision pending Henry: ratify or defer OSIL IL AI replication track
  • Cookie expiry monitoring: cookie-status.sh (in il-marketplace-pull v2) should alert 3 days before oid-token expiry
  • Address reveal credits: verify account credit balance before running address-request batch
  • Detail API rate limit: 1,500ms inter-call delay is empirical — re-validate if IL tightens limits

Recent activity

  • 2026-04-27: Live API verification from Mac Ultra; field mapping confirmed (33-element array)
  • 2026-04-29: Address reveal endpoint verified via Playwright network intercept; public_address never returns street address in API
  • 2026-05-03: hub created (Wave 1 W1-S3)