Campaign Console
Use the Campaign Console when you want one place to run a launch without mixing every campaign type into one list. Marketing Campaigns, Site Campaigns, Email Campaigns, and Automations stay separate so each workflow keeps the right setup, targeting, content, and stats.
Open Product Suite, choose a workspace handle, then go to Publish -> Campaigns. Direct route pattern:
https://app.10x.in/apps/publish/campaigns?handle={handle}
What You Can Manage
| Lane | Use it for | Where it appears |
|---|---|---|
| Marketing Campaigns | Umbrella campaign, goal, tagged links, page handoff, health, and performance rollup | Main campaign table and campaign detail panel |
| Site Campaigns | Onsite lead capture, messaging, banners, popups, offers, custom HTML, custom JS, and custom events | Site Campaigns panel |
| Email Campaigns | Broadcast/promotional email sends | Email Campaigns panel |
| Automations | OTP, lead-captured follow-up, conversion follow-up, and coupon fulfillment rules | Campaign email rules page |
Before You Start
You need:
- A Product Suite user with operator or owner access to the handle.
- A selected handle in Product Suite.
- At least one Marketing Campaign if you want umbrella rollups and attachments.
- For Email Campaigns, a verified sender profile and any reusable email templates you plan to use.
- For Site Campaigns, the 10x public SDK installed on the page where the Site Campaign should appear.
Related setup guides:
Recommended Workflow
Create or choose the Marketing Campaign
Use the Marketing Campaign as the umbrella for launch goals, tagged links, page handoff, and rollup reporting.
Add Site Campaigns for onsite experiences
Configure lead capture, banners, messaging, popups, custom HTML, or event tracking for the pages where visitors land.
Add Email Campaigns for broadcasts
Build the broadcast email, test it, attest recipient consent, and send it separately from automations.
Attach related work to the Marketing Campaign
Attach Site Campaigns, Email Campaigns, automations, links, pages, and ad mappings so the Marketing Campaign detail view can summarize performance.
Review stats
Use the detail panel and performance summary for traffic, lead, conversion, site, and email activity.
Marketing Campaigns
Marketing Campaigns are umbrella containers. They should describe the launch or acquisition effort, not store onsite HTML or email body content.
Use Marketing Campaigns to:
- Track the goal and status of a launch.
- See how many links are tagged with the campaign ID.
- Open the campaign page editor.
- Open campaign automation rules.
- Review health checks and recent session state.
- Aggregate attached Site Campaign and Email Campaign performance.
Common actions in the Marketing Campaign table:
| Action | Use it for |
|---|---|
Detail | Open the Campaign Console detail view for the selected campaign |
Page | Open the campaign page handoff/editor route |
Rules | Open automation rules such as OTP, follow-up, conversion, and coupon email rules |
Site Campaigns
Use Site Campaigns for onsite experiences. Examples:
- Lead capture block.
- Offer banner.
- Popup.
- Inline message.
- Coupon capture prompt.
- Custom HTML widget.
- Custom event tracking.
Create A Site Campaign
- In Campaign Console, scroll to Site Campaigns.
- Select New.
- Enter a stable Site campaign ID such as
spring-lead-capture. - Enter a Name.
- Choose the Type:
LEAD_CAPTURE,MESSAGE,BANNER,POPUP,OFFER, orCUSTOM. - Optionally set Marketing campaign ID to attach it to an umbrella Marketing Campaign.
- Choose placement.
- Paste Targeting JSON.
- Add Custom HTML, CSS, JavaScript, and Events JSON as needed.
- Select Save.
- Select Activate when the campaign is ready.
Site Campaign Placements
| Placement | Use it when | Required fields |
|---|---|---|
HANDLE_WIDE | The campaign can appear across the handle | none |
PAGE_SLUG | The campaign belongs to one published page slug | pageSlug |
PATH_PATTERN | The campaign belongs to a URL pattern | pathPattern, for example /pricing/* |
CAMPAIGN_DETAIL_PAGE | The campaign belongs to a Marketing Campaign detail page | campaignId, optional pageSlug |
Example placement:
{
"type": "CAMPAIGN_DETAIL_PAGE",
"campaignId": "spring-launch",
"pageSlug": "spring-launch"
}
Site Campaign Targeting JSON
Site Campaigns use simple rule groups:
{
"match": "ALL",
"rules": [
{ "field": "device", "operator": "in", "values": ["DESKTOP", "MOBILE"] },
{ "field": "source", "operator": "in", "values": ["google"] },
{ "field": "path", "operator": "matches", "values": ["/pricing/*"] }
]
}
Supported fields:
| Field | Operator | Notes |
|---|---|---|
country | in | Uses available request or URL context, for example country=IN |
device | in | Values: MOBILE, TABLET, DESKTOP, BOT, UNKNOWN |
source | in | Matches utm_source or source |
campaign | in | Matches utm_campaign or campaign |
segment | in | Requires a visitor segment cookie or session segment snapshot |
path | matches | Supports exact paths and trailing * patterns |
pageSlug | in | Matches the current page slug |
Use match: "ALL" when every rule must match. Use match: "ANY" when any rule can match.
Custom HTML, CSS, JavaScript, And Events
For CUSTOM Site Campaigns, the editor accepts:
- Custom HTML for the onsite block.
- CSS for styling that block.
- JavaScript for runtime behavior.
- Events JSON for click, form, visibility, scroll, dwell, or custom-dispatch events.
Example event:
[
{
"name": "offer_clicked",
"selector": "[data-10x-event='offer_clicked']",
"trigger": "click",
"metadata": {
"offer": "spring-launch"
}
}
]
Supported event triggers:
| Trigger | Use it for |
|---|---|
visible | Element became visible |
click | Visitor clicked a selector |
form_submit | Visitor submitted a form |
dwell_ms | Visitor stayed for a dwell threshold |
scroll_pct | Visitor reached a scroll percentage |
custom_dispatch | Your custom script dispatches the event |
Email Campaigns
Use Email Campaigns for broadcast email. Do not use this lane for OTP, coupon fulfillment, lead-capture follow-up, or conversion follow-up. Those remain Automations.
Create An Email Campaign
- In Campaign Console, scroll to Email Campaigns.
- Select New.
- Enter an Email campaign ID such as
spring-broadcast. - Enter a Name.
- Enter a ready Sender ID.
- Choose the Purpose:
PRODUCT_NOTIFICATIONorTRANSACTIONAL_API. - Optionally enter a Marketing campaign ID to attach the broadcast to a Marketing Campaign.
- Choose Content mode.
- Paste Audience targeting JSON.
- Add template details or raw email HTML.
- Select Save.
- Select Preview.
- Send a test email.
- Check Consent attested for this audience.
- Select Send broadcast.
Audience Targeting JSON
The first release can store several audience fields, but broadcast send resolution is explicit-recipient first. Include emails rules for any campaign you intend to send now.
{
"match": "ALL",
"rules": [
{
"field": "emails",
"operator": "in",
"values": ["buyer@example.com", "lead@example.com"]
}
],
"exclusions": [
{
"field": "emails",
"operator": "in",
"values": ["do-not-email@example.com"]
}
]
}
Supported stored fields:
| Field | Current use |
|---|---|
emails | Used now for broadcast recipient expansion |
segment | Stored for future segment expansion |
leadSource | Stored for future lead-source expansion |
campaign | Stored for future campaign-derived audiences |
tag | Stored for future tag expansion |
country | Stored for future country expansion |
Suppression lists are applied during send. Suppressed addresses are counted as excluded recipients.
Email Content Modes
| Mode | Use it when | Required fields |
|---|---|---|
RAW_HTML | You want to paste email HTML directly | subject, email HTML, plain text fallback |
TEMPLATE | You want to reuse a saved email template | template ID, optional template version, variables JSON |
Raw HTML example:
{
"mode": "RAW_HTML",
"subject": "Spring launch is live",
"html": "<p>See the new offer.</p>",
"text": "See the new offer.",
"variables": {
"firstName": "Asha"
}
}
Template mode example:
{
"mode": "TEMPLATE",
"templateId": "tmpl_spring_launch",
"templateVersion": 1,
"variables": {
"firstName": "Asha",
"offerName": "Spring Launch"
}
}
Preview, Test Send, And Broadcast Send
| Control | What it does |
|---|---|
Preview | Renders the subject, HTML, and text from current campaign content |
Test send | Sends one test email to the test recipient |
Send broadcast | Resolves recipients, excludes suppressed recipients, snapshots the recipient list, and queues the send |
By default, the system requires a test send before broadcast send. Operators can only send after they attest consent for the audience.
Automations
Use the Rules action on a Marketing Campaign for campaign-scoped automations:
- Lead-captured email rules.
- Delayed lead follow-up.
- Conversion-triggered email.
- OTP/lead verification setup.
- Coupon fulfillment email workflow.
Automations are intentionally separate from Email Campaign broadcasts. This prevents a one-time broadcast from being confused with event-triggered lifecycle messaging.
Performance And Stats
The Campaign Console combines several reporting sources:
| Source | What it contributes |
|---|---|
| Marketing Campaign rollups | Visits, qualified clicks, leads, conversions, revenue |
| Site Campaign stats | Views, interactions, leads, conversions, revenue where available |
| Email Campaign messages | Queued messages, delivered messages, resolved recipients, excluded recipients |
| Email events | Delivery, open, click, bounce, complaint, and other provider events where available |
| Attachments | Per-channel summary for site, email, automation, ad, page, and link attachments |
Stats are eventually consistent. A broadcast can show queued or sending state before downstream delivery events arrive.
API Reference For Power Users
Use Product Suite first. Use APIs when you need automation or bulk setup.
Site Campaigns
| Job | Method and path |
|---|---|
| List Site Campaigns | GET /v2/handles/{handle}/site-campaigns |
| Create Site Campaign | POST /v2/handles/{handle}/site-campaigns |
| Update Site Campaign | PUT /v2/handles/{handle}/site-campaigns/{siteCampaignId} |
| Activate Site Campaign | POST /v2/handles/{handle}/site-campaigns/{siteCampaignId}/activate |
| Get Site Campaign stats | GET /v2/handles/{handle}/site-campaigns/{siteCampaignId}/stats |
Email Campaigns
| Job | Method and path |
|---|---|
| List Email Campaigns | GET /v2/handles/{handle}/email-campaigns |
| Create Email Campaign | POST /v2/handles/{handle}/email-campaigns |
| Update Email Campaign | PUT /v2/handles/{handle}/email-campaigns/{emailCampaignId} |
| Preview Email Campaign | POST /v2/handles/{handle}/email-campaigns/{emailCampaignId}/preview |
| Test send | POST /v2/handles/{handle}/email-campaigns/{emailCampaignId}/test-send |
| Send broadcast | POST /v2/handles/{handle}/email-campaigns/{emailCampaignId}/send |
| Get Email Campaign stats | GET /v2/handles/{handle}/email-campaigns/{emailCampaignId}/stats |
Marketing Campaign Attachments
| Job | Method and path |
|---|---|
| List attachments | GET /v2/handles/{handle}/campaigns/{campaignId}/attachments |
| Replace attachments | PUT /v2/handles/{handle}/campaigns/{campaignId}/attachments |
| Get performance summary | GET /v2/handles/{handle}/campaigns/{campaignId}/performance-summary |
Troubleshooting
| Problem | Check |
|---|---|
| Site Campaign does not appear | Confirm status is active, placement matches the current page, the SDK is installed, and targeting JSON matches the visitor context |
| Site Campaign appears on the wrong page | Tighten placement with PAGE_SLUG, PATH_PATTERN, or CAMPAIGN_DETAIL_PAGE |
| Targeting never matches | Check field casing, match mode, URL parameters, device value, and segment cookie availability |
| Email Campaign cannot save | Check campaign ID format, sender ID format, audience JSON, and content mode requirements |
| Test send fails | Confirm sender profile is ready, email identity is ready, and the test recipient is valid |
| Broadcast send is blocked | Run a test send first, then attest consent |
| Broadcast sends to zero recipients | Include explicit emails values in audience targeting and check exclusions/suppressions |
| Stats look low | Wait for downstream delivery and rollup events, then refresh |
Updated Jun 19, 2026
