Skip to main content

Sales Intelligence — Get & Generate


Get Intelligence

Returns AI-generated intelligence + your personal note.

GET /api/v1/crs/listings/sales-intelligence/{listingId}?userId=agent_123

Response:

{
"listingId": "lst_abc",
"agentPitch": "Perfect for families seeking beachfront luxury. Private pool, included chef, and flexible cancellation.",
"conversionSignals": [
{ "type": "POSITIVE", "icon": "trend_up", "text": "High Conversion Probability" },
{ "type": "POSITIVE", "icon": "price_tag", "text": "15% cheaper than similar villas" },
{ "type": "NEGATIVE", "icon": "warning", "text": "Last 200m rough road" }
],
"salesTips": [
"Highlight the Full kitchen",
"Emphasize free cancellation",
"Distance from an already added property"
],
"bookingStats": {
"bookingsThisMonth": 12,
"lastBookedAgo": "2 days ago"
},
"humanReviewed": false,
"myNote": {
"note": "Swimming pool is very huge, great for kids",
"updatedAt": "2026-04-01T10:00:00Z"
}
}
Auto-Generation

If no intelligence exists or it's stale (older than 7 days), it's generated automatically on this GET call. If humanReviewed=true, it's never regenerated — returns the human-edited version as-is.


Admin Triggers

Single listing

POST /api/v1/admin/sales-intelligence/generate/{listingId}

Bulk (list of IDs)

POST /api/v1/admin/sales-intelligence/generate/bulk
Content-Type: application/json

["lst_abc", "lst_def", "lst_ghi"]

Response:

{ "generated": 2, "skipped": 1, "failed": 0 }

All active listings

POST /api/v1/admin/sales-intelligence/generate/all

Response:

{ "generated": 145, "skipped": 12, "failed": 3 }
Skipped

Human-reviewed listings are always skipped — AI will never overwrite them.


Set Booking Stats (Manual)

PUT /api/v1/admin/sales-intelligence/{listingId}/booking-stats
{ "bookingsThisMonth": 12, "lastBookedAgo": "2 days ago" }

Independent of AI — never overwritten by generation.