Oracle Eloqua: Telltide Seed Address Guide
Place Telltide seeds in Eloqua contact lists and campaigns.
Oracle Eloqua has no native seed address or test profile concept. The standard workaround is to create seed contacts in the Eloqua contact database and target them through a dedicated segment added as a second audience element on the Campaign Canvas. This is a critical constraint: Eloqua can only send test/proof emails to existing contacts in its database - you cannot send to an arbitrary email address that does not exist as a contact record.
Quick reference
| Send type | Where to add seeds | Complexity |
|---|---|---|
| Scheduled (Campaign) | Create seed contact in DB; add to dedicated segment included in Campaign Canvas audience | Low-Medium |
| Ongoing (Campaign Canvas flow) | Create seed contact; place seed segment in campaign canvas entry or add as standalone Segment Members element | Medium |
1. Scheduled / one-off sends (Email Campaigns)
Eloqua Email Campaigns are one-time sends configured in the Campaign Canvas. The audience is defined by Segment Members elements connected to the canvas flow. Seeds must exist as contact records and be members of a segment targeting them.
Where to add seed addresses
Create a seed contact in the Eloqua contact database, then add that contact to a dedicated "Telltide Seeds" segment. Include that segment as an additional Segment Members element in the Campaign Canvas flow, feeding into the same Email Send step as the main audience.
Step-by-step: Create a seed contact via UI
- Navigate to Audience > Contacts
- Click New Contact (or the + button)
- Enter the seed email address (required; must be globally unique in the account)
- Fill in First Name, Last Name, and any additional fields used in email personalization
- Click Save
- Add the contact to your "Telltide Seeds" static segment
Step-by-step: Create a seed contact via REST API
POST https://{base_url}/api/REST/1.0/data/contact
Authorization: Basic {{base64(SiteName\Username:Password)}}
Content-Type: application/json
{
"emailAddress": "seed@example.com",
"firstName": "Seed",
"lastName": "Monitor",
"fieldValues": [
{
"id": "{{field_id}}",
"value": "field_value"
}
]
}
Authentication: HTTP Basic Auth using SiteName\Username as the username and the account password. The SiteName\ prefix is mandatory.
Find custom field IDs:
GET https://{base_url}/api/REST/1.0/assets/contact/fields
Returns all contact field definitions with their IDs. Use these IDs in the fieldValues array.
Base URL format: https://secure.p01.eloqua.com (or your instance-specific URL, visible in your Eloqua login URL).
Step-by-step: Add seed to Campaign Canvas
- In the Campaign Canvas, locate the Audience section on the canvas
- Drag a Segment Members element onto the canvas
- Double-click it and select your "Telltide Seeds" segment
- Connect this element to the same Email Send step as your main audience segment
- Both segments now feed into the same email send
Profile attributes required
Seeds need:
- Email address (globally unique; Eloqua enforces uniqueness at the platform level)
- Not on the global unsubscribe list
- Values for any merge fields referenced in the email template (otherwise the field renders blank or with the configured default value)
Ensuring seeds receive the same version as real recipients
Dynamic content rules: Eloqua supports dynamic content within email templates. The seed receives the dynamic content block matching its own contact field values. Populate the seed's fields to match the recipient segment you want to monitor.
A/B testing: Eloqua supports A/B testing at the Campaign Canvas level. Each variant has its own Send step. Add the seed segment to each variant to monitor all versions.
Gotchas
Email uniqueness is platform-enforced. Eloqua does not allow two contacts with the same email address. If a seed email already exists in the database, attempting to create a new contact with that email returns an error (or updates the existing record depending on the API call).
Global unsubscribe blocks all sends. If a seed contact is globally unsubscribed, it receives no emails from the account. Verify the contact's subscription status before testing. To re-subscribe a globally unsubscribed contact: update the contact's Email Address Status field to Active via the REST API or UI.
2. Ongoing / automated journeys (Campaign Canvas flows)
Eloqua Campaign Canvas flows are automated multi-step sequences. Contacts enter via Segment Members elements, then progress through Email Send, Wait, and Decision elements based on their behavior and field values.
Campaign Canvas element types
| Element | Function | Seed approach |
|---|---|---|
| Segment Members | Entry point - contacts in a segment enter the flow | Add seed to the targeted segment |
| Email Send | Sends an email | Seed receives it if it entered the canvas flow |
| Wait | Delays progression for a set duration | Seed waits the same amount of time |
| Compare Contact Field | Branches based on field value | Set seed's field to match expected path |
| Email Open?/Clicked? | Branches based on email engagement | Seed must open/click to take the positive branch |
| Add to List / Update Contact | Data management actions | Seed contact is updated like any real contact |
Creating trap profiles per journey type
Welcome / onboarding (Segment entry)
- Entry: Segment Members element targeting "new subscribers" or a static segment for new opt-ins
- Seed requirements: Contact record with email address, subscription status Active
- How to trigger: Add the seed contact to the entry segment. The next Campaign Canvas execution (typically on Campaign activation) moves the seed through the flow.
Abandoned cart
- No native abandoned cart trigger in Eloqua Canvas. Workaround: use an external system (ecommerce platform, CDP, or middleware) to add contacts to a dedicated "Abandoned Cart" segment in Eloqua when they abandon. The Canvas flow has a Segment Members entry targeting that segment.
- Seed requirements: Contact with cart data fields (product name, cart value, cart URL) populated
- How to trigger: Add the seed to the "Abandoned Cart" segment manually, or populate the cart fields via the REST API Update Contact call to trigger the segment membership rule
Browse abandonment
- No native browse trigger. Same workaround as abandoned cart - external tracking system updates a contact field or segment membership when browse abandonment is detected.
- Seed requirements: Contact with product browse data fields populated
Winback / re-engagement (Date-based segment filter)
- Entry: Segment Members element targeting a filter-based segment:
Last Purchase Date is before [X days ago] - Seed requirements: Contact with a custom
Last Purchase Datefield set to a date older than the lapse threshold - Date format for API: Unix timestamp (milliseconds since epoch) or
MM/DD/YYYY HH:MM:SSdepending on API version
Set the field via REST API:
PUT https://{base_url}/api/REST/1.0/data/contact/{contact_id}
{
"fieldValues": [
{
"id": "{{last_purchase_date_field_id}}",
"value": "01/01/2025 00:00:00"
}
]
}
Post-purchase (Segment entry)
- Entry: Segment Members element targeting a "recent purchasers" segment, populated by an ecommerce integration
- Seed requirements: Contact with order data fields (order ID, total, product) populated
Birthday / anniversary (Date-based segment filter)
- Entry: Segment Members element targeting a segment with filter:
Birth Date dynamically equals Today - Seed requirements: Contact with
Birth Datecustom field set to today's date (month and day match) - Date field type: Must be a Date-type field in Eloqua. Format for API:
MM/DD/YYYYor Unix timestamp (milliseconds)
Example segment filter: Contact Field "Birth Date" is [Date] dynamically equals [Today] - this evaluates daily and matches contacts whose birth month and day equal today's date (ignoring year).
For same-day testing: Set the seed's Birth Date field to today's date. At the next Canvas execution run, the segment includes the seed.
How to reset seeds for repeated Canvas testing
Re-activation: Campaign Canvas flows typically process contacts once per campaign run. To re-test with the same seed:
- Remove the seed from the entry segment
- Deactivate the campaign (if required to reset contact processing state)
- Re-add the seed to the entry segment
- Re-activate the campaign
Clone the campaign: For repeated A/B testing, clone the campaign. Each cloned instance processes contacts independently.
3. Platform-specific considerations
API options
Create contact:
POST https://{base_url}/api/REST/1.0/data/contact
Authorization: Basic {{base64(SiteName\Username:Password)}}
Update contact:
PUT https://{base_url}/api/REST/1.0/data/contact/{contact_id}
Get contact by email:
GET https://{base_url}/api/REST/1.0/data/contact?search=emailAddress%3D%22seed%40example.com%22
Get contact field definitions:
GET https://{base_url}/api/REST/1.0/assets/contact/fields
Bulk upsert contacts (recommended for multiple seeds):
POST https://{base_url}/api/REST/2.0/imports
The Bulk API (v2.0) supports large-scale imports and upserts with field mapping definitions. More efficient than individual v1.0 calls for managing more than a handful of seeds.
API authentication: HTTP Basic Auth. Format: SiteName\Username:Password encoded in Base64. The site name (also called company name) is the prefix before the backslash.
Find your base URL: Your Eloqua instance URL, visible after login. Common formats: secure.p01.eloqua.com, secure.p02.eloqua.com, secure.p06.eloqua.com. The correct URL is also returned in the login API response.
Rate limits
| Scope | Limit |
|---|---|
| REST API v1.0 | 1,000 calls per hour per user |
| Bulk API v2.0 | Separate limits; higher throughput for import/export operations |
HTTP 429 is returned when the per-hour limit is exceeded. The Bulk API is preferred for any operation involving more than a few contacts.
Duplicate contact handling
Email uniqueness is enforced at the platform level. Two contacts cannot share the same email address. Attempting to create a contact with an existing email address results in an error (REST v1.0) or upsert behavior (Bulk API, depending on configuration).
CRM sync (Salesforce/Microsoft Dynamics) creates new records for changed emails. If a seed's email changes in a connected CRM, Eloqua creates a new contact record for the new email and orphans the old one. Manage seed email changes directly in Eloqua before the CRM sync runs.
Platform-specific terminology
| Oracle Eloqua term | What it means |
|---|---|
| Contact | A person record in the Eloqua database (equivalent to a Contact/Profile in other platforms). |
| Campaign Canvas | The visual drag-and-drop interface for building automated email flows. |
| Segment | A dynamic or static filter-based group of contacts used for targeting and campaign entry. |
| Segment Members element | A Campaign Canvas entry element that feeds contacts from a segment into the flow. |
| Email Send element | A Campaign Canvas action element that sends an email to all contacts reaching it. |
| Decision element | A Campaign Canvas branching element (Email Open?, Compare Contact Field, etc.) that splits contacts. |
| Field Value | A custom data field value stored on a contact record. Referenced by numeric ID in the API. |
| Bulk API | Oracle Eloqua's high-throughput import/export API (v2.0), separate from the standard REST API (v1.0). |
| Dynamic content | Conditional content blocks in email templates that display different content based on contact field values. |
| Fatigue Analysis | Oracle Eloqua's engagement-based segmentation tool (not a hard cap) that identifies over-messaged contacts. Advisory only - does not block sends. |
Known limitations and workarounds
No native seed/test profile concept. Test sends can only go to existing Eloqua contacts. Create dedicated seed contact records before setting up any test sends.
Fatigue Analysis is advisory, not a hard cap. Unlike platform-enforced frequency caps in other ESPs, Eloqua's Fatigue Analysis identifies potentially fatigued contacts for use in segment exclusion rules - it does not automatically suppress sends. Build Fatigue Analysis outputs into exclusion segments manually if you want to enforce fatigue-based suppression.
Campaign Canvas contacts process once per campaign run by default. The same contact does not re-enter an active campaign unless re-entry is configured. For repeated seed testing, remove and re-add the seed to the entry segment, or use a new campaign instance.
Date fields accept different formats across API versions. The v1.0 REST API may accept MM/DD/YYYY HH:MM:SS; the Bulk API v2.0 uses Unix timestamps in milliseconds. Always verify format with a test call to GET /data/contact/{id} before setting up automated scripts.
No native abandoned cart or browse abandonment trigger. These require an external system to update Eloqua contact field values or segment memberships in real time when the behavior occurs.
Start monitoring your Oracle Eloqua sends
Place a Telltide seed in your Oracle Eloqua audience, and we will tell you when an expected email did not land.
Start free