Trackily Documentation
The complete guide to setting up and using Trackily — your self-hosted affiliate tracker.
Introduction
Trackily is a self-hosted multi-campaign affiliate tracking platform, inspired by Keitaro. It lets you track clicks, manage flows, optimize landing pages, and monitor conversions — all from your own server with full data ownership.
Key Capabilities
| Area | Features |
|---|---|
| Tracking | Click tracking, JS pixel, conversion postback, unique visitors, frequency capping |
| Routing | Smart flow engine (forced/regular/default), weighted rotation, visitor binding |
| Integrations | 10 traffic source templates, Everflow API, Shopify, WooCommerce, Stripe |
| Optimization | A/B testing, Traffic AI, Automizer rules, Anti-Fraud Kit |
| Analytics | Advanced reports, multi-step funnels, LTV tracking, AOV/ROAS/CAC |
| E-Commerce | Product catalog, shopping funnel, status scheme, retargeting pixels, multi-touch attribution |
| Audiences | Segment export (FB/Google), real-time CAPI/Events API passback |
| Notifications | In-app, Email, Telegram, Webhook |
Installation
Requirements
- VPS with Ubuntu 20+ or Debian 11+ (minimum 1GB RAM)
- PostgreSQL database
- A domain name pointed to your server
- Ports 80 and 443 open
Quick Install (VPS)
SSH into your server and run:
curl -sSL https://license.trackily.online/install.sh | bash -s -- YOUR_LICENSE_KEY
Docker Install
Create a docker-compose.yml:
version: "3.8"
services:
trackily:
image: trackily/tracker:latest
restart: always
ports:
- "3000:3000"
env_file: .env
depends_on:
- postgres
postgres:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_DB: trackily
POSTGRES_USER: trackily
POSTGRES_PASSWORD: your_secure_password
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Create a .env file:
LICENSE_KEY=your-license-key-here
LICENSE_SERVER_URL=https://license.trackily.online
DATABASE_URL=postgresql://trackily:your_secure_password@postgres:5432/trackily
ADMIN_PASSWORD=YourAdminPassword123!
PORT=3000
Then run:
docker compose up -d
Coolify / Panel Manager
Add Docker Image
In your panel, create a new service with image: trackily/tracker:latest
Set Environment Variables
Add LICENSE_KEY, DATABASE_URL, ADMIN_PASSWORD, PORT=3000
Deploy
Click deploy — Trackily starts automatically and initializes the database.
Your First Campaign
Follow these steps to create your first tracking campaign:
Add a Traffic Source
Go to Traffic Sources → click Add Source. Select your platform (e.g. Kadam) and enter your API credentials. The form auto-fills with the right macros.
Add an Affiliate Network
Go to Affiliate Networks → click Add Network. Enter your Everflow API URL and key. Click Test Connection to verify.
Import Offers
On your network, click Import Offers. Trackily fetches all active offers with payouts and geo-targeting.
Create a Landing Page
Go to Landing Pages → Add Landing. Choose "Local" to paste HTML or "URL" to use an external page.
Create a Campaign
Go to Campaigns → Add Campaign. Set a name, choose a slug (e.g. mcafee-us), select your offer and source.
Create a Flow
In your campaign, go to Flows → Add Flow. Set type to "Default", add your landing page and offer with weights.
Get Your Tracking Link
Your tracking link is: https://your-domain.com/c/mcafee-us. Add source macros: ?click_id={click_id}&cost={cost}&sub2={campaign_id}
Configure Postback
In your affiliate network, set the postback URL to: https://your-domain.com/postback?click_id={sub2}&amount={payout_amount}&txid={transaction_id}
The postback system accepts aliases — click_id, subid, sub_id, clickid all work for the click identifier.
Dashboard
The dashboard provides a real-time overview of your campaigns with three data tabs:
Everflow Tab
Shows stats pulled directly from your Everflow affiliate network: clicks, conversions, revenue, payout, and ROI. Uses the Everflow Affiliate API.
Kadam Tab
Shows campaign stats from your Kadam traffic source: impressions, clicks, CTR, cost. Uses the Kadam REST API.
Trackily Tab
Shows native tracking data: clicks, unique visitors, leads, conversions, cost, revenue, profit, ROI, EPC. This is your primary dashboard for campaign performance.
Date Range: Use the presets (Today, Yesterday, 7d, 30d) or select custom dates. Filter by campaign using the dropdown.
Campaigns
A campaign is the central entity that connects a traffic source, landing pages, offers, and routing flows.
Creating a Campaign
| Field | Description | Example |
|---|---|---|
| Name | Display name for your campaign | McAfee US Push |
| Slug | URL identifier (unique) | mcafee-us |
| Offer | Default offer to promote | McAfee Antivirus |
| Source | Traffic source sending clicks | Kadam |
| Cost Model | How you're charged | CPC ($0.05) |
| Domain | Custom tracking domain (optional) | track.example.com |
Campaign Settings
Bot Filter
Enable to block known bots. Bots are redirected to a URL of your choice (default: google.com). Clicks with fraud score > 50 are blocked.
Frequency Capping
Limit how many times a visitor can see your campaign. Example: max 3 visits per 24 hours per IP.
External Campaign IDs
Link your Kadam/PropellerAds campaign IDs to pull combined stats from both Trackily and the source API.
Tracking Link
Each campaign generates a tracking URL:
https://your-domain.com/c/mcafee-us?click_id={click_id}&cost={cost}&sub2={campaign_id}
Paste this in your traffic source as the destination URL. The macros will be replaced with real values by the traffic source.
Offers
An offer is the product or service you're promoting. Offers can be created manually or imported from Everflow.
Import from Everflow
Connect Network
Go to Affiliate Networks → your Everflow network → click Test Connection.
Import
Click Import Offers. Trackily fetches all active offers with payouts and geo data.
Offer Caps
Set daily and total caps to limit conversions. When a cap is reached, Trackily automatically routes traffic to the next available offer in the flow.
Geo-specific Payouts
Configure different payouts per country. Example: McAfee US = $40 CPA, McAfee FR = $25 CPA.
Landing Pages
Landing pages are shown to visitors before they see the offer. Two types:
| Type | How it works | Best for |
|---|---|---|
| Local | HTML stored in Trackily database, served directly | Prelanders, breach checkers, scan pages |
| URL | Redirects visitor to an external URL | Hosted landing pages, WordPress sites |
Import Landing Pages
Two import methods:
- From URL: Paste a URL and Trackily downloads the HTML
- From HTML: Upload or paste raw HTML code
Flows & Routing
Flows determine how traffic is routed within a campaign. Each campaign can have multiple flows with different rules.
Flow Types
| Type | Priority | Description |
|---|---|---|
| Forced | #1 (Highest) | Always matches if filters are met. Overrides all other flows. |
| Regular | #2 | Matches if filters are met. Weighted random selection among matching regular flows. |
| Default | #3 (Fallback) | Catches all traffic that doesn't match any other flow. Only one per campaign. |
Flow Filters
Add conditions to target specific traffic. Available filters:
| Filter | Operators | Example |
|---|---|---|
| Country | equals, not_equals, in, not_in | Country in US,CA,UK |
| Device | equals, not_equals | Device equals Mobile |
| OS | equals, contains, in | OS equals Windows |
| Browser | equals, contains | Browser equals Chrome |
| Language | equals, in | Language in en,fr |
Weighted Rotation
Assign weights to landing pages and offers for A/B testing:
Landing A: weight 100 (67% traffic)
Landing B: weight 50 (33% traffic)
Higher weight = more traffic. Use the Balance button to equalize weights.
Visitor Binding
Ensure returning visitors see the same landing page/offer:
| Binding | Effect |
|---|---|
| None | New random selection each visit |
| Landing | Same landing page on return (24h) |
| Offer | Same offer on return (24h) |
| Landing + Offer | Same combo on return (24h) |
Conflict Detection
Trackily warns you about potential flow conflicts:
- Error: Multiple default flows (only the first one runs)
- Warning: Forced flow without filters shadows everything
- Info: Regular flows with identical filters (unintentional A/B test)
Traffic Sources
Trackily comes with 10 pre-configured traffic source templates with smart forms:
| Source | Type | Click ID Macro |
|---|---|---|
| Kadam | Push/Native/Pop | {click_id} |
| PropellerAds | Push/Pop/Interstitial | ${SUBID} |
| Meta Ads | Feed/Stories/Reels | fbclid |
| TikTok Ads | In-feed/Top-view | __CLICKID__ |
| Google Ads | Search/Display/YouTube | {gclid} |
| Taboola | Native | {click_id} |
| MGID | Native/Content | {click_id} |
| ExoClick | Pop/Push/Native | {conversions_tracking} |
| RichAds | Push/Pop/Direct | ${CLICK_ID} |
| Custom | Any | You define |
Each template auto-fills the postback URL, click ID parameter, and available macros. Just add your API key!
Affiliate Networks
Connect your affiliate networks to import offers and sync conversions. Everflow has full API integration.
Everflow Setup
Add Network
Go to Networks → Add → Enter your Everflow API URL and key (X-Eflow-API-Key header).
Test Connection
Click Test → you should see "Connection successful".
Import Offers
Click Import Offers → all active offers are fetched with payouts and geo.
Sync Conversions
Click Sync → pulls approved conversions and matches them to your clicks.
Domains
Add custom domains for cleaner tracking links. Each domain can be linked to a campaign.
Features: DNS verification, SSL status check, DNS provider detection (Cloudflare, etc.), domain grouping.
Reports
The Reports page provides detailed analytics with multiple grouping options:
Group By Options
| Category | Options |
|---|---|
| Campaign | Campaign, Landing Page, Offer |
| Dimensions | Country, OS, Browser, Device, Language |
| Time | Hour of Day, Day of Week, Date |
| Traffic | ISP, Referrer Domain |
| Sub IDs | Sub1, Sub2, Sub3, Sub4, Sub5 |
Metrics Available
Clicks, Unique, Leads, Conversions, Cost, Revenue, Profit, ROI%, CR%, EPC, CPA, CPL
Period Comparison
Check "vs Previous" to compare current period with the previous one (e.g. today vs yesterday, this week vs last week).
Column Templates
Customize which columns are visible in your reports and save presets for quick switching.
Click "Columns" Button
In the Reports toolbar, click the columns icon to open the dropdown.
Toggle Columns
Check/uncheck: Clicks, Unique, Leads, Cost, Revenue, Profit, ROI%, CR%, EPC.
Save Preset
Enter a name and click Save. Your preset is stored locally for quick access.
Export / Import
Export
Export your data in CSV or JSON format. Go to Settings → Export section. Available types: Campaigns, Offers, Flows, Sources, Networks, Landing Pages, or All.
Import
Import data from JSON. Go to Settings → Import section. Upload a JSON file with an array of objects matching the entity schema.
Postback System
Trackily uses a Keitaro-style universal postback with parameter aliases. Any affiliate network can fire conversions regardless of their naming convention.
Postback URL
https://your-domain.com/postback?click_id={sub2}&amount={payout_amount}&txid={transaction_id}
Parameter Aliases
| Parameter | Accepted Names |
|---|---|
| Click ID | subid, sub_id, click_id, clickid, trackID, aff_sub, aff_click_id, sub1, sub2 |
| Payout | payout, amount, revenue, price, pay, money, summ_approved, payment, order_sum, affiliateCommission, value |
| Status | status, type, state, conversion_status |
| Transaction ID | tid, transaction_id, txid, trans_id, receipt |
No matter what your network calls the parameter, Trackily will find it. Just include the click ID and payout — everything else is optional.
Dynamic Call-Outs
Personalize your landing pages by injecting visitor data. Use double-brace placeholders in your HTML:
| Variable | Output Example |
|---|---|
{{country}} | United States |
{{city}} | New York |
{{os}} | Windows |
{{browser}} | Chrome |
{{device}} | Desktop |
{{ip}} | 203.0.113.42 |
{{language}} | en |
{{country_code}} | US |
{{region}} | California |
{{isp}} | Comcast Cable |
Example
<h1>Attention {{city}} residents!</h1>
<p>Your {{os}} device may be at risk.</p>
Becomes:
<h1>Attention New York residents!</h1>
<p>Your Windows device may be at risk.</p>
Multi-Step Funnels
Track visitor progress through multiple landing page steps. Each step is reported automatically.
How to Use
In your local landing page, call the step tracking function:
// Step 1 is auto-tracked on page load
// Track custom steps:
window.__trackily.reportStep(2, 'Email Submitted');
window.__trackily.reportStep(3, 'Scan Started');
window.__trackily.reportStep(4, 'Offer Shown');
View funnel stats in Reports → Funnel tab to see dropoff at each step.
Custom Conversions
Define multiple conversion types beyond just "sale":
| Type | Use Case |
|---|---|
| Sale | Primary purchase completed |
| Lead | Form submission, email capture |
| Upsell | Additional product sold |
| Rebill | Recurring subscription charge |
Pass the type in your postback: &conversion_type=upsell. Rebills automatically link to the parent conversion for LTV tracking.
GeoIP Databases
Trackily uses local MaxMind GeoLite2 databases for instant geo-detection (~1ms per lookup, no external API calls).
Get MaxMind License Key
Create a free account at maxmind.com → My License Keys → Generate.
Download Databases
Go to Settings → GeoIP → paste your key → click Download All.
Verify
Status should show "OK" for City and ASN databases. Test with an IP address.
Manual Cost Update
Correct cost data after the fact when your traffic source reports different costs than bid.
Single Click
In the Clicks report, click the $$ button next to any click to edit its cost.
Bulk Update
Select a campaign and date range, then set a new cost-per-click value. All clicks in that range are updated.
Anti-Fraud Kit PRO
Detect and block fraudulent clicks in real-time with a multi-factor scoring system.
Fraud Score (0-100)
| Factor | Score | Trigger |
|---|---|---|
| Known Bot UA | +40 | Googlebot, curl, wget, python-requests, etc. |
| Click Flood (30s) | +25 | >5 clicks from same IP in 30 seconds |
| Click Flood (5m) | +30 | >20 clicks from same IP in 5 minutes |
| Datacenter IP | +15 | ISP contains: hosting, cloud, aws, hetzner |
| Blacklisted IP | +50 | IP in manual or auto blacklist |
| Suspicious UA | +10 | Empty or very short user agent |
Clicks with score ≥ 50 are blocked (with bot filter enabled). IPs with score ≥ 80 are auto-blacklisted.
IP Blacklist
Manually add IPs or ranges. Auto-blacklist adds IPs automatically when fraud score exceeds the threshold.
Automizer PRO
Create automation rules that monitor your campaigns and take action based on performance metrics.
Rule Structure
IF [metric] [operator] [value] WITHIN [time_window]
THEN [action]
Example Rules
| Rule | Condition | Action |
|---|---|---|
| Stop losing campaign | ROI < -30% (24h) | Pause campaign |
| Cap alert | Conversions ≥ 50 (24h) | Send notification |
| Boost winner | CR > 5% (24h) | Change landing weight to 150 |
| Cost control | Cost > $500 (24h) | Pause campaign + notify |
Available Metrics
clicks, conversions, revenue, cost, roi, cpa, cr, epc
Available Actions
pause_campaign, pause_offer, send_notification, change_weight, change_bid
Traffic Distribution AI PRO
Automatically optimize landing page and offer weights based on real-time conversion data.
The AI analyzes conversion rate and EPC per landing/offer, then suggests weight adjustments. Enable it per flow in the flow editor.
The AI needs at least 100 clicks per variant before making suggestions. It evaluates performance every hour.
Notifications PRO
Get alerted on important events via 4 channels:
| Channel | Setup |
|---|---|
| In-App | Enabled by default. Bell icon in the dashboard. |
| Settings → SMTP host, port, username, password, from address. | |
| Telegram | Settings → Bot Token + Chat ID. Create a bot via @BotFather. |
| Webhook | Settings → URL endpoint. Receives JSON POST on events. |
Notification Rules
Create rules to trigger on specific events: conversion, fraud_alert, rule_triggered, link_down, campaign_paused, offer_capped. Set conditions, choose channels, and add a cooldown to prevent spam.
A/B Testing PRO
Compare landing pages and offers using flow weights and statistical significance testing.
Set Up Variants
In a flow, add 2+ landing pages with equal weights (50/50 or any split).
Run Traffic
Send traffic to the campaign and wait for enough data (100+ clicks per variant).
Check Results
Reports → A/B Test tab shows statistical significance, confidence level, and winner recommendation.
Lander Protection PRO
Protect your landing pages from spy tools and competitors.
When enabled, Trackily detects:
- Headless browsers (Selenium, Puppeteer)
- Known spy tool referrers (AdPlexity, Anstrex, SpyPush, etc.)
- Missing browser plugins (bot indicator)
Detected spies see "Access Denied" instead of your landing page. Enable per landing page in the editor.
Conversion Pixel (JS)
The JavaScript pixel allows e-commerce merchants to track conversions client-side, directly from their thank-you page — no S2S postback needed.
Installation
Add this script to your website's <head> or thank-you page:
<script src="https://your-tracker.com/pixel.js"></script>
Tracking Events
// Track a purchase
trackily.track('purchase', {
order_id: 'ORD-12345',
revenue: 89.99,
currency: 'USD',
products: [
{ name: 'Running Shoes', price: 59.99, qty: 1 },
{ name: 'Sports Socks', price: 14.99, qty: 2 }
]
});
// Track add-to-cart
trackily.track('add_to_cart', {
product: 'Running Shoes',
price: 59.99
});
// Track checkout initiation
trackily.track('checkout', {
cart_total: 89.97,
item_count: 3
});
// Track a lead
trackily.track('lead', {
email: 'customer@example.com'
});
The pixel automatically reads the _tly_click cookie (set when the visitor clicked your tracking link) to attribute the conversion to the right click and campaign.
Product Catalog
Import and manage your product catalog. Products can be imported from Shopify, WooCommerce, or added manually.
Manual Product
| Field | Description | Example |
|---|---|---|
| Name | Product display name | Running Shoes Pro |
| SKU | Unique product identifier | SHOE-PRO-001 |
| Price | Product price | 59.99 |
| Currency | Price currency | USD |
| Category | Product category | Footwear |
| Image URL | Product image | https://... |
| External ID | Shopify/WC product ID | 7890123456 |
| Source | Where it was imported from | shopify, woocommerce, manual |
Import from Shopify
Go to Integrations → configure your Shopify store URL and API token → click Import Products. All products with title, price, SKU, images, and variants are imported automatically.
Import from WooCommerce
Go to Integrations → configure your WooCommerce store URL, consumer key, and consumer secret → click Import Products.
Shopify Integration
Trackily integrates with Shopify via API for products, orders, and auto-sync conversions.
Setup
Create a Custom App in Shopify
Go to your Shopify Admin → Settings → Apps and sales channels → Develop apps → Create an app. Grant scopes: read_products, read_orders, read_customers.
Get the API Access Token
After creating the app, install it and copy the Admin API access token (starts with shpat_).
Configure in Trackily
Go to Integrations → Shopify section → enter your store URL (e.g. mystore.myshopify.com) and paste the token.
Import & Sync
Click Import Products to pull your catalog. Enable Auto-sync Orders to automatically match Shopify orders with Trackily clicks every 15 minutes.
Shopify Webhook (Alternative)
For real-time conversion tracking, configure a webhook in Shopify:
URL: https://your-tracker.com/webhook/shopify?key=YOUR_WEBHOOK_SECRET
Event: Order creation
Each new order fires a webhook → Trackily matches the customer email/IP to a click → creates a conversion automatically.
Auto-Sync Orders
When enabled, Trackily polls Shopify's GET /admin/api/2024-01/orders.json every 15 minutes and matches orders to clicks using:
note_attributes._tly_click— click ID passed from landing page- Customer email matching
- IP address matching (last resort)
WooCommerce Integration
Connect your WordPress/WooCommerce store for product import and conversion tracking.
Setup
Generate API Keys
In WordPress Admin → WooCommerce → Settings → Advanced → REST API → Add Key. Set permissions to Read.
Configure in Trackily
Go to Integrations → WooCommerce section → enter your store URL, Consumer Key, and Consumer Secret.
Import Products
Click Import Products → all WooCommerce products are fetched with prices, SKUs, and categories.
WooCommerce Webhook
For real-time tracking, add a webhook in WooCommerce:
URL: https://your-tracker.com/webhook/woocommerce
Topic: Order completed
Secret: YOUR_WEBHOOK_SECRET
E-Commerce Metrics: AOV / ROAS / CAC
Trackily calculates key e-commerce KPIs automatically from your conversion data. These metrics are shown on the Dashboard and Reports pages.
| Metric | Formula | Description |
|---|---|---|
| AOV | Total Revenue ÷ Number of Orders | Average Order Value — how much each customer spends per order |
| ROAS | Revenue ÷ Ad Spend | Return On Ad Spend — $3 ROAS means $3 revenue per $1 spent |
| CAC | Total Ad Spend ÷ Number of Customers | Customer Acquisition Cost — cost to acquire one paying customer |
| LTV | Total Revenue per Customer (incl. rebills) | Lifetime Value — total revenue from one customer over time |
| RPC | Revenue ÷ Clicks | Revenue Per Click — like EPC but includes all revenue |
| Repeat Rate | Repeat Customers ÷ Total Customers | Percentage of customers who buy more than once |
Example: You spent $500 on Kadam, got 10,000 clicks, 150 conversions, $4,500 revenue. Your ROAS = $9, AOV = $30, CAC = $3.33, EPC = $0.45.
E-Commerce Funnel
Visualize your shopping funnel to identify where customers drop off.
Funnel Steps
| Step | Event | Example |
|---|---|---|
| 1. Page View | pageview | Auto-tracked by pixel.js |
| 2. Add to Cart | add_to_cart | trackily.track('add_to_cart', {...}) |
| 3. Checkout | checkout | trackily.track('checkout', {...}) |
| 4. Purchase | purchase | trackily.track('purchase', {...}) |
The funnel page shows visual bars with conversion rates between each step:
Page Views: 10,000 (100%)
Add to Cart: 3,500 (35.0%) ← 35% clicked Add to Cart
Checkout: 1,800 (18.0%) ← 51% of carts started checkout
Purchase: 1,200 (12.0%) ← 67% of checkouts completed
Filter funnel data by campaign, date range, country, or device to identify which traffic segments convert best.
E-Commerce Status Scheme PRO
Track the lifecycle of each conversion through e-commerce statuses, similar to Binom's status scheme.
Available Statuses
| Status | Icon | Description | Auto-action |
|---|---|---|---|
| Cart | 🛒 | Customer added item to cart | — |
| Checkout | 💳 | Customer started checkout | — |
| Pending | ⏳ | Payment being processed | — |
| Sale | ✅ | Payment confirmed | Conversion → Approved |
| On Hold | ⏸️ | Under review (fraud check, etc.) | — |
| Refunded | ↩️ | Customer refunded | Conversion → Rejected |
| Chargeback | 🚫 | Payment disputed | Conversion → Rejected |
| Cancelled | ✖️ | Order cancelled before fulfillment | — |
Status History
Every status change is logged with who made the change, when, and from/to statuses. View the history in the conversion detail modal.
Automatic Transitions
When status changes to Sale, the conversion is automatically marked as "approved". When it changes to Refund or Chargeback, the conversion is marked as "rejected" and revenue is excluded from reports.
Retargeting Pixels PRO
Inject retargeting pixels (Facebook, Google, TikTok) on ANY tracking link — even links to external sites you don't own. This is a feature unique to Trackily and ClickMagick.
How It Works
When a visitor clicks your tracking link /c/:slug, Trackily shows a brief intermediate page (1.5 seconds) that:
- Fires your Facebook Pixel (PageView event)
- Fires your Google Tag (page_view event)
- Fires your TikTok Pixel (page event)
- Runs any custom scripts you defined
- Redirects the visitor to the destination (landing page or offer)
Configuration
In the campaign editor, go to the Retargeting Pixels section:
| Field | Example | Description |
|---|---|---|
| Facebook Pixel ID | 123456789012345 | Your FB Pixel ID from Events Manager |
| Google Tag ID | AW-123456789 or G-XXXXXXXXX | Google Ads or GA4 measurement ID |
| TikTok Pixel ID | ABCDEF123456 | Your TikTok pixel code from Ads Manager |
| Custom Scripts | <script>...</script> | Any additional tracking scripts |
For local landing pages: The pixels are injected directly into the HTML (no intermediate page, no delay). The intermediate page is only used for external URL redirects.
Use Case
You promote a Shopify store you don't own. By adding your FB Pixel to the Trackily campaign, every visitor who clicks your link is added to your Facebook retargeting audience — even though the Shopify store doesn't have your pixel installed.
Multi-Touch Attribution ENTERPRISE
Go beyond last-click attribution with 4 models that distribute conversion credit across multiple touchpoints.
Attribution Models
| Model | How it works | Best for |
|---|---|---|
| Last Click | 100% credit to the last click before conversion | Direct response campaigns |
| First Click | 100% credit to the first click that introduced the customer | Awareness campaigns |
| Linear | Equal credit to all touchpoints | Understanding the full journey |
| Time Decay | More credit to touchpoints closer to conversion | Long sales cycles, e-commerce |
Example
Customer journey: Facebook Ad → Google Search → TikTok Ad → Purchase ($100)
Last Click: Facebook $0, Google $0, TikTok $100
First Click: Facebook $100, Google $0, TikTok $0
Linear: Facebook $33, Google $33, TikTok $33
Time Decay: Facebook $16, Google $28, TikTok $56
Access attribution reports at Attribution page. Select a model, date range, and campaign to see how revenue is distributed across traffic sources.
Audience Export PRO
Build audience segments from your traffic data and export them for retargeting on ad platforms.
Creating a Segment
Define Conditions
Filter visitors by: campaign, country, device, conversion status, date range, visit count, etc.
Preview Size
See how many visitors match your criteria before exporting.
Export
Download as CSV with email/phone hashes (SHA256) ready for upload to Facebook Custom Audiences or Google Customer Match.
Export Formats
| Platform | Format | Fields |
|---|---|---|
| CSV (Custom Audiences) | Email (SHA256), Phone (SHA256), Country, City | |
| CSV (Customer Match) | Email (SHA256), Phone (SHA256), First Name, Last Name |
Segment Examples
- Converters: Visitors who completed a purchase (for lookalike audiences)
- Cart Abandoners: Added to cart but didn't purchase (for retargeting)
- High Value: Customers with AOV > $100 (for upsell campaigns)
- By Country: US-only visitors for geo-specific campaigns
Audience Optimization ENTERPRISE
Automatically send conversion data in real-time to ad platforms (Facebook, Google, TikTok) for better ad optimization and higher match rates.
Supported Platforms
| Platform | API Used | Events Sent |
|---|---|---|
| Conversions API (CAPI) | Purchase, Lead | |
| TikTok | Events API | CompletePayment, SubmitForm |
| Offline Conversions | Conversion with value |
Setup
In the campaign editor, go to Audience Passback section:
| Field | Description |
|---|---|
| FB Pixel ID | Your Facebook Pixel ID |
| FB Access Token | System User token with ads_management permission |
| TikTok Pixel ID | Your TikTok pixel code |
| TikTok Access Token | From TikTok Ads Manager → Developer |
| Google Conversion ID | Google Ads conversion action ID |
| Google Conversion Label | Conversion label from Google Ads |
Why use this? Ad platforms optimize better when they receive server-side conversion data. Facebook CAPI catches ~30% more conversions than the browser pixel alone (due to ad blockers and iOS privacy).
How It Works
Every time a conversion is recorded (via postback, webhook, or pixel), Trackily automatically fires the conversion data to all configured platforms with:
- Client IP and User Agent (for matching)
- Click ID (fbclid, ttclid, gclid)
- Revenue and currency
- Event type (Purchase or Lead)
- Country code
Users & Permissions
Manage team access with role-based permissions.
Roles
| Role | Access |
|---|---|
| Admin | Full access to everything |
| Manager | Read+Write on campaigns, offers, LPs, flows, sources. Read on reports. |
| Viewer | Read-only access to campaigns, offers, LPs, reports. |
| Custom | Granular per-section read/write permissions. |
Sections
10 sections with independent read/write toggles: Campaigns, Offers, Landings, Flows, Sources, Networks, Domains, Reports, Settings, Users.
Settings
AI Assistant
Configure Claude, Gemini, or DeepSeek API keys for the built-in AI chat. The AI can create campaigns, suggest optimizations, and generate landing page copy.
IP Anonymization
Enable to mask visitor IPs for GDPR compliance (last octet zeroed).
License Management
Activate your license in the sidebar → Upgrade button. Paste your license key (UUID) and click Activate.
Plans
| Feature | Starter | Pro | Enterprise |
|---|---|---|---|
| Users | 1 | 5 | Unlimited |
| Flows & Routing | ✓ | ✓ | ✓ |
| Bot Detection | Basic | Full Anti-Fraud | Full Anti-Fraud |
| Automizer | — | ✓ | ✓ |
| Traffic AI | — | ✓ | ✓ |
| Notifications | In-App | All Channels | All Channels |
| A/B Testing | — | ✓ | ✓ |
| White Label | — | — | ✓ |
Get your license at license.trackily.online/portal.
Tracking Flow
The complete journey of a click through Trackily:
Traffic Source (Kadam, PropellerAds, etc.)
│
▼
GET /c/:campaign-slug
├─ Parse visitor: IP, UA, sub1-5, referrer
├─ GeoIP lookup: country, city, ISP
├─ Parse UA: OS, browser, device type
├─ Fraud scoring: bot check, flood, datacenter
├─ Bot filter: redirect if score >= 50
├─ Frequency cap: block if limit exceeded
├─ Unique click detection (IP+UA hash)
├─ Flow evaluation: forced → regular → default
├─ Weighted landing selection
├─ Offer cap check: skip capped offers
├─ Create click record (UUID)
└─ Serve landing (HTML) or redirect (URL)
│
▼
Landing Page
├─ Dynamic call-outs injected
├─ Lander protection active (if enabled)
├─ Step tracking (multi-step funnels)
└─ Visitor clicks CTA
│
▼
GET /offer/:clickId/:offerId
├─ Append sub params (sub2=trackily_uuid)
└─ Redirect to affiliate offer URL
│
▼
Conversion (on affiliate network)
├─ Network fires postback
│
▼
GET /postback?click_id={sub2}&amount={payout}
├─ Resolve click by ID
├─ Create conversion record
├─ Fire source postback (Kadam, etc.)
└─ Dispatch notifications
API Reference
All admin endpoints require Authorization: Bearer {token} header.
Authentication
POST /admin/api/login
Body: { "email": "admin@example.com", "password": "..." }
Response: { "token": "...", "user": {...} }
Core Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /admin/api/campaigns | List campaigns |
| POST | /admin/api/campaigns | Create campaign |
| GET | /admin/api/offers | List offers |
| GET | /admin/api/stats | Get tracking stats |
| GET | /admin/api/stats/grouped | Grouped analytics |
| GET | /admin/api/clicks | Click log (paginated) |
| GET | /admin/api/conversions | Conversion log |
| GET | /admin/api/export/:type | Export data (CSV/JSON) |
| POST | /admin/api/import/:type | Import data |
Public Endpoints (No Auth)
| Method | Endpoint | Description |
|---|---|---|
| GET | /c/:slug | Campaign click tracking |
| GET | /postback | Conversion postback |
| GET | /offer/:clickId/:offerId | Offer redirect |
| POST | /api/check-email | HIBP breach check |
| POST | /api/lead | Lead registration |
Environment Variables
| Variable | Required | Description |
|---|---|---|
DATABASE_URL | Yes | PostgreSQL connection string |
ADMIN_PASSWORD | Yes | Initial admin password |
PORT | No | Server port (default: 3000) |
LICENSE_KEY | No | License key for Pro/Enterprise features |
LICENSE_SERVER_URL | No | License server URL (default: https://license.trackily.online) |
HIBP_API_KEY | No | HaveIBeenPwned API key for breach check |
Need help? Contact support@trackily.online