Integrations

Adobe Marketo Engage: Telltide Seed Address Guide

Place Telltide seeds in Marketo lists and smart campaigns.

Adobe Marketo Engage uses a lead database with Smart Lists for dynamic audience queries and Smart Campaigns as the execution engine for all sends and automations. Marketo Email Programs have a native Seed List feature on the Setup tab: members of the attached static list receive every variant of the email and are excluded from Email Program stats. Smart Campaigns (batch and trigger) do NOT have this feature, so seeds in non-Email-Program flows must be added via Smart List OR logic. The most important constraint for seed management: Marketo's Communication Limits cap the number of emails a lead receives per day or per 7-day window, and seeds as real lead records are subject to these limits by default unless the email is marked Operational.

Quick reference

Send typeWhere to add seedsComplexity
Scheduled Email ProgramImport seed as lead; attach static list via Email Program Setup tab > Seed ListLow
Scheduled Batch Smart CampaignImport seed as lead; add "Member of List [Seed List]" as an OR condition in the Smart ListLow
Ongoing (Trigger Smart Campaign / Engagement Program)Import seed as lead; fire the campaign trigger event or use "Campaign is Requested" APIMedium

1. Scheduled / one-off sends (Email Programs and Batch Smart Campaigns)

Marketo Email Programs are purpose-built for one-time batch sends. Batch Smart Campaigns (no triggers, filters only) can also run on a schedule. Both use a Smart List to define the audience.

Where to add seed addresses

Create seed lead records and add them to a static list (e.g., "Telltide Seeds"). For Email Programs, attach the list as a Seed List on the Setup tab. For Smart Campaigns, add a filter "Member of List = Telltide Seeds" with OR logic against the main audience filters. This guarantees seeds receive every campaign regardless of the main targeting criteria.

Non-technical path

For Marketing Ops who don't write code. Use the Marketo UI to create seed leads, import lists, and submit forms.

Create a seed lead via UI

  1. Navigate to Database (left nav; legacy label "Lead Database")
  2. Click New > New Person
  3. Fill in Email address (required), First Name, Last Name
  4. Click Save
  5. Open the lead record and add them to your "Telltide Seeds" static list

Import seeds via file (UI list import)

  1. Navigate to Database
  2. Click New > Import List (in some workspaces labelled "Import People" or "Import Leads from File")
  3. Upload a CSV with headers using UI display labels: Email Address, First Name, Last Name, and any other fields
  4. Map columns to Marketo fields
  5. Select a static list to add the seeds to (create "Telltide Seeds" if it doesn't exist)
  6. Marketo deduplicates on email, so existing leads are updated, not duplicated
  7. Complete the import

Note: For UI list imports use display labels (Email Address, First Name, Last Name). For Bulk Import API the CSV header row must use REST API names (see Technical path).

Submit a Marketo form

For "Fills Out Form" trigger campaigns, simply submit the Marketo form with the seed email address via a browser. No code required.

Add seed list to an Email Program (native Seed List feature)

  1. Open the Email Program
  2. Go to the Setup tab
  3. Edit the Seed List setting and attach the "Telltide Seeds" static list
  4. Members of the attached list receive every variant of the email and are excluded from Email Program stats and counts

Add seed list to a Batch Smart Campaign (Smart List OR logic)

In the Smart Campaign's Smart List:

  1. Add the main audience filters (e.g., Member of Smart List = "Main Audience")
  2. Click Add Filter > Member of List > select "Telltide Seeds"
  3. In the Advanced Logic panel, set logic to: (1 AND 2 AND 3) OR 4 where filters 1-3 are the main audience and filter 4 is the seed list filter
  4. The campaign sends to both the main audience and all seed leads

Technical path

For developers using REST API, SOAP API (legacy), or Munchkin tracking integration.

Create a seed lead via REST API

POST https://{base_url}/rest/v1/leads.json
Authorization: Bearer {{access_token}}
Content-Type: application/json

{
  "action": "createOrUpdate",
  "lookupField": "email",
  "input": [
    {
      "email": "seed@example.com",
      "firstName": "Seed",
      "lastName": "Monitor",
      "internalTestUser": true
    }
  ]
}

Up to 300 records per call. Email field accepts ASCII characters only (international IDN domains are rejected).

Get access token

Use POST with the parameters in an application/x-www-form-urlencoded body. Marketo also accepts GET with credentials in the query string but this is being deprecated and exposes the client_secret in proxy logs, browser history, and access logs.

POST https://{identity_url}/identity/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}

Returns access_token valid for 3600 seconds (1 hour). Use Authorization: Bearer {{access_token}} header on all API requests.

API credentials location: Admin > Integration > LaunchPoint > [Custom Service] > View Details (Adobe is gradually retiring the LaunchPoint label in favor of "Installed Services" terminology). Identity URL and REST API base URL: Admin > Integration > Web Services.

Add seed to a static list via API

POST https://{base_url}/rest/v1/lists/{listId}/leads.json
Authorization: Bearer {{access_token}}
Content-Type: application/json

{
  "input": [{"id": {{lead_id}}}]
}

Bulk Import API (large CSV files)

For large file imports use the Bulk Import API. The CSV header row must use REST API names (email, firstName, lastName); discover them with the Describe Lead endpoint.

POST https://{base_url}/bulk/v1/leads.json

Returns a batchId; poll the status endpoint. Files up to 10MB. Max 2 jobs processed concurrently with a 10-job FIFO queue (HTTP 1016 "Too many imports" beyond that). For small ad-hoc seed updates, the inline /rest/v1/leads.json endpoint (300 records per call) is simpler.

SOAP API (legacy)

The SOAP API is being deprecated by Adobe. New integrations should use REST. Existing SOAP integrations can still create and update leads, but plan migration to REST endpoints.

Munchkin tracking integration

For "Visits Web Page" and "Clicks Link on Web Page" triggers, the seed lead must be associated with a Munchkin cookie. A brand-new seed has no cookie association until one of three things happens:

  1. The seed clicks a tracked email link (which sets the Munchkin cookie and binds it to the lead)
  2. The seed submits a Marketo form (form fill creates the cookie association)
  3. Your code calls the Munchkin associateLead API with a hashed email

Without one of these actions, "Visits Web Page" never fires for the seed.

Always-on flow coverage

For always-on flows where you cannot drop a static "send-to" list onto a single send, use these Marketo-specific tactics to ensure the seed is captured.

Smart Campaigns (batch and trigger). Add an OR clause to the Smart List so the seed always qualifies regardless of the main filter logic:

  1. Open the Smart Campaign's Smart List
  2. Add Member of List = Telltide Seeds as an additional filter
  3. In the Advanced Logic panel, wrap the main audience filters and OR them against the seed filter, e.g. (1 AND 2 AND 3) OR 4
  4. The seed now qualifies for every run of the campaign without altering the main audience definition

Email Programs. Use the native Email Program Seed List feature on the Setup tab. The attached static list receives every variant of the email (including A/B Test variants) and is excluded from Email Program stats and counts. This is the cleanest option because it does not require modifying the Smart List and does not skew reporting.

Engagement Programs. Ensure the seed is a member of the program by adding the seed via an "Add to Engagement Program" flow step in a one-off Smart Campaign, or attach a seed list to each stream. Once the seed is a stream member, every cast (weekly or monthly) delivers to the seed alongside real members. Reset cadence on the seed by removing and re-adding the lead via flow steps.

Workspace partitioning. Communication Limits are set per workspace, not globally. Multi-workspace customers can have a seed hit the cap in one workspace but not another. If your tenant uses multiple workspaces, place a seed in each workspace where always-on flows execute.

Profile attributes required

Seeds need:

  • email address (required for all leads; used as the default deduplication key)
  • unsubscribed = false (leads with unsubscribed = true do not receive non-operational emails)
  • emailInvalid = false (leads with emailInvalid = true receive no emails)
  • marketingSuspended = false
  • Values for any personalization tokens ({{lead.First Name}}, {{lead.Custom Field}}) used in the email

Ensuring seeds receive the same version as real recipients

Email Programs have native A/B testing (subject line, from address, date/time, or whole email) on the A/B Test tab. With a "whole email" test the seed lands in one variant; use multiple seeds, or attach the seed list under the Email Program's Seed List feature on the Setup tab so the seed receives every variant outside the random split. Champion/Challenger testing applies to trigger Smart Campaigns and Engagement Program streams, not to Email Programs. For Smart Campaigns with split flow steps, the seed is assigned to one branch randomly, so use multiple seed leads to monitor all branches.

Operational emails bypass some suppression but not all. Operational emails bypass Communication Limits, the Unsubscribed flag, and the Marketing Suspended flag. They do NOT bypass Email Invalid, Email Suspended (hard bounces), or instance-level Block Lists. Use Operational only for genuinely transactional messages, and note that misuse violates Marketo's terms and CAN-SPAM.

Gotchas

Communication Limits cap seed sends. Admin > Communication Limits sets a maximum number of emails per day and per 7-day window. Seed leads as real records count toward these limits. If a seed receives too many emails in a short window, subsequent sends are blocked. Options: (1) mark monitoring emails as Operational (bypasses Communication Limits but should only be used for truly transactional sends), (2) raise Communication Limit thresholds for your account, (3) review the Smart Campaign's Schedule tab "Block non-operational emails when person exceeds communication limits" checkbox. The checkbox is opt-in: if it is checked, the seed will be blocked once the cap is hit; if you want the campaign to ignore the cap, leave it unchecked. Note that Communication Limits still apply globally if enforced at the Admin level for non-operational sends.

Email Suspended (Category 1 hard bounce) silently blocks seeds. Beyond unsubscribed and emailInvalid, the emailSuspended flag is set on Category 1 hard bounces (the receiving MX rejected the message as spam or via blocklist). Seeds can silently get suspended even though they are your own infrastructure. This is the third common cause of "why didn't my seed get the email" after Communication Limits and Durable Unsubscribe. Check the seed lead record for the Email Suspended flag and clear it via the lead editor or a Change Data Value flow step.

Block Lists drop seeds even on Operational sends. Customers running brand-protection block lists at the instance level will silently suppress seeds. Confirm the seed domain is not on any internal Block List in Admin.

Approval and activation are required. Email assets, Email Programs, and Smart Campaigns must each be approved before they will send. For Smart Campaigns, also activate the schedule on the Schedule tab. Approval and activation are the most common silent-failure source.

Durable Unsubscribe prevents re-subscription via import. Marketo's Durable Unsubscribe system ensures that if a lead is unsubscribed, re-importing their record does NOT overwrite unsubscribed = true. If a seed gets unsubscribed, you must manually change the unsubscribed field via the lead editor or via a Smart Campaign flow step, not via import.


2. Ongoing / automated journeys (Trigger Smart Campaigns and Engagement Programs)

Smart Campaign types

Trigger Smart Campaign: Smart List has at least one trigger. Fires continuously for each lead when the trigger event occurs. Used for real-time welcome, abandoned cart, and post-purchase automations.

Batch Smart Campaign: Smart List has filters only (no triggers). Runs on a schedule (once or recurring). Used for winback and birthday sends.

Engagement Program: Drip nurture that sends content pieces on a fixed cadence (weekly or monthly "casts"). Leads are added to streams via a flow step.

Trigger types for automation entry

TriggerDescriptionSeed approach
Fills Out FormLead submits a Marketo formSubmit the form with the seed email address
Lead is CreatedNew lead record is createdCreate a new seed lead record
Data Value ChangesA specified lead field value changesChange the field value via API or lead editor
Campaign is RequestedFired via REST APICall POST /rest/v1/campaigns/{id}/trigger.json
Visits Web PageMunchkin tracking detects page visitInstall Munchkin; visit page in browser while identified
Clicks Link in EmailLead clicks a link in a tracked emailClick the link in the test email
Added to ListLead is added to a specified listAdd seed to the trigger list

Creating trap profiles per journey type

Welcome / onboarding (Lead is Created / Fills Out Form trigger)

  • Trigger: "Lead is Created" (fires when any new lead record is created) or "Fills Out Form" (fires on form submission)
  • Seed requirements: Lead record with email address, unsubscribed = false
  • How to trigger ("Lead is Created"): Create a new seed lead via the UI or API. The trigger fires for the creation event.
  • How to trigger ("Fills Out Form"): Submit the Marketo form with the seed email address via a browser or the form embed.
  • Qualification rule: Set to "Allow each person to flow through once" for welcome campaigns. To re-test: change the qualification rule to "Allow every time" temporarily, or create a new seed lead.

Abandoned cart (Campaign is Requested trigger)

  • Marketo cannot detect cart abandonment natively. Munchkin logs page visits but cannot detect a non-purchase event. The ecommerce platform must push abandonment data into Marketo.
  • Trigger: "Campaign is Requested" - fired via REST API from the ecommerce platform when abandonment is detected
  • Seed requirements: Lead record with email, unsubscribed = false; cart data available as Custom Object fields or lead tokens
  • How to trigger via API:
POST https://{base_url}/rest/v1/campaigns/{campaignId}/trigger.json
Authorization: Bearer {{access_token}}
Content-Type: application/json

{
  "input": {
    "leads": [{"id": {{lead_id}}}],
    "tokens": [
      {"name": "{{my.cartValue}}", "value": "95.00"},
      {"name": "{{my.cartProduct}}", "value": "Widget Pro"},
      {"name": "{{my.cartUrl}}", "value": "https://yourstore.com/cart"}
    ]
  }
}

Program tokens ({{my.tokenName}}) must be defined in the Program before use. The campaign must have the "Campaign is Requested" trigger active.

Browse abandonment (Visits Web Page trigger)

  • Trigger: "Visits Web Page" - Munchkin tracking detects the page visit and matches it to a lead record by cookie
  • Seed requirements: Lead record with email, Munchkin tracking installed on the product pages, seed must be cookied in the browser (linked to their email)
  • How to trigger: With Munchkin installed, visit the product page in a browser where the seed is identified (Munchkin cookie set). Munchkin fires the page visit event and the trigger activates.
  • Alternative: If the campaign uses "Campaign is Requested" instead of a native page visit trigger, use the API trigger method above.

Winback / re-engagement (Recurring Batch Smart Campaign)

  • Type: Recurring Batch Smart Campaign (no triggers; filter-based)
  • Smart List filters:
  • Last Activity Date is before 90 days ago
  • Unsubscribed = false
  • Email Invalid = false
  • Marketing Suspended = false
  • Recurrence: Run weekly or monthly via the Schedule tab
  • Seed requirements: Lead with lastActivityDate or a custom lastPurchaseDate field set to a date older than the lapse threshold
  • Set a custom date field on the seed:
POST https://{base_url}/rest/v1/leads.json
Authorization: Bearer {{access_token}}
Content-Type: application/json

{
  "action": "updateOnly",
  "lookupField": "email",
  "input": [
    {
      "email": "seed@example.com",
      "lastPurchaseDate": "2025-01-15"
    }
  ]
}

Post-purchase (Campaign is Requested trigger)

  • Trigger: "Campaign is Requested" - fired from the order management system after a confirmed purchase
  • Seed requirements: Lead record with email, unsubscribed = false
  • How to trigger: Call the Campaign is Requested API with the seed lead's ID and relevant order tokens

Birthday / anniversary (Recurring Batch Smart Campaign)

  • Type: Recurring Batch Smart Campaign running daily
  • Smart List filter: Date of Birth - use filter operator "In Anniversary Date Range" to match contacts whose birthday anniversary falls today or within a specified window
  • Alternatively: Use a Trigger Smart Campaign with "Data Value Changes" trigger on the Date of Birth field plus a "Wait" flow step with "Next anniversary date" logic

Standard field: dateOfBirth (UI name: "Date of Birth"), type: Date. API name: dateOfBirth. Format: YYYY-MM-DD.

Set the birthday on the seed via API:

POST https://{base_url}/rest/v1/leads.json
{
  "action": "updateOnly",
  "lookupField": "email",
  "input": [
    {
      "email": "seed@example.com",
      "dateOfBirth": "1990-04-15"
    }
  ]
}
  • For same-day testing: Set the seed's dateOfBirth to today's date. The daily Batch Smart Campaign picks up the seed at the next scheduled run.
  • Qualification rule for annual recurrence: Set to "Allow each person to flow through every 365 days" to enable annual re-entry.

Send Sample Email (test send with real personalization)

Use "Send Sample" to validate email content with the seed's actual field values before a live send:

  1. Open the email in the Email Editor
  2. Click Email Actions > Send Sample
  3. In the dialog: enter the "To" email address(es)
  4. Under "Send As Lead": select the seed lead record - personalization tokens render using that lead's field values
  5. Click Send

Send Sample emails are logged as Send Email activity on the recipient lead. Treat them as normal sends. Do not rely on Send Sample to skip suppression, Communication Limits, or activity tracking.


How to reset seeds for repeated testing

Trigger Smart Campaigns (qualification: "Allow each person to flow through once"): Change the qualification to "Allow every time" for the duration of testing. Revert after.

Trigger Smart Campaigns - Campaign is Requested: Fire the API trigger again. If qualification is "Allow every time," the seed re-enters immediately.

Engagement Programs: Remove the seed lead from the Engagement Program's stream, then re-add them via "Add to Engagement Program" flow step.

Batch Smart Campaigns: The seed re-enters on the next scheduled run as long as they still match the Smart List filters.


3. Platform-specific considerations

API options

Get access token:

POST https://{identity_url}/identity/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id={id}&client_secret={secret}

Valid for 3600 seconds (1 hour). Marketo also accepts GET with credentials in the query string but this pattern is being deprecated and exposes the client_secret in logs; prefer POST with a form-encoded body.

Sync leads (create or update, up to 300 per request):

POST https://{base_url}/rest/v1/leads.json
Authorization: Bearer {{access_token}}

Get lead by email:

GET https://{base_url}/rest/v1/leads.json?filterType=email&filterValues=seed%40example.com

Add lead to static list:

POST https://{base_url}/rest/v1/lists/{listId}/leads.json

Trigger Smart Campaign (Campaign is Requested):

POST https://{base_url}/rest/v1/campaigns/{campaignId}/trigger.json

Bulk lead import (large CSV files):

POST https://{base_url}/bulk/v1/leads.json

Returns a batchId; poll the status endpoint. Files up to 10MB. Max 2 jobs processed concurrently with a 10-job FIFO queue (HTTP 1016 "Too many imports" beyond that). Use Bulk Import for large files; for small ad-hoc seed updates the inline /rest/v1/leads.json endpoint (300 records per call) is simpler. CSV header row must use REST API field names (email, firstName, lastName).

Find campaign ID: Marketing Activities > open Smart Campaign > URL contains the campaign ID.

Rate limits

ScopeLimit
REST API daily50,000 API calls per day
REST API per 20 seconds100 calls per 20-second window
Sync leads per request300 records
Campaign trigger per request100 leads

HTTP 429 when rate limits are exceeded. Implement exponential backoff.

Duplicate contact handling

Email address is the default deduplication key. createOrUpdate with lookupField = email updates the existing record if a matching email is found. Two records with the same email can exist only if created via createDuplicate action - this should never be used for seeds.

Durable Unsubscribe: importing a lead with unsubscribed = false does NOT overwrite an existing unsubscribed = true flag. To re-subscribe an unsubscribed seed, change the field manually via lead editor or a Smart Campaign flow step.

Platform-specific terminology

Adobe Marketo Engage termWhat it means
Lead / PersonA contact record in Marketo. The product uses both terms; the current left-nav menu label is "Database" (legacy label "Lead Database"), and "Person" appears in the New Person dialog.
Smart ListA dynamic, filter/trigger-based query of the lead database. The audience definition layer.
Static ListA fixed membership list where leads must be explicitly added/removed. Used for seed lists.
Smart CampaignThe execution engine in Marketo. Every email send and automation runs through a Smart Campaign.
Batch Smart CampaignA Smart Campaign with filters only (no triggers); runs on a schedule.
Trigger Smart CampaignA Smart Campaign with at least one trigger; fires in real time when the trigger event occurs.
Email ProgramA purpose-built program type for one-time batch email sends. Includes A/B testing support.
Engagement ProgramA drip nurture program that sends content on a cast cadence to stream members.
ProgramA container for emails, landing pages, forms, and Smart Campaigns.
Communication LimitsAccount-level frequency cap: maximum emails per day and per 7-day window per lead.
Operational emailAn email marked as transactional. Bypasses Communication Limits, the Unsubscribed flag, and the Marketing Suspended flag. Does NOT bypass Email Invalid, Email Suspended, or instance-level Block Lists.
Email Program Seed ListNative feature on the Email Program Setup tab. Members of the attached static list receive every variant of the email and are excluded from Email Program stats and counts.
Email SuspendedA flag set on Category 1 hard bounces (MX rejected as spam or via blocklist). Distinct from Email Invalid and Unsubscribed; suppresses sends until cleared.
Durable UnsubscribeMarketo's system that preserves unsubscribed = true across reimports; the flag cannot be overwritten by CSV import.
Campaign is RequestedA Smart Campaign trigger fired via REST API. Primary mechanism for API-triggered sends (abandoned cart, post-purchase).
dateOfBirthStandard Marketo field for birthday data. Type: Date. Format: YYYY-MM-DD. API name: dateOfBirth.
In Anniversary Date RangeA filter operator for Date-type fields that matches contacts whose anniversary (month/day) falls within a specified window. Used in birthday Smart List filters.

Known limitations and workarounds

Seed List feature is Email-Program-only. Email Programs have a native Seed List on the Setup tab. Smart Campaigns (batch and trigger) and Engagement Programs do NOT have this feature, so seeds in those flows must be real lead records included via Smart List OR logic or via stream membership.

Communication Limits apply to seed leads (per workspace). Seeds as real lead records count toward daily and weekly email caps. Communication Limits are set per workspace, not globally, so multi-workspace customers can have a seed hit the cap in one workspace but not another. If seeds are missing sends mid-journey, check Communication Limits in Admin settings. Use Operational email flag only for genuinely transactional messages.

Durable Unsubscribe cannot be overwritten by import. To re-subscribe an unsubscribed seed, change unsubscribed = false via the lead editor or via a Smart Campaign flow step "Change Data Value" action.

"Campaign is Requested" trigger requires the campaign to be Active and approved. The Smart Campaign must be approved and in Active status (not draft) before the API trigger call will enroll leads. Email assets and parent Programs must also be approved. Activate via the Schedule tab.

Access tokens expire every hour. Automated seed management scripts must refresh tokens hourly. Cache the token and re-fetch when expired.

Munchkin-based triggers require browser identification. "Visits Web Page" and "Clicks Link on Web Page" triggers cannot be reliably simulated via API. They require actual browser interaction with the Munchkin-tracked page while the lead is cookied. A brand-new seed has no cookie association until they click a tracked email link, submit a Marketo form, or your code calls the Munchkin associateLead API.

ASCII-only email field. Marketo's Sync Leads endpoint accepts ASCII characters only in the email field. International seeds with IDN domains are rejected.

Block Lists drop seeds even on Operational sends. Instance-level Block Lists configured by the customer for brand protection silently suppress matching seeds regardless of Operational status.

Start monitoring your Marketo Engage sends

Place a Telltide seed in your Marketo Engage audience, and we will tell you when an expected email did not land.

Start free