Intercom
Intercom is a customer messaging platform combining live chat, helpdesk, product tours, and lifecycle email for support and engagement.
Why route Intercom through Datafly Signal
- Profiles are updated from the server, not the browser. Events reach Intercom even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
- One consent decision governs every destination. Intercom is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Prerequisites
Complete these steps in Intercom before configuring Signal.
Access your Intercom workspace
Log in to app.intercom.com.
Create an access token
Navigate to Settings > Developers > Developer Hub, then click New app. Once created:
- Open the app’s Authentication tab.
- Copy the Access Token — this is a personal/test token that does not expire.
- For production, complete the Authorisation flow and use the OAuth access token (also long-lived).
Confirm your region
| Workspace URL | Region | API Base |
|---|---|---|
app.intercom.com | US | https://api.intercom.io |
app.eu.intercom.com | EU | https://api.eu.intercom.io |
app.au.intercom.com | AU | https://api.au.intercom.io |
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
access_token | secret | Yes | Intercom access token (Developer Hub > your app > Authentication). Sent as Authorization: Bearer <token>. |
api_host | string | Yes | Your region’s API host: api.intercom.io (US), api.eu.intercom.io (EU) or api.au.intercom.io (AU). |
intercom_version | string | Yes | The Intercom-Version header, for example 2.14. |
app_id | string | No | Only for loading the Intercom Messenger in the browser; server-side events do not use it. |
Signal Setup
- Navigate to Integrations in the sidebar and open the Integration Library tab.
- Find Intercom, click Install and fill in the fields above.
- Choose a preset (Default, SaaS or E-commerce) and click Install Integration.
Event Mapping
Signal sends custom events to the Data Events API (POST https://{api_host}/events). Each event goes to the contact matched by user_id or email; Intercom answers 404 for a contact it does not know (the event is not retried). Events with neither identifier are dropped.
| Signal event | Intercom event_name | Metadata | Presets |
|---|---|---|---|
sign_up | signed_up | signup_method, plan | all |
login | logged_in | login_method | all |
generate_lead | lead | lead_type, price | all |
purchase | placed_order | order_number, price | Default, E-commerce |
refund | refunded_order | order_number, price | E-commerce |
trial_started | trial_started | plan | SaaS |
subscription_started | subscription_started | plan, price | SaaS |
subscription_cancelled | subscription_cancelled | plan | SaaS |
price uses Intercom’s monetary type: {"amount": <minor units>, "currency": "gbp"}. created_at is the event time in UNIX seconds. Intercom keeps at most 10 metadata keys per event.
{
"event_name": "placed_order",
"created_at": 1758500000,
"user_id": "crm-user-7",
"email": "jane@example.com",
"metadata": { "order_number": "ORD-001", "price": { "amount": 12999, "currency": "gbp" } }
}Identity
| Field | Source | Notes |
|---|---|---|
user_id | user_id from datafly.identify() | Your stable customer ID. |
email | identify trait email (else properties.email) | Trimmed and lower-cased. Sent in clear: Intercom matches contacts by email and accepts no hash. |
No phone, name or address is sent. Contacts are created and updated by the Intercom Messenger or your own Contacts API integration; this destination only records events.
Consent
Intercom events are usually sent under the functional consent category (support and product messaging). Use marketing if you use them for marketing campaigns.
Verify it’s working
- Trigger a test event from your website.
- In Intercom, navigate to Contacts and search for the test contact by email or external ID.
- Click the contact and check the Events section for Signal-delivered custom events.
- In Signal, check Live Events to confirm delivery with a
200response status.
Troubleshooting
| Symptom | Possible Cause | Resolution |
|---|---|---|
401 Unauthorized | Invalid access token | Regenerate the token in Developer Hub > your app > Authentication. |
401 with a valid token on an integration created before 0.6.0 | Older delivery sent Bearer Bearer <token> | Fixed in the delivery spec; no action needed after upgrading Signal. |
| 404 for every event, or wrong region | The contact is unknown, or api_host does not match your workspace region | Check the workspace URL (app.eu.intercom.com is EU) and set api_host to match. |
| Event quota exceeded | Plan limit | Intercom enforces per-plan event limits. Reduce volume or upgrade the plan. |
Visit Intercom API documentation for full reference.
See also
- HubSpot — CRM with messaging
- Customer.io — behavioural messaging alternative
- Slack — internal team notifications