Drip: Telltide Seed Address Guide
Place Telltide seeds in Drip campaigns and workflows.
Drip is a tag-based email marketing platform focused on ecommerce. Contacts are called "People." Tags and custom fields are the primary mechanisms for triggering workflows and segmenting audiences. The most important constraint for seed management: workflow triggers are NOT retroactive - if a person already has a tag or already satisfies a condition when the workflow is activated, they do not enter it. The trigger only fires on the transition (when the tag is applied or the condition is first met).
Quick reference
| Send type | Where to add seeds | Complexity |
|---|---|---|
| Scheduled (Broadcast) | Create seed person; ensure they qualify for the broadcast's audience filter | Low |
| Ongoing (Workflow) | Create seed person; fire the specific trigger event or apply the trigger tag | Medium |
1. Scheduled / one-off sends (Broadcasts)
Drip Broadcasts are one-time email sends targeting people who match filter conditions. Seeds must be people in your Drip account and satisfy the broadcast's audience filter at send time.
Where to add seed addresses
The simplest approach: tag seed contacts with telltide-seed. When creating a broadcast, include this tag in the audience filter (OR logic) so seeds always receive the broadcast regardless of the main targeting conditions.
Step-by-step: Create a seed person via UI
- Navigate to People in the main nav
- Click New Person (or the + button)
- Enter the seed email address
- Fill in First Name, Last Name, and any other personalization fields
- Set the person as active (opted in to receive emails)
- Click Save
- Apply the tag
telltide-seedto the person
Step-by-step: Create a seed person via API
POST https://api.getdrip.com/v2/{account_id}/subscribers
Authorization: Basic {{base64(api_token:)}}
Content-Type: application/json
{
"subscribers": [
{
"email": "seed@example.com",
"first_name": "Seed",
"last_name": "Monitor",
"tags": ["telltide-seed"],
"custom_fields": {
"birthday": "1990-04-15"
},
"reactivate_if_removed": true
}
]
}
Authentication: HTTP Basic Auth using the API token as the username and an empty string as the password. Encode api_token: (with trailing colon, no password) in Base64.
reactivate_if_removed: true: If the person was previously removed (unsubscribed/deleted), this re-activates them. Include this on all seed creation calls to handle cases where the seed was previously removed from the account.
account_id: Found in your Drip account URL: app.getdrip.com/{{account_id}}/....
Batch endpoint (multiple seeds at once): The subscribers array accepts up to 1,000 records per call. Use this for bulk seed provisioning.
Profile attributes required
Seeds need:
- Email address
- Active subscription status (not removed or unsubscribed)
- Values for any Liquid personalization tags referenced in the email template (
{{ subscriber.first_name }},{{ subscriber.custom_fields.custom_field_name }})
Ensuring seeds receive the same version as real recipients
Broadcast filters: If the broadcast targets a segment (e.g., "purchased in the last 30 days"), the seed must satisfy those conditions OR be included via the tag-based OR condition. Use the telltide-seed tag OR condition approach to ensure inclusion without needing to satisfy behavioral filters.
A/B testing: Drip supports subject line A/B testing in broadcasts. Each variant is sent to a portion of the audience. Seeds may receive only one variant. Use multiple seeds to monitor all variants.
Gotchas
Removed/unsubscribed people cannot receive broadcasts. Drip tracks subscription state per person. A removed person (manually removed, unsubscribed via link, or bounced) does not receive broadcasts. Use reactivate_if_removed: true in API calls to re-activate seed accounts as needed.
Email bounces block future sends. Hard-bounced seed addresses are automatically removed and cannot receive subsequent emails. Use fresh seed addresses that have not previously bounced in your Drip account.
2. Ongoing / automated journeys (Workflows)
Drip Workflows are triggered automation sequences. Each workflow has a single entry trigger. Contacts enter when the trigger condition is first met - not retroactively.
Workflow entry trigger types
| Trigger | Description | Seed approach |
|---|---|---|
| A tag is applied | Fires when a specific tag is added to a person | Apply the trigger tag to the seed person |
| A person subscribes | Fires when a new person subscribes to the account | Create a new seed person |
| An order is placed | Fires when an order event is received for the person | Use Shopper Activity API or test order in store |
| A cart is created / updated / abandoned | Fires on cart events | Use Shopper Activity API or test cart in store |
| A page is visited | Fires on tracked page view | Install site tracking and visit the page as the seed |
| A date field matches | Fires when a custom date field matches a condition | Set the date field on the seed to match |
| A person enters a segment | Fires when the person first qualifies for a segment | Set attributes to satisfy segment conditions |
| A person exits a segment | Fires when the person leaves a segment | Change attributes to disqualify the person |
| A custom event occurs | Fires on a developer-defined event | Fire the event via Events API |
Creating trap profiles per journey type
Welcome / onboarding (Person subscribes trigger)
- Trigger: "A person subscribes" - fires when a new person is added to the account
- Seed requirements: Email address, must not already exist in the account
- How to trigger: Create a new seed person via UI or API. The trigger fires for the creation event.
- Constraint: The trigger is NOT retroactive. If the seed already exists, adding them to the account again does not re-trigger the workflow. Use a new email address for each welcome workflow test cycle.
Abandoned cart (Cart is abandoned trigger)
- Trigger: "A cart is abandoned" - fires when a cart update event is received and no order is placed within the configured time window (typically 1 hour)
- Seed requirements: Email address, active subscription status
- For connected Shopify: Initiate a real checkout using the seed email address and abandon before completing
- Via Shopper Activity API (non-Shopify):
First, create or update the seed person (if they don't exist yet), then track the cart:
POST https://api.getdrip.com/v3/{account_id}/shopper_activity/cart
Authorization: Basic {{base64(api_token:)}}
Content-Type: application/json
{
"provider": "my_store",
"occurred_at": "2026-04-15T10:00:00Z",
"cart_id": "CART-TEST-001",
"cart_url": "https://yourstore.com/cart",
"grand_total": "95.00",
"total_discounts": "0.00",
"currency": "USD",
"email": "seed@example.com",
"items": [
{
"product_id": "SKU-123",
"product_variant_id": "SKU-123-DEFAULT",
"sku": "SKU-123",
"name": "Widget Pro",
"price": "95.00",
"quantity": 1,
"product_url": "https://yourstore.com/products/widget",
"image_url": "https://yourstore.com/img/widget.jpg"
}
]
}
Wait the configured abandonment window (typically 1 hour). If no order is placed, the workflow triggers.
Browse abandonment
- Trigger: "A page is visited" with a filter on product page URL pattern
- Seed requirements: Email address, active subscription status, site tracking JavaScript installed
- How to trigger: The site tracking script must be installed on your store. The seed person must be identified (tracked by email) in the browser before visiting the product page. Browser-based navigation is the most reliable approach.
- Alternative via Events API:
POST https://api.getdrip.com/v2/{account_id}/subscribers/{subscriber_id}/events
Authorization: Basic {{base64(api_token:)}}
Content-Type: application/json
{
"events": [
{
"action": "Viewed Widget Pro",
"properties": {
"product_id": "SKU-123",
"product_url": "https://yourstore.com/products/widget"
}
}
]
}
If the workflow trigger is a custom event rather than a native page visit, use the Events API instead.
Winback / re-engagement (Date field matches trigger)
- Trigger: "A date field matches" - fires on/around a date stored in a custom contact field (e.g.,
last_purchase_date) - Seed requirements: Email address,
last_purchase_datecustom date field set to a date in the trigger window - Date format:
YYYY-MM-DDfor all date custom fields in Drip API calls - Date field trigger behavior: Drip schedules evaluation of date-based triggers approximately 30 minutes in advance of the trigger time. Set the seed's date to ensure it falls within the configured window.
Set the custom date field on the seed:
POST https://api.getdrip.com/v2/{account_id}/subscribers
Authorization: Basic {{base64(api_token:)}}
Content-Type: application/json
{
"subscribers": [
{
"email": "seed@example.com",
"custom_fields": {
"last_purchase_date": "2025-01-15"
}
}
]
}
Post-purchase (Order placed trigger)
- Trigger: "An order is placed" - fires when an order event is received for the person
- Seed requirements: Email address, active subscription status
- Via Shopper Activity API:
POST https://api.getdrip.com/v3/{account_id}/shopper_activity/order
Authorization: Basic {{base64(api_token:)}}
Content-Type: application/json
{
"provider": "my_store",
"occurred_at": "2026-04-15T10:00:00Z",
"action": "placed",
"order_id": "TEST-ORD-001",
"order_url": "https://yourstore.com/orders/TEST-ORD-001",
"grand_total": "149.99",
"currency": "USD",
"email": "seed@example.com",
"items": [
{
"product_id": "SKU-123",
"product_variant_id": "SKU-123-DEFAULT",
"sku": "SKU-123",
"name": "Widget Pro",
"price": "149.99",
"quantity": 1
}
]
}
Birthday / anniversary (Date field matches trigger, annually)
- Trigger: "A date field matches" on the
birthdaycustom date field > "Anniversary" (fires annually on the stored month/day) - Seed requirements: Email address,
birthdaycustom field (Date type) set on the person - Date format:
YYYY-MM-DD - Set the birthday field:
POST https://api.getdrip.com/v2/{account_id}/subscribers
{
"subscribers": [
{
"email": "seed@example.com",
"custom_fields": {
"birthday": "1990-04-15"
}
}
]
}
- Trigger schedules approximately 30 minutes in advance. Drip evaluates birthday-type date triggers slightly before the scheduled time. For same-day testing: set the seed's
birthdayto today's date. The trigger fires on today's evaluation cycle.
How re-entry works in Workflows
Workflow re-entry requires the person to first exit the workflow. A person already in a workflow does not re-enter it when the trigger fires again. To reset for repeated testing:
- Navigate to the person's profile in Drip
- Go to the Workflows & Email Series section
- Find the workflow and click Restart to remove them and allow re-entry on the next trigger
Or: remove the trigger tag, wait for exit, then re-apply the tag to re-trigger.
How to reset seeds for repeated workflow testing
Tag-triggered workflows: Remove the tag, wait for the person to exit the workflow, then re-apply the tag.
Event-triggered workflows: Fire the event again (if re-entry is permitted). Check workflow settings for re-entry behavior.
Date field workflows: Change the seed's date field to a future date, then change it to today/the target date to re-trigger.
Create a new seed person: Use a different email address or modify the seed's email to a new value. The new person triggers the workflow as if starting fresh.
3. Platform-specific considerations
API options
Create or update subscriber:
POST https://api.getdrip.com/v2/{account_id}/subscribers
Authorization: Basic {{base64(api_token:)}}
Accepts up to 1,000 records in the subscribers array.
Get subscriber by email:
GET https://api.getdrip.com/v2/{account_id}/subscribers/{email_or_id}
Apply tags:
POST https://api.getdrip.com/v2/{account_id}/tags
{
"tags": [{"email": "seed@example.com", "tag": "telltide-seed"}]
}
Remove tags:
DELETE https://api.getdrip.com/v2/{account_id}/subscribers/{id}/tags/{tag}
Track custom event:
POST https://api.getdrip.com/v2/{account_id}/subscribers/{id}/events
{
"events": [{"action": "event_name", "properties": {...}}]
}
Shopper Activity - cart:
POST https://api.getdrip.com/v3/{account_id}/shopper_activity/cart
Shopper Activity - order:
POST https://api.getdrip.com/v3/{account_id}/shopper_activity/order
API token location: Your Drip account > User settings > API token. The token is used as the HTTP Basic Auth username with an empty password.
Rate limits
| Scope | Limit |
|---|---|
| General API | 3,600 requests per hour |
| Batch subscriber upsert | 1,000 records per request |
HTTP 429 when exceeded. Implement exponential backoff.
Duplicate contact handling
Email address is the unique identifier. Calling POST /v2/{account_id}/subscribers with an existing email updates the existing record (upsert behavior). No duplicates are created.
If the person was previously removed (unsubscribed/deleted), include reactivate_if_removed: true in the payload to reinstate them. Without this flag, a removed person cannot be re-subscribed via the API.
Platform-specific terminology
| Drip term | What it means |
|---|---|
| Person / Subscriber | A contact record in Drip (called "person" in UI; "subscriber" in API). |
| Workflow | A triggered automated email sequence. |
| Broadcast | A one-time email send. |
| Tag | A label applied to a person. Primary trigger mechanism and segmentation tool. |
| Custom Field | A contact-level data field (text, number, date, boolean) for personalization and workflow triggers. |
| Segment | A dynamic filter-based group of people used for targeting. |
| Shopper Activity API | Drip's v3 API for tracking cart and order events from non-native ecommerce integrations. |
| Events API | Drip's v2 API for tracking custom behavioral events for a person. |
| Reactivate if removed | API parameter that re-activates a previously removed (unsubscribed) person. Required for re-adding removed seeds. |
Known limitations and workarounds
Workflow triggers are not retroactive. If a person already has the trigger tag when the workflow activates, they do not enter. Remove the trigger condition from the seed, activate the workflow, then apply the trigger condition to the seed.
reactivate_if_removed: true is required to re-subscribe removed people. Without this flag, a removed person's re-addition silently fails - no error is returned but the person remains inactive. Always include this flag in seed creation and update calls.
Cart abandonment trigger requires the abandonment window to pass. After firing a cart event, the workflow does not trigger immediately - it waits the configured abandonment window (typically 1 hour). Plan seed monitoring around this delay.
Site tracking requires browser identification. Browse abandonment monitoring cannot be fully simulated via API alone if the workflow uses the native "page visited" trigger. The site tracking JavaScript must be installed and the browser session must be linked to the seed email.
Date field trigger fires approximately 30 minutes in advance. Drip pre-computes date-based triggers before the actual scheduled time. This can cause the seed to enter workflows slightly earlier than expected.
Start monitoring your Drip sends
Place a Telltide seed in your Drip audience, and we will tell you when an expected email did not land.
Start free