Connecting Customer.io
Send every call result to your players' Customer.io profiles, and send deposits and logins back so Milo can show which calls brought players back.
Connect Customer.io once and it works for all your campaigns. After every call Milo updates the player's Customer.io profile and sends a milo_call_completed event, so your journeys can follow up with the right email or text. Deposits and logins sent back from Customer.io show up as conversions in your campaign results.
Before you start
You need your Customer.io Site ID and tracking API key. In Customer.io, go to Workspace settings → API and webhook credentials. You also need to know which column in your player lists holds each player's Customer.io ID (for example cio_id).
Connecting
- 1
Open a campaign's settings
Go to Campaigns, open any campaign and click Settings. You'll also see the same card when you create a new campaign.
- 2
Fill in the Integrations card
Paste your Site ID and Tracking API key, choose your Region (US or EU), and enter the Player ID column from your CSV.
- 3
Click Connect Customer.io
We check the credentials with Customer.io before saving. The key is never shown again.
Once connected, the card shows the masked Site ID, region, ID column, when Milo last sent something, and the last error if one happened. Owners and admins can connect or disconnect Customer.io.
What Milo sends to Customer.io
After each call, the player's profile gets these attributes:
| Attribute | What it holds |
|---|---|
milo_last_call_at, milo_last_call_status | When Milo last called and how the call went |
milo_last_campaign, milo_last_outcome | Which campaign called, and the result |
milo_offer_accepted, milo_offer_declined | Whether the player took the offer |
milo_callback_requested, milo_callback_at | If the player asked to be called back, and when |
milo_feedback_score, milo_feedback_topic | What the player said about your brand |
milo_opted_out, milo_opted_out_calls | Whether the player asked not to be contacted, or not to be called |
milo_safer_gambling_flag | Milo noticed signs of harm. Stop marketing to this player. |
milo_wrong_person | Someone else answered |
milo_last_script | Which script the player heard in an A/B test |
Milo also sends a milo_call_completed event, which you can use to start or branch a journey.
Use milo_safer_gambling_flag and milo_opted_out as exit conditions in your journeys, so nobody who raised a concern or opted out gets another message.
Sending deposits and logins back
When connected, the card shows a secret Conversion webhook URL. In a Customer.io journey, add a Send webhook action that posts to it when a player deposits or logs in:
{
"player_id": "{{customer.id}}",
"event": "deposit",
"amount": 50.00,
"currency": "GBP",
"occurred_at": "{{event.timestamp}}",
"event_id": "{{event.id}}"
}
Use "event": "login" for a player who comes back without depositing. Sending the same event_id twice is ignored, so retries are safe. Treat the URL like a password.
No Customer.io? You can upload a deposits CSV from the campaign page instead.
Calling players from a Customer.io journey
To make a Milo call a step in a journey, for example "logged in but didn't deposit within 2 hours", use the campaign's trigger URL. See Starting calls from your CRM journeys.
Disconnecting
Click Disconnect on the card. Call results stop going to Customer.io, and the conversion webhook URL stops working. To swap keys, click Update credentials.
Was this helpful?
Related articles
Starting calls from your CRM journeys
Make a Milo call one step of a retention journey in Customer.io, Braze, Optimove, Fast Track or your own CRM, and get every call result back so the journey can branch.
Running an outbound calling campaign
Set up a campaign, upload your players, and follow it from the Campaigns page: dates, pausing and resuming, how many calls run at once, and what each tab shows.
A/B testing campaign scripts
Run up to five scripts side by side, see which one brings in more deposits, roll back to any earlier version, and send the winning script's name to Customer.io.