Campaign Management Guide


What is a Campaign?

A Campaign is the primary container for organizing and distributing traffic in Simple TDS. Think of it as a traffic funnel that receives visitors and routes them through flows based on filtering rules.

Key Concepts

  • Unique Token: Each campaign gets a 64-character unique token automatically generated at creation
  • Traffic Entry Point: The campaign URL is where you send your traffic
  • Flow Container: Campaigns contain one or more flows that process and filter traffic
  • Statistics Tracking: Every campaign tracks clicks, unique visitors, conversions, and bot traffic
  • Domain Association: Each campaign must be linked to an active domain

Campaign Lifecycle

Create Campaign β†’ Select Domain β†’ Add Flows β†’ Configure Filters β†’ Add Targets β†’ Activate β†’ Send Traffic

A campaign can be:

  • Inactive (default): Won't process traffic, used for setup/testing
  • Active: Processing incoming traffic and routing to targets

Creating a Campaign

Prerequisites

Before creating a campaign, you must have:

Requirements:
  • βœ… At least one active domain - Campaigns require a domain to generate traffic URLs
  • βœ… At least one target - Somewhere to send the traffic

If you don't have these, you'll see warnings in the campaign creation dialog.

Step-by-Step Guide

1. Navigate to Campaigns Page

From the main menu, click Campaigns to view your campaigns list.

2. Click "Create Campaign" Button

Click the + Create Campaign button in the top-right corner.

Blue button with plus icon labeled "Create Campaign"

3. Fill in Campaign Details

Campaign Name (required)

  • Descriptive name for internal use
  • Example: "Facebook Mobile US", "Google Desktop EU", "Native Traffic Q4"
  • Best practice: Use naming conventions that indicate traffic source and audience

Description (optional)

  • Detailed notes about the campaign purpose, traffic source, or strategy
  • Supports multi-line text
  • Useful for team collaboration and future reference

Domain Selection (required)

  • Choose from your active domains
  • Only active domains are shown in the dropdown
  • If domain is marked as "Public", you can use subdomains for campaign URLs
  • Inactive domains are hidden (you must activate them first)
Dialog box with three fields - Name (text input), Description (multi-line textarea), Domain (dropdown showing active domains with [Public] label for public domains)

4. Save the Campaign

Click Save to create the campaign.

Validation Rules:

  • Campaign name is required
  • Domain must be selected
  • Selected domain must be active
  • At least one target must exist in your organization

5. Campaign Created

After successful creation, you'll see:

  • Success notification: "Campaign created successfully"
  • New campaign appears in the campaigns list
  • Campaign status is Inactive by default
  • Unique campaign token is automatically generated
Important: The campaign won't process traffic until you:
  1. Create at least one active flow
  2. Activate the campaign

Campaign Settings

Accessing Campaign Settings

Click on any campaign in the list to view its detail page, then you'll see three tabs:

  • Information - Campaign settings and details
  • Flows - Traffic flows and filtering rules
  • Statistics - Performance metrics and analytics

Information Tab

Basic Information

Campaign Name

  • Click Edit to modify
  • Changes take effect immediately
  • No impact on existing traffic URLs

Description

  • Optional field for notes and documentation
  • Supports markdown-style formatting
  • Visible only to organization members

Domain

  • The domain associated with this campaign
  • Changing domain will change the campaign URL
  • Cannot change if campaign is active and receiving traffic

Status Toggle

  • Switch between Active/Inactive
  • Visual indicator: Green = Active, Gray = Inactive
  • Quick toggle directly from the campaigns list
Campaign detail page showing campaign name at top, edit button, information fields in cards, and active/inactive switch

Campaign Token

The campaign token is displayed in the Information tab:

  • 64-character hexadecimal string
  • Auto-generated and unique
  • Cannot be changed (for security and tracking consistency)
  • Copy button for quick copying
Read-only token field with copy icon button

Campaign URL

The full campaign URL is constructed as:

Standard Domain:

https://yourdomain.com/{campaign_token}/

Public Domain with Subdomain:

https://your-org.publicdomain.com/{campaign_token}/

The URL is displayed with a Copy button in the campaigns list.

Table showing campaign with copy icon in URL column

Public Statistics

Toggle to enable/disable public statistics sharing:

  • Enabled: Generates a public statistics token
  • Disabled: No public access to campaign stats

See Public Statistics section for details.


Campaign URL and Traffic Routing

URL Structure

Every campaign has a unique traffic URL based on its token:

https://{domain}/{campaign_token}/

Example:

https://track.example.com/a3f8e9d4c2b1a0987654321fedcba9876543210fedcba9876543210fedcba98/

Query Parameters

Query parameters are preserved and passed through to targets:

Input URL:

https://track.example.com/abc123.../?
  utm_source=facebook&
  utm_campaign=mobile_us&
  click_id=xyz789

Target URL (after processing):

https://offer.com/landing?
  utm_source=facebook&
  utm_campaign=mobile_us&
  click_id=xyz789&
  unique_id={tds_click_id}

The system automatically:

  • Preserves all original query parameters
  • Adds unique_id parameter with TDS click tracking ID
  • Passes parameters through campaign chains

Public Domain Subdomains

If using a public domain, each organization gets a unique subdomain:

Organization Subdomain:

https://myorg-a1b2.publicdomain.com/{campaign_token}/

This allows multiple organizations to use the same public domain with isolated traffic.

Traffic Processing Flow

When a visitor accesses your campaign URL:

  1. Campaign Lookup - System finds campaign by token
  2. Client Detection - Extracts IP, country, device, OS, browser, language
  3. Bot Detection - Identifies bot traffic using user-agent and IP patterns
  4. Flow Selection - Selects flows by priority (highest first)
  5. Filter Matching - Applies filter rules (country, device, etc.)
  6. Target Selection - Chooses target based on weights
  7. Click Tracking - Records click asynchronously (non-blocking)
  8. Redirect - Sends visitor to selected target URL
Processing Time: Typically 50-150ms from entry to redirect

Marker Auto-Redirect Mode

Marker Auto-Redirect Mode lets a campaign redirect only visitors who arrive with a specific URL parameter (the "marker"). Traffic without the correct marker is logged but not redirected β€” the visitor stays on the page.

Key benefit: The offer page sees a clean referrer URL β€” the marker parameter is stripped from the browser address bar before the redirect, so the offer never sees your traffic source URL.

How It Works

  1. You embed a small JS snippet on your landing page (blog, pre-lander, etc.)
  2. The snippet checks for the marker in the URL: ?redirect=VALUE
  3. If the correct marker is present β†’ cleans URL β†’ redirects to the offer
  4. If no marker β†’ visitor stays on the page (click is still tracked)
Landing page URL (with marker):
https://your-blog.com/article/?redirect=a3f8e9d4c2b1...

                    ↓ JS snippet checks marker
                    ↓ Removes ?redirect=... from browser bar (history.replaceState)
                    ↓ Sends AJAX check to TDS server

TDS Server decision:
  marker valid  β†’ respond: redirect β†’ browser goes to offer
  marker absent β†’ respond: no-redirect β†’ visitor stays

Enabling Marker Mode

  1. Open the campaign detail page β†’ Information tab
  2. Find the Marker Auto-Redirect Mode section
  3. Toggle Enable Marker Mode to ON
  4. Optionally change the URL Parameter Name (default: redirect)
  5. Click Save Campaign
  6. A unique 64-character Marker Value is auto-generated on first enable
Important: Save the campaign before copying the marker value. The value is generated on save.

Campaign Settings

SettingDescriptionDefault
marker_enabled Enables marker mode for this campaign OFF
marker_key URL parameter name to look for (alphanumeric + underscore, max 32 chars) redirect
marker_value Expected value (64-char hex, auto-generated). Only requests with this exact value are redirected. auto-generated

Embedding the JS Snippet

The Integration tab (on the campaign detail page) generates a ready-to-use obfuscated script. Copy and paste it into your landing page's <head> or <body>:

<script>(function(_0xa,_0xb,_0xc){var _0xd=function(s){return atob(s)};
window.TDS_URL=_0xd(_0xa);window.TDS_MARKER_KEY=_0xd(_0xc);
var _0xe=document.createElement('script');_0xe.src=_0xd(_0xb);
document.head.appendChild(_0xe);})('BASE64_URL','BASE64_SCRIPT','BASE64_KEY')</script>

When decoded, this script:

  • Sets window.TDS_URL to your campaign URL
  • Sets window.TDS_MARKER_KEY to your marker key (redirect)
  • Dynamically loads tds-redirect-v2.js from your TDS server

Traffic URL Format

When sending traffic to the landing page, append the marker to the URL:

https://your-landing-page.com/?redirect=a3f8e9d4c2b1...64chars...

The Integration tab shows this URL example with your actual marker value.

Tip: Use a URL shortener or cloaker at the traffic source level. The marker stays hidden in the landing page URL rather than being visible in ad tracking parameters.

Regenerating the Marker Value

If your marker value is compromised (e.g., someone is replicating your traffic URLs):

  1. Click Regenerate button next to the marker value
  2. Confirm the action
  3. A new 64-char value is generated immediately
  4. Old marker value stops working instantly
  5. Update all your traffic links with the new marker value
Warning: Regenerating invalidates all existing traffic links. Update your ad campaigns and landing pages with the new marker before traffic arrives.

How Referrer Cleaning Works

The JS snippet uses history.replaceState() to remove the marker parameter from the browser address bar before the redirect happens. This means:

  • The browser's referrer header sent to the offer shows the clean landing page URL (no marker)
  • The offer page cannot see which traffic source the visitor came from
  • The landing page URL in browser history is also clean
Before redirect:  https://blog.com/article/?redirect=a3f8...
After replaceState: https://blog.com/article/
Offer sees referrer: https://blog.com/article/  ← clean

Troubleshooting Marker Mode

Visitor not being redirected
  • Check that marker mode is enabled and campaign is saved
  • Verify the URL parameter name matches marker_key (default: redirect)
  • Verify the marker value in the URL matches exactly (case-sensitive, 64 chars)
  • Confirm the JS snippet is loaded on the landing page (check browser console)
Marker mode not working after save
  • Ensure you clicked Save Campaign after enabling marker mode
  • Copy the snippet again from the Integration tab after saving
  • The marker value is only generated on first save
Debug mode: Add ?tds_debug=1 to the landing page URL to see a debug panel showing TDS decisions in real time.

Public Statistics

Public statistics allow you to share campaign performance metrics with external parties (partners, advertisers, traffic buyers) without giving them access to your TDS account.

Enabling Public Statistics

  1. Navigate to campaign detail page
  2. Switch to the Information tab
  3. Find the Public Statistics section
  4. Toggle Enable Public Statistics to ON
  5. A unique public statistics token is automatically generated
Toggle switch labeled "Enable Public Statistics" with green active state, showing generated token below

Public Statistics Token

When enabled, you'll see:

  • Public Statistics Token: 64-character unique token
  • Public URL: Full URL to share with partners
  • Regenerate button: Generate a new token (invalidates old URL)
  • Copy button: Quick copy the public URL

Public Statistics URL Format:

https://yourdomain.com/statistics/public/{public_stats_token}

What Partners Can See

The public statistics page shows:

  • Total Clicks: All traffic received
  • Unique Clicks: Unique IP visitors
  • Conversions: Total conversions tracked
  • Bots: Detected bot traffic
  • Conversion Rate: Conversions / Unique Clicks
  • Time-Series Charts: Traffic over time (last 7/30 days)
  • Geographic Distribution: Traffic by country
  • Device Breakdown: Desktop/Mobile/Tablet stats
What Partners CANNOT See:
  • Campaign name, token, or internal details
  • Individual flow configurations or targets
  • Target URLs or destinations
  • Other campaigns or organization data
  • User accounts or settings

Regenerating the Token

If you need to revoke access:

  1. Click Regenerate Token button
  2. Confirm the action
  3. A new token is generated
  4. Old public URL is immediately invalidated
  5. Share the new URL with authorized partners

Use Case: Remove access from a former partner while keeping statistics enabled for others.

Disabling Public Statistics

Toggle Enable Public Statistics to OFF to:

  • Disable all public access
  • Keep the token (re-enabling uses the same token)
  • Immediately invalidate the public URL

S2S Postback URL (Traffic Source Relay)

The S2S Postback URL field lets Simple TDS automatically relay conversion events back to your traffic source (RTB Panda, ClickBaza, PropellerAds, etc.) using their S2S postback protocol.

How It Works

  1. Traffic source β†’ TDS: The traffic source sends a visitor with their own click ID in the URL (e.g. ?clickid=abc123). TDS stores this value in the click record.
  2. Offer β†’ TDS β†’ Traffic source: When the offer fires a conversion postback to TDS, TDS records the conversion and immediately fires a second outbound HTTP GET to the traffic source β€” substituting macros with the original click ID and conversion data.
Traffic Source ──[?clickid=abc123]──→ TDS Campaign URL
Offer ──[conversion postback]──→ TDS /c/postback
TDS ──[upstream S2S]──→ Traffic Source (clickid=abc123, payout=25.00)

Configuration

  1. Open Campaign Settings β†’ Information tab
  2. Locate the S2S Postback URL field
  3. Paste the postback URL template from your traffic source, replacing their macros with TDS macro names in curly braces

Example (RTB Panda / ClickBaza):

https://postback.rtbpanda.com/postback?clickid={clickid}&payout={payout}&status={status}

Available Macros

MacroSourceDescription
{tds_click_id}SystemTDS unique click UUID
{payout}SystemConversion value from the offer postback
{revenue}SystemSame as {payout} (alias)
{status}SystemConversion type (confirmed, lead, sale…)
{clickid}Query paramTraffic source click ID (if source used ?clickid=)
{CLICK_ID}Query paramSame, if source uses uppercase ?CLICK_ID=

Any query parameter that arrived with the visitor is automatically available as a macro using its exact name in curly braces.

Traffic Source URL Setup

In the traffic source dashboard, set your destination URL to the TDS campaign URL with the source's click ID macro:

https://yourdomain.com/{campaign_token}/?clickid={CLICK_ID}

Replace {CLICK_ID} with the network's actual macro syntax.

Security: Only http/https URLs are accepted. Requests to private/internal IPs are blocked (SSRF protection). Each request has a 10-second timeout.

Managing Multiple Campaigns

Campaigns List View

The campaigns list shows all your campaigns with key metrics:

Columns:

  • ID: Campaign database ID
  • Name: Campaign name (clickable to view details)
  • Description: Campaign notes
  • URL: Copy button for campaign traffic URL
  • Status: Active/Inactive toggle switch
  • Statistics: Inline metrics (clicks, uniques, conversions, bots)
  • Created At: Campaign creation date
  • Actions: View, Edit, Delete buttons
Table with multiple campaigns showing colored badge statistics - blue for clicks, cyan for uniques, yellow for bots, green for conversions

Inline Statistics

Each campaign row shows real-time statistics:

  • πŸ–±οΈ Clicks (Blue badge): Total traffic
  • πŸ‘€ Uniques (Cyan badge): Unique visitors
  • πŸ€– Bots (Yellow badge): Detected bot traffic
  • βœ… Conversions (Green badge): Total conversions

Hover over badges to see tooltips with full descriptions.

Filtering and Search

Use the search panel to find campaigns:

Name Filter:

  • Enter partial campaign name
  • Case-insensitive search
  • Press Enter to search

Status Filter:

  • All / Active / Inactive
  • Dropdown selection

Domain Filter:

  • Filter by associated domain
  • Dropdown showing all domains

Search Actions:

  • Search button: Apply filters
  • Clear button: Reset all filters and reload all campaigns
Search panel with three filter dropdowns and two buttons

Sorting

Click column headers to sort:

  • ID: Ascending/Descending
  • Name: Alphabetical
  • Status: Active first or Inactive first
  • Created At: Newest/Oldest first

Sort indicator (arrow icon) shows current sort direction.

Bulk Operations

You can quickly manage multiple campaigns:

Quick Status Toggle:

  • Click the switch in any row to activate/deactivate
  • No need to open campaign details
  • Optimistic UI update (instant feedback)
  • Validation: Campaign needs active flows to activate

Copy URL:

  • Click copy icon in URL column
  • Success notification confirms copy
  • URL includes https:// prefix

Campaign Chaining

Campaign chaining allows you to route traffic from one campaign to another internally without an additional HTTP redirect. This enables complex multi-step traffic distribution scenarios.

What is Campaign Chaining?

Instead of redirecting to an external URL, a target can point to another campaign within your organization. When traffic hits this target, it's processed by the second campaign transparently.

Example Use Case:

Campaign A (Facebook Traffic)
  ↓
Flow A (US Mobile Filter)
  ↓
Target: Campaign B ← Instead of external URL
  ↓
Campaign B (Offer Rotation)
  ↓
Flow B (Time-based Filter)
  ↓
Target: https://offer.com

Benefits

  • βœ… No Extra Redirect: Single HTTP redirect to final destination
  • βœ… Full Tracking: Both campaigns record click statistics
  • βœ… Parameter Propagation: Query parameters pass through the chain
  • βœ… Complex Logic: Layer multiple filtering strategies
  • βœ… Organization Isolated: Can only chain campaigns in same organization

How to Create a Campaign Chain

  1. Create Target with Campaign Link:
    • Go to Targets page
    • Click "Create Target"
    • Select type: Campaign Chain
    • Choose the target campaign from dropdown
    • Save the target
  2. Link Target to Flow:
    • Go to campaign's flow detail page
    • In Targets section, add the campaign chain target
    • Set weight (if using multiple targets)
    • Save
  3. Activate Both Campaigns:
    • Source campaign must be active
    • Target campaign must be active
    • Both must have active flows

Chain Limitations

  • Maximum Depth: 5 levels (Aβ†’Bβ†’Cβ†’Dβ†’E)
  • Loop Prevention: System detects circular chains (Aβ†’Bβ†’A is blocked)
  • Same Organization: Cannot chain to campaigns in other organizations
  • Performance: Each chain level adds ~50ms processing time

Click Tracking in Chains

Each campaign in the chain records a click with metadata:

Campaign A Click:

{
  campaign_id: 1,
  source_campaign_id: null,  // Direct traffic
  chain_depth: 0
}

Campaign B Click:

{
  campaign_id: 2,
  source_campaign_id: 1,     // Came from Campaign A
  chain_depth: 1             // First level in chain
}

This allows you to analyze chain performance and drop-off rates.


Best Practices

Campaign Organization

Naming Conventions

Use consistent naming patterns:

{Source}-{GEO}-{Device}-{Quarter}
Examples:
- FB-US-Mobile-Q4
- Google-EU-Desktop-BlackFriday
- Native-Worldwide-All-Evergreen

Campaign Structure

  • One Campaign per Traffic Source: Separate Facebook, Google, Native ads
  • Geo-Specific Campaigns: Split by country for better targeting
  • Device-Specific: Mobile vs Desktop for different offers
  • Seasonal Campaigns: Create new campaigns for promotions/events

Performance Optimization

Minimize Flows

  • Keep 3-5 flows per campaign maximum
  • More flows = longer processing time
  • Use filter groups instead of many flows

Cache Efficiency

  • Campaigns are cached for 60 seconds
  • High-traffic campaigns stay in cache
  • Reduce database queries automatically

Domain Strategy

  • Use separate domains for different traffic sources
  • Rotate domains to avoid blocking
  • Monitor domain health (SSL, DNS)

Security

Token Protection

  • Never share campaign tokens publicly
  • Tokens are permanent (cannot be changed)
  • Use public statistics for sharing metrics

Public Statistics

  • Only enable when necessary
  • Regenerate tokens when removing partner access
  • Monitor public statistics access in logs

Access Control

  • Use organization-level isolation
  • Different teams = different organizations
  • Assign user roles appropriately (admin/manager/user)

Traffic Management

Testing Before Going Live

  1. Create campaign (inactive)
  2. Add flows with filters
  3. Add test targets
  4. Test with sample traffic
  5. Verify click tracking
  6. Activate when ready

Gradual Activation

  • Start with small traffic volume
  • Monitor statistics for 24 hours
  • Check for bot traffic patterns
  • Scale up gradually

A/B Testing

  • Create two campaigns with different flow configurations
  • Split traffic 50/50 using external rotation
  • Compare conversion rates
  • Optimize based on results

Monitoring

Key Metrics to Watch

  • Unique Click Rate: Should be 60-90% of total clicks
  • Bot Percentage: Should be under 10% for quality traffic
  • Conversion Rate: Track by campaign, flow, and target
  • Response Time: Campaign processing should be under 200ms

Daily Checks

  • Review top campaigns performance
  • Check for unusual bot traffic spikes
  • Verify conversion tracking is working
  • Monitor domain health and SSL status

Weekly Analysis

  • Compare campaign performance week-over-week
  • Identify top-performing flows and targets
  • Adjust weights and filters based on data
  • Archive or delete inactive campaigns

Troubleshooting

Campaign Won't Activate

Error: "Cannot activate campaign: no active flows"

Solution:

  1. Create at least one flow for the campaign
  2. Ensure the flow is set to Active
  3. Verify the flow has at least one target linked
  4. Try activating the campaign again
Error: "Cannot activate campaign: inactive domain"

Solution:

  1. Go to Domains page
  2. Activate the domain associated with this campaign
  3. Return to campaign and toggle activation

Campaign URL Not Working

Problem: Campaign URL returns 404 or error

Check:

  • Campaign is Active (toggle in campaign list)
  • Domain is Active and DNS is configured correctly
  • Token in URL exactly matches campaign token (case-sensitive)
  • URL ends with trailing slash /

Correct Format:

https://domain.com/{exact-token}/

Problem: Campaign URL redirects to wrong target

Check:

  • Flow priority order (higher priority processes first)
  • Filter rules (traffic may not match expected flow)
  • Target weights (weighted random selection)
  • Date/time filters (may activate at specific times)

Statistics Not Updating

Problem: Click count is 0 despite traffic

Check:

  • Campaign is Active
  • Browser is not blocking the traffic URL
  • Check bot detection (bots don't count as regular clicks)
  • Verify IP is not in blacklist filters
Refresh Statistics:
  • Statistics update in real-time but may cache for up to 60 seconds
  • Reload the page to see latest data

Public Statistics Issues

Problem: Public statistics URL shows error

Check:

  • Public statistics are Enabled
  • Token in URL is correct (regenerating creates new token)
  • URL format: /statistics/public/{token} (no campaign_id)

Problem: Partner cannot access statistics

Solution:

  • Copy the exact URL from campaign detail page
  • Ensure public statistics toggle is ON (green)
  • Check if token was regenerated (old URLs are invalidated)
  • Verify the campaign has some statistics to display

Campaign Chaining Issues

Problem: Chain target returns error

Check:

  • Target campaign exists and is Active
  • Target campaign has at least one active flow
  • Both campaigns belong to same organization
  • Chain depth doesn't exceed 5 levels
  • No circular chain (Aβ†’Bβ†’A)

Problem: Statistics show double clicks

Expected Behavior:
  • Each campaign in chain records a separate click
  • This is intentional for full chain tracking
  • Use source_campaign_id in database to trace chain


Quick Reference

Campaign States

State Description Can Receive Traffic?
Inactive Default state, used for setup ❌ No
Active (with flows) Processing traffic normally βœ… Yes
Active (no flows) Cannot activate until flows exist ❌ No

URL Formats

Type Format Example
Standard Domain https://{domain}/{token}/ https://track.com/abc.../
Public Domain https://{org}.{domain}/{token}/ https://org-123.public.com/abc.../
Public Stats https://{domain}/statistics/public/{token} https://track.com/statistics/public/xyz.../

Keyboard Shortcuts

Action Shortcut
Return to campaigns list ESC (from campaign detail page)
Search campaigns Enter (in search field)

Need Help?
  • Check the Troubleshooting section above
  • Review related documentation in the links
  • Contact support for technical assistance