Hi guys, I have been promoting CPA offers with facebook for almost a month now and I am struggling a little bit atm, hope you guys can give me some sort of directions.
I had a network owner give me his own guide to running gaming ads on FB... If you want I can send it to you..
PM me if you're interested
I've been running Carte successfully for a while, though offer is down at the moment which sucks, hopefully it comes back up! FYI for me it stopped converting on the 9th June for unknown reasons and I paused all campaigns, still waiting for the advertiser to explain wtf happened. If you're still running that and not getting conversions definitely pause it.
Luvinia has been very successful for me - was my first big success, sent something like 15k+ leads to them. Make sure you are split testing their landers - in the beginning they had one available and I found out they actually had something like 6 (just discovered when playing with their lander URL). Hounded my AM to get those, I split test all of them -> win. The lander conversion rates were wildly different between gender/demo/angles. I recommend you get a hold of those landers if you haven't already as they may make or break your Luvinia campaigns. Also, for all your gaming campaigns, make sure to be segregating thoroughly be gender/age. Always bracket 13-17, then split 18-65 into 2-3 blocks unless the demo is under say ~20k, then just leave them all together. Sometimes even splitting down to 10k demos is what you need to do to find that profitable niche, just make sure to be running low volume so you don't reach the entire demo before having your ads optimised. Don't bother with the Social/console gaming broad interest categories, I have only found them to increase CPC, decrease demo size, little effect on CTRs and CVRs. Waste of time IMO since actual gaming interests are a better indicator of their activity than FBs broad categories.
In my experience some DOI gaming offers just don't seem to convert. I recommend getting something like Overplay and testing the conversion funnel yourself. I.e. open something in private browsing mode, use w/e country proxy, register with legit details and at every step of the process see whether the conversion fires on your network side. Sometimes it wont happen because of the advertiser successfully blocking the proxy but I think you should do this for every game to get an understanding of how the conversion process works. If anyone has a problem with you testing the offer and getting a free ~$2 from it then they need to get a reality check, since you're the one risking your money to send them leads that may never convert.
Additionally, register/download/install every game you push. Get screenshots in game properly, work with those. The disadvantage here is that in most MMOs you won't have great gear to take shots of - but you can control the camera angles etc, HUD on screen and such. The character creation sections generally show the characters in good gear and are great ingame images to use. Also, you are right in your approach to headlines. FB is competitive and saturated with ads (idiot FB...) so you really need to get a hook in there with something the user recognises as opposed to "OMG awesome new game!!@!@". Test images first, borders later. The image is going to grab a gamer, not the border. Make sure to sharpen the images lightly so you they can be easily understood. Make sure you're working with 99x72 images and not 110x80 or FB is going to scale them = ruin them.
I have had no luck with Die Siedler in DE/AT/CH but only tried two angles, I found the demos I could come up with were never very big or responsive.
That is all.
Tijn made a sick guide in this forum
The beginners guide, have a read.
Like basically, don't get stuck reading the forum too much because you will burn out before you even begin.
Pick 1 subforum and stick to it for atleast a month, go hard hard hard 
AM works, stick at it matey!
@zeno : how you possible notice there are other kind of landers available for the particular offers ? Regarding segregating the age demo, do you get canned when sending those underage 18 leads ?
I noticed the URL was something like http://...../lander1 so i decided to try /lander2, was a completely different lander. Went through all of the numbers and found about 6 and demanded to split test them.
I don't think I have ever been kicked for young leads, just because people are under 18 doesn't mean the advertiser doesn't want them, they are just generally worth less since they are less likely to have their own CCs. If you have the age in your subids then their shouldn't be too much problem culling them off or taking reduced payouts if they aren't backing out, just gotta rely on AM <-> advertiser relationship there and the advertiser not being a dick. That being said always drive older traffic at the same time.
Re: landers, rotate between them with PHP inside the same campaign. I assume your FB ads head to a PHP file on your server which then redirects (if this is not the case then definitely address this asap), so you can split the traffic in there. Then just add specific subids to each affiliate URL to denote the lander, in addition to the subids you normally pass through. If you're direct linking to your affiliate URL there's no way of split testing, you'll need to make new campaigns. I won't blab on about PHP redirection etc because you may be fine with all that, holla if you're not.
When I split test them in the past I wrote down the EPCs for each demo/lander on a day by day basis and looked at the trends, e.g. it appears X lander dominated Y and Z on Monday, narrowly beat Y on Tuesday and smashed Z, then on Wednesday narrowly beat Y again and Z converted like crap. Given the trends Z is a clear inferior performer, keep X and Y, then look at the overall EPCs after another few days. On a day by day basis you'd probably want at least ~30 clicks to each lander and at least a few conversions difference between landers (e.g. 67:7 vs 71:3) to make a judgement on which one is converting better. The way I see it, you will know quickly if one lander is shit for a certain demo, because some others will just be miles ahead every day, so you can cull them easily; and for the ones that are closer together you just need to spread it over many more days. If you get multiple landers giving similar EPCs with 100's of clicks to each just keep them all. More chance of a duplicate clicker getting to see a fresh lander and being converted whereas they weren't a few days before with a different lander.
Yeah you have to add subids manually to the advert URLs in Facebook when using the native interface - i.e. http://adverturl.com/index.php?subid=US-M-18-25-ad1 or something like that, then pick up the passed value in the PHP file and insert it into the subsequent affiliate links. If all your campaigns are using the same URL and not passing subids then there no easy way around it, will have to edit them -> reapproval.
With split testing you always want things running in parallel, never at different times, always together. Otherwise there are additional factors (e.g. time of day) biasing the data. You could run all of the landers straight off the bat but probably better to pick 3 and cull down to 1 or 2 and add in others afterward to see if they can beat your top performer. If you have a proven campaign with decent volume you can add them all in though, just may have to sacrifice some profit to get multiple days worth of data to make a sound decision on lander performance. The way I would do it is to have a simple PHP script to split up the traffic, e.g.
<?php
$subid = $_GET['subid'];
$redirect[0] = 'URL1'.$subid;
$redirect[1] = 'URL2'.$subid;
$redirect[2] = 'URL3'.$subid;
$number = mt_rand(0,2);
header("Location:$redirect[$number]");
?>
Right I understand what you mean now, thanks
The php script looks like this atm:
<?php
//country code redirect
require_once('geoplugin/geoplugin.class.php');
$geoplugin = new geoPlugin();
$geoplugin->locate();
$country_code = $geoplugin->countryCode;
switch($country_code) {
case 'US':
$url = "AFF_LINK&aff_sub=" . $_GET['a'] . "&aff_sub2=" . $_GET['b'] . "&aff_sub3=" . $_GET['c'];
break;
default: // exceptions
$url = "HOMEPAGE";
break;
}
header("Location:$url");
die;
?>
With the code you have provided above, what do I do with it? Do I save it as a different php and upload it?
Thanks
Hey, firstly you should get GeoIP databases and the complement php module installed on your server - using geoplugin.class will be much slower and won't work for long - as I understand it the script calls on geoplugin.net, and when you start running volume they will kick you and all georedirection will fail, your clicks will start going nowhere or direct to the offer = no monies for you. When then using apache mod_geoip or the php module, whatever gets installed on your server, I would use something like this, i.e. just an edited version of the PHP you are using already:
<?php
$country = getenv(GEOIP_COUNTRY_NAME); // This part is only like this if these are set as global variables, can't remember how you call on these for GeoIP normally
$country_code = getenv(GEOIP_COUNTRY_CODE);
//simple redirect split
switch($country_code) {
case 'US':
$redirect[0] = '"AFF_LINK&aff_sub=" . $_GET['a'] . "&aff_sub2=" . $_GET['b'] . "&aff_sub3=" . $_GET['c'] . "&aff_sub4=lander1";
$redirect[1] = '"AFF_LINK&aff_sub=" . $_GET['a'] . "&aff_sub2=" . $_GET['b'] . "&aff_sub3=" . $_GET['c'] . "&aff_sub4=lander2";
$redirect[2] = '"AFF_LINK&aff_sub=" . $_GET['a'] . "&aff_sub2=" . $_GET['b'] . "&aff_sub3=" . $_GET['c'] . "&aff_sub4=lander3";
$number = mt_rand(0,2);
header("Location:$redirect[$number]");
exit;
default: // exceptions
header('Location: http://offerurl.com');
exit;
}
?>
$subid1 = $_GET['subid1']; //Country code $subid2 = $_GET['subid2']; //Gender $subid3 = $_GET['subid3']; //Age group $subid4 = $_GET['subid4']; //Creative ID
Thats awesome, thanks so much for taking the time to help me out.
I didnt know the geoplugin.class is supposed to be slow, will look into geoip database today and get one set up asap, hopefully I can figure it out.
Yes, I m running these games with WSM, I will take your advice and have a look at the subaffilate summary, the way you organize ur subids sounds a lot better than the way I am doing things atm.
Thanks again man for helping me out 
Hey Zeno, I still havent got this geoip database sorted out, its really confusing to me. So to installed geoip database and the php module, do I need to install it on a VPN or can I install it on a shared hosting like this one: http://www.bluelayerhost.com/shared-hosting ?
Thanks in advance.
I don't know about shared hosting + geoip but I imagine it will be a hassle and waste a lot of your time. That and it will be slower and less reliable than VPS hosting in general. What hosting are you on right now? I would advise you to sign up with someone like BeyondHosting, get a VPS package and then use the support team you're paying for to do these things for you. They are worth their weight in gold. There is a big discount for STM members - http://stmforum.com/forum/showthread...=beyondhosting
You can sign up -> get VPS hosting (prosper or CPVlab versions, up to you) -> Ask the BeyondHosting team to install GeoIP for you and mod_geoip -> they know what they're doing and will have it all working for you literally in minutes. Then in the future when you have something else to sort out with your server and you are all "wtf do i do", you simply start a support ticket and get them to do it. Life becomes much easier.
EDIT: Also if this requires you transitioning domains etc, just tell them you have lots of domains you need to transfer and ask them to help you out. You could list all the domains > get content mirrored over to new server > update all that DNS jazz > rock n rolling again. Just be sure to pause or drop budgets on all campaigns during the transition.
Thanks zeno, I will sign up with BeyondHosting today 
trust93: interested, PM'd.
Good work on getting better hosting! I have a toothache and am avoiding real work so will write a loooong answer. Might want to get a coffee. To start off I think I should explain a little bit about what PHP is and how it works, forgive me if this sounds patronising!
When you load a URL in your browser, you the client contact the server hosting that file and say gimme dat. The server acknowledges your request and says okely dokely BLAM here's the page content. Your browser gets given html along with other things like javascript, processes them and displays it all to you. Cool. So it would look like this:
Client ---> Requests http://domain.com/index.html ---> Server hears request ---> Server sends content to client ---> client receives and displays.
Now PHP stands for hypertext preprocessor. Basically, it's code that a server processes before it sends the page content back to the client to display. This is great because it lets us output html based on who the client is and information that may have been passed through the URL. So, this page is just like any other page. You don't install a php script on your server, it is just a basic webpage and goes wherever you would put a normal webpage. You wouldn't put a landers for specific campaigns on the root of your server and have index1 through to index 273 with images everywhere, you would have a method of sorting them specifically into folders. I have domainroot.com/offer/angle/countries/gender/age/index.php for most of my stuff.
Now, with PHP we get a situation more like this:
Client ---> Requests http://domain.com/index.php ---> Server hears request ---> Server processes all the PHP code inside the document to produce some output ---> Server sends content to client ---> client receives and displays.
So what we want a PHP script to do is a) detect something about the client, usually their IP which leads on to detecting locations and b) receive and manuipulate information the user has passed through with the URL, in the form of index.php?subid1=something&subid2=somethingelse. These appendages to the URL are what you should be adding to advert URLs for tracking purposes. I.e. index.php?subid1=US&subid2=M&subid3=25-35&subid4=creative22. After the php filename you put a "?" followed by something = value, then separated by "&". Then in our PHP file we can tell the server to extract these values, I usually declare them to be some variable (i.e. subid1 = country) and then we can insert them into links that we redirect the user to, i.e. passing of subids, the bread and butter of tracking.
This PHP file will be the first stop for anyone who clicks on your adverts and this gives you complete control over what happens to them and where they go. So, lets start with an example link: domain.com/offer/angle/US/M/13-17/index.php?subid1=US&subid2=M&subid3=13-17&subid4=creative17&subid5=angle
And below, the contents of index.php. I have put comments on the lines to explain what's happening. In PHP you use // to denote a comment so they are excluded from processing.
[PHP]
<?php
//First we need to get the parameters passed with the URL after the ?. We do this using $_GET['name'] - here 'name' is whatever we had in the URL, i.e. subid1, subid2, etc. Then we are going to set them to be equal to a variable - here I just use the same thing, $subid1, $subid2, etc. Variables start with $
$subid1 = $_GET['subid1']; //Country code
$subid2 = $_GET['subid2']; //Gender
$subid3 = $_GET['subid3']; //Age group
$subid4 = $_GET['subid4']; //Creative ID
$subid5 = $_GET['subid5']; //Angle
$geoip = geoip_record_by_name( $_SERVER['REMOTE_ADDR'] );
$country = $geoip['country_code']; // Here we are calling on the geoip module to process the persons IP and lookup all the data it has on that IP. This gives us a big array of data including region, country, city info. We just want the corresponding two letter country code in the GeoIP database, e.g. US, CA, AU, etc. This value is then used to set the variable $country. So $country= US for exaple.
//simple redirect based on the detected country code above. Here we tell the server to look at the variable $geoip, and based on what it is, do something. We can say if the country code is = US, do this. Or if it is equal to AU, do this. And if it fits none of these, do something default.
switch($country) {
case 'US':
$redirect[1] = 'http://affiliateurl.com/?a=XX&c=XX&s1='; //here we can insert our tracking parameters subid1-5 into the link, but have to be careful to get it written correctly!
$number = mt_rand(1,1); //picks a random number between 1 and 1. Can use this to rotate between different offer links if needed, though you may be able to do this inside your tracking platform (e.g. CPVlab, prosper) instead.
header("Location:$redirect[$number]");
exit;
default: //exceptions
header('Location: http://offerurl.com'); //the offer page, no redirects or affiliate links here unless you want to track people outside your designated countries.
exit;
}
?>
[/PHP]
So, that's the content of the PHP file that your ads are going to directly point to. Now, we need to know how to add those tracking parameters to the redirect URL. Here we have to be careful because we are combining normal text with variables. When a variable is next to normal text you need a "." separator on either or both sides where there is plain text. So for example:
[PHP]$redirect[1] = 'http://affiliateurl.com/?a=XXXXX&c=XXXX&s1='.$subid1.'&s2='.$subid2.'&s3=' .$subid3;[/PHP]
Make sure to use an editor with syntax highlighting so mistakes get picked up on. Notice anything that is static text has ' ' around it to separate it from the variables as well, you could also use " ".
Also, I would recommend looking at http://stmforum.com/forum/showthread...5126#post65126 and playing with the script later in the page to get a feel for the fact your GeoIP is working properly and outputting country codes. Try it with proxies.
Now, how to integrate this with CPVlab? Simple, we just replace our redirect URL with our CPVlab tracking URL and figure out exactly how to structure it to pass the variables properly. I don't use CPVlab so I might not get this completely correct, but I think CPVlab generally expects subid=value in the URL and anything extra needs to be setup using the "Capture Extra Tokens" option in the campaign setup. This page might help - http://z6evolved.com/pof-tokens-land...ges-lol-money/
So what you would want to do there is add Country, Gender, Age, Angle for instance in the extra tokens area and use our subid4 which we have set as some creative ID as the general subid. Then our redirect link would like like this:
[PHP]$redirect[1] = 'http://cpvlaburl.com/base.php?c=XX&key=YY&subid='.$subid4'&country='.$s ubid1.'&gender='.$subid2.'&age='.$subid3.'&angle=' .$subid5;[/PHP]
Once you have this all setup you can test whether these are getting passed properly before you start your campaigns. To do so, just open up whatever browser, open the web dev console or w/e so that you can see the http headers. In Firefox you press Ctrl+Shift+K and in Chrome you press F12 then go to the network tab. You want to see the steps your browser goes through when it loads the advert URL and heads to its destination, and you will see the tokens appended to the end of the URL.
So e.g. load adverturl.com/x/y/z/index.php?subid1=test1&subid2=test2&subid3= and so on. Watch the http headers, check if the tokens are transitioning to the later urls, check that they appear in cpvlab, check they then appear network side, and troubleshoot. When it gets to the affiliate link you will likely need to be using a proxy if you aren't inside the country that the affiliate URL accepts.
One last thing, with Facebook, you want to have nothing tracked at all during approval. You want them to get bounced directly to the offer URL and nothing else. It would mess the shit outta your tracking data if you did pass the reviewers through your tracking, and when they hit the affiliate URL they sometimes get redirected to crazy places and will disapprove your ads and potentially ban your account. Don't let that happen. To avoid this I upload two PHP files to my advert URLs destination folder. One called indexapp.php and another called indexreal.php. The indexreal being the proper script above, whereas indexapp is just a simple redirect like so:
[PHP]
<?php
header('Location: http://offerurl.com');
?>
[/PHP]
Upload them, then rename indexapp.php to index.php. Once everything is approved I rename index to indexapp and indexreal to index, so we are now in tracking territory.
I can't think of anything else to say, just get in there and test the inner workings of this kind of tracking and develop a method. Save generic PHP templates so that when you start a new campaign you just copy/paste and fill in the blanks. God speed.
You are awesome Zeno, thanks for taking your time writing and explaining all these, I fully understand now. I will go ahead and test some of these today . Thanks again dude 
woot hardcore stuff again
Note: edited code as forgot to add the following
[PHP]
$country = $geoip['country_code'];
[/PHP]