Self-hosted performance intelligence

Track the whole journey.
Own every signal.

Click and conversion tracking for performance teams who want richer attribution, faster decisions, and complete control of their data.

Live campaign pulse Streaming
Clicks Today
24,847
↗ 18.4%
Conversions
1,284
↗ 6.2%
ROI
247%
+42 pts
Source Available
BSL + Commercial
Self-Hosted
PHP 8.3+
What's new Release notes →

Everything You Need to Track,
Analyze, and Optimize

A comprehensive campaign tracking platform with the tools performance marketers demand.

Click Tracking

Real-time click capture with sub-ID parameters, referrer tracking, and automatic IP/UA logging.

Conversion Tracking

Atomic, idempotent server-to-server postbacks and pixel tracking with revenue, payout, and status fields.

Multi-Touch Attribution

Five models—first-touch, last-touch, linear, time-decay, and position-based—over each visitor's own journey across campaigns.

Campaign Management

Create, edit, and manage campaigns with offer rotation, link cloaking, and traffic rules.

12+ Report Types

Keywords, geo, device, browser, OS, referrer, ISP, landing page, and custom dimension reports.

Smart Rotator

Rule-based traffic distribution with weighted rotation, geo-targeting, and device filtering.

Landing Page Management

Unlimited weighted split tests, dynamic personalization tokens, and automatic winner routing.

Sentinel Traffic Quality

Redirect potentially fraudulent traffic away from your landing pages before it burns budget.

Geo-Targeting

MaxMind GeoIP integration for country, region, and city-level targeting and reporting.

REST API v3

Bearer-token API for campaigns, goals, events, apps, LTV, subscriptions, forecasts, sync, and system operations.

CLI Tools

PHP and Go CLIs for reports, LTV, forecasts, optimization, route verification, sync, and AI workflows.

Docker Support

Secure-by-default Docker Compose stack with PHP, MySQL, Apache, and Memcached—plus a one-click stack for Coolify.

Live Spy Mode

Incremental real-time click monitoring with read-replica support and a bounded, disruption-free activity stream.

Attribution Lab

Open any conversion's journey to see every touch and each model's credit, then schedule model-vs-model exports to signed webhooks.

Data Portability

Export, dry-run imports, compare environments, and sync configuration across named server profiles.

Background Operations

Run scheduled attribution exports and long-lived jobs with authenticated cron health checks and retry-safe delivery.

Goals & Events New

Name the outcomes that matter—an opt-in, a sale, the third purchase—give each its own payout, and pay every step of a funnel on one click.

iOS + Android Apps New

Receive and verify SKAdNetwork and AdAttributionKit postbacks, and attribute Android installs to the click that earned them.

Conversion Ledger New

Every amount records where it came from. Reversals net, deletes settle queued postbacks, and network postbacks retry with backoff.

Agent-Safe Operations New

Scoped API keys, staged writes that wait for your approval, idempotent creates, and delete dry-runs for agents and scripts.

See what happens after the click.

Prosper202 now connects acquisition data to customer value, recurring revenue, engagement, and the next best action.

Customer LTV Live

From first click to lifetime value.

Resolve customer identity, maintain a revenue ledger, analyze cohorts, and measure realized or predictive LTV by campaign, source, landing page, and product.

Customers18,492+12.8%
Average LTV$284+8.1%
Repeat rate31.6%+3.4 pts
Subscription economics

MRR, ARR, and churn in context.

Track subscription lifecycle events and connect recurring revenue back to the campaigns that created it.

Active MRR$92.4k+14%
Personalization + ABM

Know the customer. Shape the next visit.

Customer CRM profiles, company rollups, engagement scoring, custom fields, and next-offer recommendations power more relevant experiences.

Suggested next offerAnnual Pro / 22% lift
Forecasting

Model the next move.

An ensemble forecast weighted by how well each method has recently predicted your numbers, with 90% bands measured from rolling backtests. Tracking outages are set aside, level shifts are refit, and calendar events reshape the curve.

Landing Page Optimizer

Close the loop between traffic and creative.

Sync performance dimensions to the LPO bridge and let conversion outcomes inform smarter landing-page decisions.

Signal→Learn→Route
Operator tooling

Verify, optimize, and automate.

Verify live routes and rotators, check offer hosts without sending a click, rewrite offer URLs in bulk with an undo file, compare before and after a date, and import a network's conversion export—all from the CLI.

$ p202 campaign check-urls --url-contains old-network.com
Light, dark + system themes One-click Coolify deploy Correction + retraction postbacks Hash-pinned front-end assets Faster, lighter app pages BlazerCache outage resilience Fast JSON report transport Guided onboarding checklist In-app support messenger Webhooks + integrations

One campaign.
Every step of the funnel.

Goals turn events into payouts—an opt-in, a sale, an upsell, the third purchase, $20 spent in a week. The conversion ledger keeps every amount accountable.

Campaign goals Payout mode: Add them up
  1. 01
    Opt-in event=optin · fixed payout
    $2.00
  2. 02
    Sale event=sale · value from amount=49.00
    $49.00
  3. 03
    Upsell event=upsell · after Sale · within 7 days
    $15.00
Click value$66.00

Events in. Outcomes out.

A funnel that once needed a campaign copy per step is now one campaign with a goal per step, each with its own payout and traffic-source postback.

  • event=on any pixel or postback
  • POST /api/v3/eventsfrom your own backend
  • p202.track()on landing pages (fixed-value goals pay; revenue sent from the page doesn't)

Goals can count the Nth event or a running sum, require an earlier goal, and open a window from the click or the install. Every edit is a new version you can re-evaluate. Existing setups don't change: until a campaign has a goal, event= is still a plain conversion.

Every amount has a source

Pixel, postback, upload, goal, or the API key that wrote it. p202 click conversions explains a click's value row by row.

Reversals net the sale

A reversal nets against the sale it names. Delete a conversion and its click value and customer LTV are corrected in the same transaction.

Postbacks don't get lost

Traffic-source postbacks are queued with the conversion itself and retried with backoff when a send fails.

Corrections reach the network

Remove a conversion and a pending postback is cancelled, or a retraction goes to the pixel's correction URL.

Be your own mobile measurement partner.

Attribute iOS and Android installs, and the in-app events after them, on your own server, alongside your web campaigns.

iOS SKAdNetwork · AdAttributionKit

Apple's postbacks, verified and decoded.

  • Receives SKAdNetwork and AdAttributionKit postbacks at your own domain
  • Checks every signature against Apple's published keys; headline numbers count verified postbacks only
  • Decodes conversion values into your goals and revenue
  • The P202Attribution Swift SDK evaluates your goals on the device against a mapping it fetches at runtime, so changing either never needs an App Store resubmission
NSAdvertisingAttributionReportEndpoint → https://your-domain.com
Android Play Install Referrer

Installs tied to the click that earned them.

  • A signed install token rides your Play Store link; the SDK reports it on first launch
  • An attributed install becomes a conversion on its click, in every campaign report and in multi-touch attribution
  • Goals after the install, like a first purchase, pay and post back like any conversion
  • Kotlin SDK for Android 5.0+ (API 21): no advertising ID, no permission beyond internet access
referrer=p202%3D[[p202_install_token]]

Play Integrity

Off, observe, or require, per app. In require mode an install pays only on a passing verdict.

Click-to-install time

Flags installs that land too fast (click injection) or too slow (click spamming).

Fast-goal holds

Goals reached implausibly soon after install can be held and never paid.

Intake limits

Per-app install caps and per-install event caps stop floods at the door.

Analyze › Mobile Apps reports both platforms: the funnel by goal, the postbacks sent to traffic sources, and a verifier that checks a pasted postback's signature without storing it.

Multi-Touch Attribution Engine

Rebuilt in 1.9.76: each conversion's value is spread across the visitor's own clicks—across every campaign—under five built-in models.

Credit Distribution

100%
First Click
0%
Social
0%
Display
0%
Search
0%
Last Click

Credit Distribution

0%
Email
0%
Social
0%
Display
0%
Search
100%
Last Click

Credit Distribution

5%
Email
10%
Social
15%
Display
30%
Search
40%
Last Click

Credit Distribution

35%
First Touch
10%
Social
10%
Display
10%
Search
35%
Last Click

Credit Distribution

20%
Email
20%
Social
20%
Display
20%
Search
20%
Last Click

Go beyond last-click. Under every model a conversion's credits add up to exactly its value, so you can compare models side by side and move budget toward the touchpoints that actually drive revenue.

01

First-party identity only

Clicks join a journey through your tracking domain's cookie, a landing-page id, and customer ids your own server signs—never IP addresses, user agents, or fingerprinting.

02

Cross-device, when you sign it

Pass a customer id signed with your account's linking key and one person's clicks connect across browsers and devices.

03

Consent in one switch

Turn identity off on a link, a landing page, or a whole campaign. No cookie is set or read, and each click stands on its own.

04

Fast at a million conversions

Breakdowns read an hourly rollup that matches the full computation exactly: 0.1–1.25 s for 30 days, down from 30–70 s.

Every Metric That Matters

Track performance across every dimension with real-time dashboards, fast JSON-powered report views, and consistent filtering.

142,847
Total Clicks
8,291
Conversions
$47,832
Revenue
312%
ROI

Revenue Trend (7 days)

Top Sources

Google Ads Facebook Native

Conversion Rate

5.8%
+0.4% from last week

12+ Report Types

Keywords

Track performance by search keyword and sub-ID

Country & Geo

Geographic performance with country, region, city

Device

Mobile, desktop, and tablet breakdowns

Browser

Chrome, Firefox, Safari, and browser version data

Operating System

Windows, macOS, iOS, Android, Linux reports

Referrer

Track traffic sources and referring domains

ISP / Carrier

Network provider performance analysis

Landing Pages

Compare landing page variant performance

Revenue & Payout

Financial reports with profit margins and EPC

Day of Week / Hour

Temporal performance patterns and trends

Attribution

Multi-touch attribution model comparison

Custom Dimensions

User-defined tracking parameters and filters

Built for Automation

A deep REST API and two CLIs for operators, developers, CI/CD pipelines, and AI agents.

Powerful Developer & AI Tools

Manage acquisition, goals, apps, customer value, forecasts, and traffic rules from code—or let an agent operate the same tools while you keep the final say.

Goals, events, apps, LTV, forecasts, and sync
Scoped keys: read-only, per-area, or propose-only
Staged writes with an approval queue
Idempotent creates and delete dry-runs
Multi-profile CLI with sync and diff
JSON, NDJSON, CSV, and script-friendly output
Live route, TLS certificate, and cron health checks
JSON for agents automatically, plus p202 search to find any command
# List all campaigns curl -X GET https://your-domain.com/api/v3/campaigns \ -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Accept: application/json" # Response { "data": [ { "id": 1, "name": "Summer Campaign", "status": "active", "clicks": 24847, "conversions": 1284 } ], "meta": { "total": 42, "page": 1 } }
# List campaigns with PHP CLI $ bin/p202 campaign:list ┌────┬──────────────────┬─────────┬─────────────────┐ │ ID │ Name │ Payout │ Network │ ├────┼──────────────────┼─────────┼─────────────────┤ │ 1 │ Summer Campaign │ $2.50 │ MaxBounty │ │ 2 │ Winter Promo │ $4.00 │ ClickDealer │ │ 3 │ Flash Sale │ $1.75 │ MaxBounty │ └────┴──────────────────┴─────────┴─────────────────┘ # Today's performance summary $ bin/p202 report:summary --period today
# List campaigns as JSON $ p202 campaign list --json # Create a new campaign $ p202 campaign create \ --aff_campaign_name "Q1 Push Notifications" \ --aff_campaign_url "https://offer.example.com/?sub=[[subid]]" \ --aff_campaign_payout "2.50" \ --aff_network_id 4 # Which countries moved after a change on Sept 4? $ p202 analytics --group-by country --split-at 2026-09-04 # Forecast revenue and verify live routing $ p202 forecast --metric revenue --horizon 14 $ p202 tracker check
# Give your agent a key that can read and propose, never write $ p202 user apikey create 1 --scope read,stage # The agent proposes a change; nothing happens yet $ p202 campaign update 42 --aff_campaign_payout "3.10" --staged # → staged as chg_… for approval # You review the queue, then apply or discard $ p202 change list $ p202 change apply chg_… # Preview what a delete would remove before running it $ p202 rotator delete 8 --dry-run

Just Ask. The CLI Does the Rest.

AI coding agents like Claude Code use the Prosper202 ClickServer CLI as naturally as you'd talk to a colleague. Here's a real workflow.

Claude Code + Prosper202 ClickServer CLI
You
How are my campaigns doing today?
Claude Code

Let me pull today's performance summary.

$ p202 report summary --period today

Today across all campaigns: 12,847 clicks, 634 conversions, $4,291 revenue against $1,520 in costs for a net profit of $2,771. Overall ROI is 182%.

You
Break that down by campaign — which ones are losing money?
Claude Code

I'll pull a campaign breakdown sorted by net profit to surface the losers first.

$ p202 report breakdown -b campaign --period today -s total_net --sort_dir ASC

Two campaigns are in the red today:

CampaignClicksConv.RevenueCostNetROI
EU Display Test1,84223$138$221-$83-38%
TikTok Broad2,10441$246$289-$43-15%
Summer Push5,391312$2,184$530+$1,654312%

"EU Display Test" and "TikTok Broad" are both net negative. The other 5 campaigns are profitable — "Summer Push" is your clear winner at 312% ROI.

You
Show me where the Summer Push conversions are coming from by country
Claude Code

Pulling the geo breakdown for that campaign.

$ p202 report breakdown -b country --period today \ --aff_campaign_id 3 -s total_leads --sort_dir DESC
CountryClicksConv.RevenueEPC
US2,640167$1,169$0.44
UK1,07862$434$0.40
CA85648$336$0.39
DE50222$154$0.31
AU31513$91$0.29

US drives the most volume, but UK and CA have strong EPC at $0.40 and $0.39 — nearly matching the US at $0.44 with likely cheaper traffic costs.

You
Clone that campaign and set up a rotator to only send UK and CA traffic
Claude Code

I'll clone the campaign, then add a rotator that sends UK and Canadian visitors to the clone and everyone else to the original.

$ p202 campaign clone 3 --name "Summer Push — UK/CA" # Created campaign #15 $ p202 rotator create --name "Summer Push Geo Split" --default_campaign 3 # Created rotator #8 $ p202 rotator rule-create 8 \ --rule_name "UK + CA" \ --criteria_json '[{"type":"country","statement":"is","value":"United Kingdom(GB),Canada(CA)"}]' \ --redirect-campaign 15

Done. Rotator #8 routes UK and Canadian traffic to #15 "Summer Push — UK/CA" and everything else to the original campaign. Point your traffic source at the rotator's link and those high-EPC geos get their own budget line.

Guardrails in code, not in the prompt.

--scope read,stage

Propose-only keys: an agent can read everything and suggest changes, but can't make them.

--staged

Writes wait in an approval queue until a person applies or discards them.

--dry-run

Every delete can preview exactly what it would remove before anything goes.

sanitized output

Visitor-supplied text like keywords and ISP names is cleaned before an agent reads it.

Source Available. Self-Hosted.
Your Data.

No vendor lock-in. No third-party tracking. Complete control over your marketing data.

Full Control

Self-hosted on your infrastructure. Your data stays on your servers — no third-party data sharing, ever.

Community Driven

BSL licensed with commercial options. Contributions welcome. Built by performance marketers, for performance marketers.

Extensible

REST API, CLI tools, and webhook integrations. Build custom dashboards and automate your workflow.

Up and Running in Minutes

Use a pre-built release on shared hosting, run the guided installer from source, launch the secure Docker stack, or deploy on Coolify in a few clicks.

# No terminal or Composer required 1. Download the pre-built release zip from GitHub Releases 2. Upload and extract it into your cPanel / Plesk web root 3. Visit your site to launch the guided setup wizard # The wizard checks requirements, creates the database, # validates your API key, and creates the admin account.
# Clone and run the one-step installer $ git clone https://github.com/tracking202/prosper202.git $ cd prosper202 $ ./install.sh # The installer checks dependencies, creates configuration, # tests or creates the database, and prints the cron entry.
# Clone and start with Docker Compose $ git clone https://github.com/tracking202/prosper202.git $ cd prosper202 $ echo "MYSQL_ROOT_PASSWORD=$(openssl rand -hex 16)" > .env $ docker compose up -d # Visit http://localhost:8000 and complete the wizard immediately
# Running Coolify on a VPS? Deploy straight from the repo 1. New → Public Repository: github.com/tracking202/prosper202 2. Build pack Docker Compose, file /docker-compose.coolify.yaml 3. Set your domain on the web service and click Deploy 4. Open your domain and finish the setup wizard # TLS, the database password, 202-config.php, and cron # are all handled for you.

System Requirements

PHP 8.3+
MySQL 8.0+ or MariaDB 10.6+
Nginx or Apache
Composer