Salesloft

Salesloft is a sales engagement platform. Datafly Signal upserts People in Salesloft server-side (POST /v2/person_upserts, keyed on email_address), so inbound leads and sign-ups reach your reps and a repeat visit updates the same person.

Why route Salesloft through Datafly Signal

  • Records come from your server, not the browser. They reach Salesloft even when a tracker blocker or a failed page unload would have dropped a client-side call, and no form integration or browser tag is needed.
  • Delivery is queued and retried. Signal buffers to Kafka and retries on 429 or a transient failure rather than dropping the event; a permanent rejection goes to the dead-letter queue with the vendor’s reason.
  • One consent decision governs every destination. Salesloft is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.

Get your Salesloft credentials

Create an API key

In Salesloft open Your Applications > API Keys and create a key with People write access. Signal sends it as Authorization: Bearer.

Configuration

FieldRequiredDescription
api_keyYesSalesloft API key with People (Person Upsert) scope. Generate it in Salesloft under Your Applications > API Keys > Create New. Sent as an Authorization: Bearer header; stored encrypted.

Management UI setup

  1. Go to Integrations in the sidebar and open the Integration Library tab.
  2. Find Salesloft under CRM and click Install.
  3. Choose a preset, enter the fields above and click Install Integration.

Management API setup

curl -X POST http://localhost:8084/v1/admin/integration-catalog/salesloft/install \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Salesloft",
  "variant": "lead_capture",
  "config": {
    "api_key": "your_api_key"
  },
  "delivery_mode": "server_side"
}'

What Signal sends

An example request, rendered from the lead_capture preset for generate_lead:

POST https://api.salesloft.com/v2/person_upserts
 
{
  "city": "Bath",
  "country": "GB",
  "email_address": "neill@example.com",
  "first_name": "Neill",
  "last_name": "Mcfixture",
  "person_company_name": "Acme Ltd",
  "person_company_website": "https://acme.example",
  "phone": "+447700900123",
  "state": "Somerset",
  "title": "Head of Growth",
  "upsert_key": "email_address"
}
FieldSource
upsert_keyemail_address.
email_addressThe email, trimmed and lower-cased. Required: an event without one is not sent.
first_name, last_name, title, person_company_name, person_company_websiteFrom traits (company, website).
phoneThe phone trait in E.164.
city, state, countryFrom the address trait; the country is upper-cased.

Salesloft upserts the person by email and contacts them directly, and has no hashed identifier, so email, name and phone are sent in plain text to your own Salesloft account.

Presets

PresetSignal events
Lead Capture (lead_capture)generate_lead, sign_up, identify
B2B / SaaS (saas)generate_lead, demo_requested, sign_up, trial_started, identify

Events not listed are not sent. Each preset is a starting point: add, rename or remove mappings on the installed integration.

Notes and limits

  • Tags and custom fields are not sent: the upsert replaces a person’s tags, and custom fields must exist in your team’s settings. Add custom_fields.<name> mappings on the installed integration for fields you have created.

Assign the consent category you use for this processing when you install Salesloft, so an event is delivered only when the visitor has granted it. Signal never writes a cookie-banner choice into Salesloft’s contact permissions (do_not_contact, contact_restrictions): consent to cookies is not consent to be emailed, called or messaged. Record communication opt-in and opt-out in Salesloft.

Verify it’s working

  1. Open the integration in the Signal Management UI and watch Live Events while you trigger a mapped event.
  2. Confirm a 2xx response from Salesloft.
  3. Find the record in Salesloft and check it arrived.

Troubleshooting

SymptomResolution
401The API key is wrong or revoked.
422More than one person matches the email (intentional duplicates are enabled), or a value is invalid.
Nothing sent for an eventThe visitor had no email in identify() traits.