Sync your pipeline to a CRM
Use WinLayer's governed Salesforce, HubSpot, Dynamics, and Unanet connectors, or reconcile another CRM through the scoped public API.
Built-in path: workspace Owners and Admins connect an approved provider in the Integrations console, define tenant field and stage mappings, test the account, then run a pull or push. Live authorization requires that your organization has configured the provider application or Unanet Compass credential.
Built-in launch support
| Provider | Launch level | Executable actions |
|---|---|---|
Salesforce | Level 3 | Verify the account, pull and push opportunities, create follow-up tasks, retain cursors and per-record provenance, and replay failed runs. |
HubSpot | Level 3 | Read contacts, pull and push deals, create follow-up tasks, apply tenant mappings and deterministic conflict rules, and replay failed runs. |
Microsoft Dynamics | Level 2 | Pull and push opportunities through a constrained Dataverse base URL with tenant mappings, cursors, health, retry, and replay. |
Unanet CRM | Level 2 | Verify and synchronize opportunities with encrypted tenant-owned Compass credentials; WinLayer does not invent a global Unanet OAuth application. |
API reconciliation for another CRM
Two complementary mechanisms — use both: webhooks for instant pushes when someone pursues/passes, and a polling sweep of /public/pipeline as the reconciliation loop that heals anything a missed delivery skipped.
1. Poll the pipeline
curl -s -H "Authorization: Bearer $WINLAYER_KEY" \
"https://api.winlayer.ai/api/v1/public/pipeline?status=pursuing"Each item carries the scored opportunity plus your team's decision:
{
"count": 1,
"pipeline": [
{
"id": "43eeed69-…",
"title": "Enterprise Cloud Migration under NASA SEWP V",
"agency": "NASA.GODDARD SPACE FLIGHT CENTER",
"fitScore": 80,
"winProbability": 64,
"pursuitStatus": "pursuing",
"trackedAt": "2026-07-14T11:32:00.000Z"
}
]
}2. Map statuses to CRM stages
| WinLayer | Typical CRM stage | Note |
|---|---|---|
pursuing | Qualification / Capture | Create or advance the opportunity record; attach fitScore + winProbability as fields. |
watching | Prospecting | Track without committing pipeline value. |
passed | Closed–No bid | Close the record; keep the reason for win/loss analytics. |
3. Upsert rules that hold up
- Key CRM records on the WinLayer
id(signal id) in an external-id field — it is stable across polls. - Poll every 5–15 minutes; one page of pipeline is a single request, so you stay far under the 120/min limit.
- Let WinLayer own
pursuitStatus; let the CRM own everything downstream (amounts, close dates, owners). - Wire
opportunity.pursuit.setwebhooks (receiver guide) for real-time updates between sweeps.