Issue
You may experience an intermittent issue where specific events are successfully landing in Segment but failing to reach the Iterable destination. When looking through the Delivery Overview and Event Delivery tabs in the Segment workspace, the missing events do not appear as failed deliveries, making it difficult to determine why the event is failing to reach the destination.
Product
Segment
Environment
Segment Console
Cause
If a user profile does not already exist in Iterable, the first event sent for that user must include an email address so Iterable can create the new profile.
When Segment sends an event to Iterable with only a userId and no email for a brand-new user, Iterable's API accepts the payload and returns a successful 200 OK response to Segment, but silently discards the event on their end because they cannot create the user profile. Because Segment receives a success response from Iterable, these events are categorized as "Successful Deliveries" in the Segment workspace, which is why they do not appear in the Event Delivery failure logs. For existing users, identifying them by just the userId is perfectly valid, which is why the issue only occurs intermittently.
Resolution
To resolve this issue and ensure events are successfully processed by Iterable for new users, follow these steps:
- Identify the specific tracking calls that are intermittently failing to appear in Iterable.
- Review the instrumentation and tracking code within your application that generates these events.
- Update the tracking code to ensure the email property is consistently populated and passed in the payload alongside the userId, particularly for events that might trigger for brand-new users.
- Alternatively, ensure an Identify call containing both the userId and email is sent to Segment prior to sending any subsequent Track events for new users.
Additional Information
Iterable enforces strict key naming conventions for user identification. You must send the email parameter to Segment as email. The email value cannot be passed in with any other key name in the payload. Sending the email in with a different key name (for example, customer_email, mail) will not allow Iterable's processes to understand that key holds the email value you want to use. The same strict condition applies to the userId field. Using keys other than email and userId causes payloads to be silently rejected by Iterable.