Landing Page Tracking & Split Testing Using Prosper202

In my previous post, I mentioned that I was using Prosper202 to track my CPA campaign. It was a very simple campaign structure where I used one landing page with opt-in form and visitors will be redirected to an offer after submitting the form. I didn’t do any split testing for the landing page nor for the offer.

Right now I’m focusing on creating a second campaign and this time I want to split test both the ads and the landing pages, and for a start I will only promote one offer. Each landing page will have an opt-in form to capture leads. Here is a simple visual of the campaign structure.

Campaign Structure - Landing Page Split

So ideally, Prosper202 should rotate evenly between landing page #1 (LP1) and landing page #2 (LP2). After a visitor submit his email through the opt-in form, he should be redirected to the offer page. Out of the box, Prosper202 does not support landing page rotation but there are several articles that provide a workaround so it can be done although not very straightforward.

Before we go and talk about rotating the landing pages, I found out another limitation in Prosper202 that made me rethink the decision of using Prosper202. See, if you look at the diagram above the visitor traffic flow for my campaign structure is like this:

Ad —> Landing page —[opt-in]—> Offer Page

When I generated the landing page code (step #6 Get LP Code), Prosper202 gave me an inbound code to be inserted in the landing page and an outbound code that must be placed inside a standalone file to cloak the offer link. Since I have 2 landing pages, I have:

LP #1: (contains inbound code for LP1)
Redirector #1: (contains outbound code for LP1)

LP #2: (contains inbound code for LP2)
Redirector #2: (contains outbound code for LP2)

Herein lies the problem. I want visitors to be redirected to the offer page once they confirm subscription so I must use the redirector URL as the thank you page. But there are 2 redirector URLs! Since one opt-in form can only have one thank you page, I need to create 2 opt-in forms for my list. Technically this is not a big problem but all these workarounds start to bug me a little.

Back to the landing page rotation. Assume we already added traffic source (step #1 Traffic Sources), CPA/affiliate network (step #2 Categories), and the offer (step #3 Campaigns). Btw, if you need help in setting up basic campaign, Luke Kling has an excellent guide here. Once done, here is what to do to enable landing page rotation:

  1. Add each of the landing page in Prosper202 (step #4 Landing Pages).
  2. Generate Prosper202 inbound and outbound codes as usual for each landing page (step #6 Get LP Code).
  3. Go to step #7 Get Links and generate tracking link for each landing page and copy-paste the link in Notepad for later. If we are rotating 3 landing pages, we should have 3 URLs at the end of this step.

The tracking links obtained from the last step above are the ones that must be inserted into the rotator script. The link look something like this:

When we are not doing landing page split test, we need to append the PPC/PPV network’s keyword token at the end to capture the keyword that brings visitor to the landing page. An example for Google AdWords would be:{keyword}

Since I want to do split test here, I’m going to give the PPC/PPV network the URL of the rotator script instead. The script is responsible to pick one landing page and display it to the visitor. But I also need the rotator script to capture the keyword so it can be passed through to the actual Prosper202 tracking link.

Initially I downloaded the rotator script from Prosper202 here. But I notice that the rotator script does not pass the keyword to Prosper202 tracking links so I need to do some modification to the script as follow:

Prosper202 Landing Page Rotation Script

This is a modified script from the one provided by Prosper202 at

// URLs of the landing pages to be rotated.
// These are the URLs generated from step #7 Get Links,
// one link for each landing page.
// You can add as many landing pages here as you like
$landingpage[1] = '';
$landingpage[2] = '';
$landingpage[3] = '';

/* ------ DO NOT CHANGE ANYTHING BELOW ------ */
/* -- (unless you know what you are doing) -- */

// Grab the keyword from the URL
$kword = $_GET['keyword'];

// The text file 'count.txt' must be created and stored 
// in the same directory as this rotator script. 
// Its permission must be set to 777 (CHMOD to 777).
$myFile = "count.txt";

// Open the txt file
$fh = @fopen($myFile, 'r');
$lpNumber = @fread($fh, 5);

// See which landing page is next in line to be displayed
if ($lpNumber >= count($landingpage)) {
    $lpNumber = 1;
} else {
    $lpNumber = $lpNumber + 1;

// Write the last landing page displayed to the 'count.txt' file
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = $lpNumber . "\n";
fwrite($fh, $stringData);

// Redirect to the landing page
header('Location: ' . $landingpage[$lpNumber] . $kword );

// Terminate script


After changing the landing page tracking URLs with the actual URLs in the script above, I saved the file as ‘[campaign-id]-index.php‘ and upload it to the server.

The file must be saved as a PHP file (.php) for the script to work. You can name the file anything but I’d suggest a name related to your campaign instead of a generic name like ‘rotator.php‘ or ‘landingpage.php‘. I have a generic domain where I’ll be running campaigns in multiple niches so I give each campaign a unique ID/nickname.

When I enter this rotator script URL in the PPC network like AdWords, I append the network’s keyword token at the end like this:{keyword}

Examples for other networks:



You can download my rotator script here. Remember to:

  1. Replace the landing page tracking links with your own links.
  2. Name the script appropriately and upload both the script and ‘count.txt’ to your server.
  3. CHMOD file ‘count.txt’ to 777.

Final Thoughts

No doubt that this workaround works but at this point I feel that:

  • More complex scenario like split testing landing pages AND offers need another rotator script for the offer. Step #3 Campaigns allow you to enter multiple offer URLs but Prosper202 will not break down the statistics per offer.
  • I’m using WordPress and for my landing page and even without any split testing Prosper202 needs standalone PHP files for cloaking offer links. I like my WordPress install clean and not having independent folders and files everywhere.

I’m looking into CPV Lab again as it supports landing pages and offers split test out of the box and landing page with lead capture only needs one opt-in form. I’ve read their PDF documentation and so far it looks good. The main consideration is of course the price but perhaps it’s a fair trade-off for the simplicity.

4 Responses to “Landing Page Tracking & Split Testing Using Prosper202”

Read below or add a comment...

  1. It is true that you do have to do a lot of thinking when it comes to setting up anything more than a rudimentary funnel with Prosper 202. On the other hand you CAN do pretty much anything with Prosper 202 that you can do with CPVLab. I’ve used as many as 4 rotators in sequence to get tricky jobs done with Prosper.

    The trick is to not try to solve everything with a single campaign, but to break the funnel down into components, assign a campaign per component, and then link the campaigns together. You can find more info about this on my site 🙂

    • Battra says:

      Hi Stephen, glad to see you here 🙂

      I agree with you that Prosper202 ‘limitation’ can also allow you to be more creative with your campaign structure, although you need a bit of PHP knowledge to write the script. At the end, it’s a matter of preference for me personally. Since my campaigns fit CPV Lab predefined structure, I find it more beneficial to use it and have clean WordPress site (without the standalone script files) and more importantly customer support when I have problems.

  2. Randy says:

    I’m confused (surprise!) and need to understand what it means when they say:

    1) Where do I find this?
    2) Isn’t the pixel supposed to go to the advertiser to put on their confirmation of sale page?

    Thank you. I appreciate it!


    • Battra says:

      Hi Randy!

      You asked about “PLACE OTHER LANDING PAGE CLICK THROUGH CONVERSION TRACKING PIXELS HERE” when generating the landing page code? This part is explained right above the code, i.e. “This is useful when you want to use other services like Google Website Optimizers to track the click-through ratios on your landing pages”. Beside using Prosper202, some people use additional 3rd party tracking like GWO. So if you are using other tracking tool, you have to copy-paste the JavaScript code above Prosper202 code so it can be executed before Prosper202 redirect your visitor to the offer. If you are only using Prosper202 then don’t worry about it, you don’t have to do anything.

      The postback pixel code that you put on the advertiser’s sale confirmation or thank you page is generated using option “#8 Get Postback/Pixel”.

      The campaign flow goes like this:
      1. Visitor visit your campaign URL (you get your campaign URL from #7 Get Links)

      2. Prosper202 knows which landing page it has to show the visitor and display it. When the landing page is loading, the “Inbound Javascript Landing Page Code” from step “#6 Get LP Code” is executed so Prosper202 knows and record the visit.

      3. When your visitor click on your cloaked affiliate/offer URL (for example,, the “Outbound Javascript Redirect Code” is executed, Prosper202 records the click-through from LP to the offer, and your visitor is redirected to the offer.

      4. After your visitor made a purchase, he will be shown the sale confirmation page which triggers your Prosper202 postback pixel. Now Prosper202 knows that a conversion happens and the campaign flow stops here.

      I hope this helps to explain 🙂

Leave A Comment...