Campaign Management Guide
Table of Contents
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:
- β 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.
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)
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
- Create at least one active flow
- 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 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
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.
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_idparameter 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:
- Campaign Lookup - System finds campaign by token
- Client Detection - Extracts IP, country, device, OS, browser, language
- Bot Detection - Identifies bot traffic using user-agent and IP patterns
- Flow Selection - Selects flows by priority (highest first)
- Filter Matching - Applies filter rules (country, device, etc.)
- Target Selection - Chooses target based on weights
- Click Tracking - Records click asynchronously (non-blocking)
- Redirect - Sends visitor to selected target URL
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.
How It Works
- You embed a small JS snippet on your landing page (blog, pre-lander, etc.)
- The snippet checks for the marker in the URL:
?redirect=VALUE - If the correct marker is present β cleans URL β redirects to the offer
- 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
- Open the campaign detail page β Information tab
- Find the Marker Auto-Redirect Mode section
- Toggle Enable Marker Mode to ON
- Optionally change the URL Parameter Name (default:
redirect) - Click Save Campaign
- A unique 64-character Marker Value is auto-generated on first enable
Campaign Settings
| Setting | Description | Default |
|---|---|---|
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_URLto your campaign URL - Sets
window.TDS_MARKER_KEYto your marker key (redirect) - Dynamically loads
tds-redirect-v2.jsfrom 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.
Regenerating the Marker Value
If your marker value is compromised (e.g., someone is replicating your traffic URLs):
- Click Regenerate button next to the marker value
- Confirm the action
- A new 64-char value is generated immediately
- Old marker value stops working instantly
- Update all your traffic links with the new marker value
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
- 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)
- 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
?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
- Navigate to campaign detail page
- Switch to the Information tab
- Find the Public Statistics section
- Toggle Enable Public Statistics to ON
- A unique public statistics token is automatically generated
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
- 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:
- Click Regenerate Token button
- Confirm the action
- A new token is generated
- Old public URL is immediately invalidated
- 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
- 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. - 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
- Open Campaign Settings β Information tab
- Locate the S2S Postback URL field
- 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
| Macro | Source | Description |
|---|---|---|
{tds_click_id} | System | TDS unique click UUID |
{payout} | System | Conversion value from the offer postback |
{revenue} | System | Same as {payout} (alias) |
{status} | System | Conversion type (confirmed, lead, saleβ¦) |
{clickid} | Query param | Traffic source click ID (if source used ?clickid=) |
{CLICK_ID} | Query param | Same, 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.
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
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
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
-
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
-
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
-
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
- Create campaign (inactive)
- Add flows with filters
- Add test targets
- Test with sample traffic
- Verify click tracking
- 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
Solution:
- Create at least one flow for the campaign
- Ensure the flow is set to Active
- Verify the flow has at least one target linked
- Try activating the campaign again
Solution:
- Go to Domains page
- Activate the domain associated with this campaign
- 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
- 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
- Each campaign in chain records a separate click
- This is intentional for full chain tracking
- Use
source_campaign_idin 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) |
- Check the Troubleshooting section above
- Review related documentation in the links
- Contact support for technical assistance