Skip to content

The CRM you already use

Keep the CRM you know: your agents keep its contacts, companies and deals in step with your records, in the direction you choose.

Connect
Sign in once, 4 grants
Runs through
Your account
First run
See what one sync would change, record by record, free on your account
Sites
None, it holds your records
Integration.sync
You, to your agent

Show me what one sync with my CRM would change, with my records leading.

curl -X POST "https://api.sb/leaseline.app/integrations/sync?mode=try" \
  -H "Authorization: Bearer $SB_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"integration":"integrations/crm-mirror"}'
npx startup-builder do Integration.sync --try --data '{"integration":"integrations/crm-mirror"}'
{
  "name": "do",
  "arguments": {
    "mode": "try",
    "code": "return await $.Integration.sync({ integration: 'integrations/crm-mirror' })"
  }
}
import { $ } from 'startup-builder'

const result = await $.try.Integration.sync({ integration: 'integrations/crm-mirror' })
Response
{
  "$type": "Integration",
  "mode": "try",
  "stored": false,
  "system": "crm",
  "direction": "mirror",
  "wouldChange": {
    "contacts": {
      "create": 41,
      "update": 12
    },
    "organizations": {
      "create": 18,
      "update": 3
    },
    "deals": {
      "create": 5,
      "update": 2
    }
  },
  "conflicts": [
    {
      "record": "contacts/rosa-northgate",
      "field": "title",
      "ours": "Owner",
      "theirs": "Property Manager",
      "wins": "ours"
    }
  ]
}
Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns

Connect once

  1. Call Integration.connect with system: 'crm' and the mode you want, then open the connectUrl it returns and sign in to your CRM as an admin.
  2. Choose the direction. mirror writes your records out, so your team sees every Contact, deal and Meeting in the CRM; import turns each edit made in the CRM into a Change here.
  3. Pick the pipeline and the fields to keep in step; a field you leave out stays where it is.
GrantWhat it unlocksScope
ContactsPeople, read and written in the direction you chosecontacts: read, write
CompaniesThe Organizations they work atcompanies: read, write
DealsDeals and their stages in one pipelinedeals: read, write
ActivityEach Message and Meeting logged on the record’s timelineactivities: write
ToDo this
PauseIntegration.pause stops every sync at once and keeps the cursor; Integration.resume picks up the changes made meanwhile, once each.
ReconnectIntegration.reconnect returns a fresh connectUrl that lasts one hour, and keeps the Integration’s id and cursor, so nothing imports twice.
DisconnectIntegration.revoke revokes the token with your CRM; every record stays on both sides, and nothing is deleted from either.

What your agents do

AskVerbRuns throughPrice
Keep my contacts, companies and deals in step with the CRM, my records leading.Integration.syncYour accountFree
Bring my existing CRM records in once, then keep them in step.Integration.connectYour accountFree
Qualify this lead and open its deal in both places.Lead.qualifyYour accountFree
Move the Northgate deal to proposal, and show it in the CRM.Deal.advanceYour accountFree

Calls on your own account are free.

What it holds

NounThe account’s objectWhenWhich side leads
Contactcontact or personIn mirror: your agents write it outYour records
Contactcontact or personIn import: your team edits it in the CRM, and the edit arrives as a ChangeThe account
Organizationcompany or accountIn the direction you choseYour records
Dealdeal or opportunityIn the direction you choseYour records
MeetingactivityA Meeting is booked or heldYour records
MessageactivityA Message is sent or receivedYour records

Events and webhooks

DirectionEvent
EmitsIntegration.synced, Lead.qualified, Deal.advanced
Hears record created or changedBecomes Integration.synced

Any Event can wake a Workflow, and a Watch delivers it to your endpoint, signed (Events and webhooks).

Limits

WhatLimitCall
DirectionOne per Integration. Your records stay the record in both modes, and the side you declared leads every conflictEvery call
The first syncReads every record once; each later run reads only what changed since the cursor, so a run takes secondsIntegration.sync
StagesMap one to one onto the pipeline you picked; a stage with no match refuses with venue-rejected and names itLead.qualify

Field map

Our fieldThe CRM you already use’s fieldNotesCalls
Lead.statuslead status or lifecycle stageWhichever your CRM keepsLead.qualify
Lead.fitfitA field the platform adds: strong, partial or noneLead.qualify
Lead.ownerownerNone.Lead.qualify

What try does here

Reads your CRM and returns what one sync would change on each side, record by record; nothing is written to either.

How long a connection lasts

A connection lasts until you revoke it in your CRM’s settings; the platform refreshes the token before it lapses.

The platform asks you to reconnect 7 days before it runs out; until you do, a call that needs it refuses with needs-reauth.

Plays and strategies

Used by

Reference

4 calls, each with its path and price
CallPathPrice
Integration.syncPOST /integrations/syncFree
Integration.connectPOST /integrations/connectFree
Lead.qualifyPOST /leads/qualifyFree
Deal.advancePOST /deals/advanceFree

Contents