Outreach

Outreach is a sales engagement platform. Datafly Signal creates prospects in Outreach server-side (REST API v2, JSON:API POST /api/v2/prospects) when a visitor submits a lead form, requests a demo or signs up, so web leads reach sales sequences without a form integration.

Why route Outreach through Datafly Signal

  • Records come from your server, not the browser. They reach Outreach 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. Outreach is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.

Get your Outreach credentials

Create an Outreach app

In the Outreach Developer Portal create an app, open API access and add the prospects.read and prospects.write scopes. Copy the client ID and secret (the secret is shown once).

Get a refresh token

Complete the authorization-code flow once as an Outreach user who can create prospects and keep the refresh token. Outreach has no client-credentials grant for this API; Signal exchanges the refresh token for two-hour access tokens.

Configuration

FieldRequiredDescription
client_idYesThe Identifier of your Outreach connected application. Create one at the Outreach Developer Portal (developers.outreach.io) and request the prospects.read and prospects.write scopes.
client_secretYesThe Secret of your Outreach connected application. Used together with the refresh token to obtain short-lived access tokens.
refresh_tokenYesA long-lived refresh token obtained once via the Outreach authorization_code flow. Outreach does not support client_credentials, so this is required. Signal exchanges it for access tokens automatically.

Management UI setup

  1. Go to Integrations in the sidebar and open the Integration Library tab.
  2. Find Outreach 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/outreach/install \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Outreach",
  "variant": "default",
  "config": {
    "client_id": "your_client_id",
    "client_secret": "your_client_secret",
    "refresh_token": "your_refresh_token"
  },
  "delivery_mode": "server_side"
}'

What Signal sends

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

POST https://api.outreach.io/api/v2/prospects
 
{
  "data": {
    "attributes": {
      "addressCity": "Bath",
      "addressCountry": "GB",
      "addressState": "Somerset",
      "addressZip": "BA1 1AA",
      "campaignName": "autumn_launch",
      "company": "Acme Ltd",
      "emails": [
        "neill@example.com"
      ],
      "externalId": "0f8fad5b-d9cb-469f-a165-70867728950e",
      "firstName": "Neill",
      "lastName": "Mcfixture",
      "mobilePhones": [
        "+447700900123"
      ],
      "source": "google",
      "tags": [
        "Signal",
        "lead"
      ],
      "title": "Head of Growth",
      "websiteUrl1": "https://acme.example"
    },
    "type": "prospect"
  }
}
FieldSource
data.typeprospect.
data.attributes.emailsThe email from identify() traits, trimmed and lower-cased. Required: an event without one is not sent.
firstName, lastName, title, companyFrom traits.
mobilePhonesThe phone trait in E.164.
addressCity, addressState, addressZip, addressCountryFrom the address trait (or flat city, state … traits); the country is upper-cased.
websiteUrl1The website trait.
externalIdYour product user ID.
source, campaignNameThe UTM source and campaign.
tagsSignal and the event (lead, demo-request, signup, trial, content-download).

A prospect is a contactable sales record keyed by email, and Outreach has no hashed identifier, so email, name and phone are sent in plain text to your own Outreach instance. name is read-only in the API and is not sent.

Presets

PresetSignal events
Lead Capture (default)generate_lead, demo_requested, sign_up
B2B / SaaS (saas)generate_lead, demo_requested, sign_up, trial_started, content_downloaded

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

Notes and limits

  • The call creates a prospect. Outreach rejects a second prospect with the same email (422), so a repeat submission from a known prospect is not an update; it is recorded as a permanent failure.
  • Outreach has no server-side event ingestion API, so page views and product events are not sent.

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

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 Outreach.
  3. Find the record in Outreach and check it arrived.

Troubleshooting

SymptomResolution
401The refresh token has expired or been revoked; authorise the app again.
403The app lacks the prospects.write scope.
422A prospect with this email already exists, or an attribute is invalid.
Nothing sent for an eventThe visitor had no email in identify() traits.