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.
| Environment | Status | Use For |
|---|---|---|
AWS Mac Ultra (ec2-user@100.123.248.46, Tailscale) | ✅ Required | ALL 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.46Cookie 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
| Field | Value |
|---|---|
| Vendor | InvestorLift |
| URL | https://investorlift.com |
| KB doc | API |
| Auth method | Session cookies (oid-token JWT, valid 30 days) |
| Auth credential | Cookie 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 port | n/a (session cookie auth, not API key) |
| Execution host | AWS Mac Ultra ONLY (ec2-user@100.123.248.46) |
| SSH key | ~/.ssh/openclaw-mac.pem |
| Webhook port | n/a (outbound pull only — no inbound webhook) |
| Webhook handler | n/a (outbound pull only) |
| Tunnel path | n/a |
| Outbound API base | https://investorlift.com/marketplace/api/customer/api/ |
| Rate limits | ~3+ rapid requests → 429; enforce 1,500ms delay between detail calls |
| Rate-limit action | 429 → wait 1,500ms + retry; abort batch if sustained; Discord ops alert |
| S3 image URL | https://s3.us-east-2.amazonaws.com/sendlift/property-images/{ID}.jpg (public-read, no auth) |
| Cost | IL subscription fee (separate); AWS Mac instance charges |
| Backup/recovery | Supabase il_deals table — append-only upsert; full re-sync any time from IL API (via Mac) |
| Discord alert channel | ops |
| Drift cadence | Daily sync (investorlift-daily-sync.sh via Mac) |
| Status | production |
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-tokenJWT 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
Cookie refresh lifecycle
- SSH to Mac Ultra:
ssh -i ~/.ssh/openclaw-mac.pem ec2-user@100.123.248.46 cd ~/openclaw && node scripts/mac-cookies.js- Cookies auto-saved to
~/openclaw/data/investorlift-cookies-raw.txt - 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/ - Validate:
oid-tokenJWT 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 SSHworkspace/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 asmac-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.shvia cron (Mac) → List API → parse 33-element arrays → Supabaseil_dealsupsert (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.jsreadsil_dealsrows → callscreateDealFromParsed()→ 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_dealstable 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:
dispositions_manager.name+account.title→ Apollo company lookup- Apollo → Hunter.io domain search → contact email
- Results stored in
wholesaler_contactsSupabase table - See il-marketplace-pull v2
enrich-contacts.jscomponent
Contact precedence rule: feedback_il_contact_precedence_rule — InvestorBase skip-trace > API contact > manual
Price and deal scoring
- feedback_il_dispo_price_formula — RERI dispo price formula from IL arv/price data
- feedback_il_acq_negotiation_mindset — negotiation approach for IL wholesale deals
- ARV percentage threshold: typically ≤70% arv_percentage for viable acquisition
- Gross margin field available in List API (index 20)
⚠️ 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 supabase —
investor_base_contactstable)
Until B13 is ratified: IL remains the authoritative deal source. Do not bypass IL subscription.
Cross-links
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
- openclaw-self-improvement-layer-2026-05-03 — OSIL master plan; B13 IL AI replication sub-track
- osil-il-ai-replication-2026-05-03 — B13 displacement track (Voyage-4 + GEPA + LLM-as-judge)
- supabase-substrate-proactive-intelligence-2026-05-01 —
il_dealssubstrate; 73-table CCP project
Feedback rules
- reference_il_marketplace_pipeline — working curl/cookie pattern (supersedes Playwright for IL); read FIRST for IL data ingestion
- feedback_il_enrichment_runs_on_mac_ultra — MANDATORY: all IL API calls must originate from Mac Ultra, not VPS
- feedback_il_acq_negotiation_mindset — CH negotiation approach for IL wholesale deals
- feedback_il_contact_precedence_rule — InvestorBase skip-trace > API contact > manual
- feedback_il_dispo_price_formula — RERI dispo price formula from IL arv/price data
KB / source docs
- API — endpoint reference, field mapping (33-element array), cookie format, enrichment availability table
System maps
- data-flow — IL → Supabase → HubSpot data flow
- vm-osil-overview — OSIL strategic overview (includes B13 track)
- il-pipeline — InvestorLift pipeline detail
Related: Deal-source CRMs
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
- supabase —
il_dealstable is the VPS-side cache;wholesaler_contactsstores enriched contact data
Related: Infra/compute cluster
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 currentlyimpaired(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
Related: Credential layer cluster
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
impairedsince 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 beforeoid-tokenexpiry - 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_addressnever returns street address in API - 2026-05-03: hub created (Wave 1 W1-S3)