Newbies Guide to Selecting a Keyword Tracker

Filed Under (Affiliate Marketing, Keyword Tracking, PPC-Coach, Web Analytics) by zl1n0x on 27-12-2008

Tagged Under : , ,

I see newbies struggling with keyword tracking for affiliate campaigns a lot.  This comes up on the PPC-Coach forums on a regular basis, usually in the form of a post like this:

“I’ve spent the last week trying to set up the PPC-Coach Tracker/Prosper 202 and I’m getting nowhere, HELP!”

Now firstly, if you’re just starting out in affiliate marketing and you have few if any technical skills then its just a fact of life that you will have to deal with the learning curve that is associated with setting up and configuring web sites, including 3rd party blogs, trackers, CMS’s and whatever.  You’ll have to deal with it eventually, and whilst the learning curve is steep it is also shallow, and in a couple of  months it will seem easy.  With that said there is no point wasting time doing something that you dont have to do.  In the beginning your time is better spent building campaigns so that you can get your cashflow started.

PPC-Coach Tracker / Prosper 202 - These are self hosted trackers (coaches also auto updates from adwords) - Use these products if you are confident in installing 3rd party software on your own hosting space.  Do not install on a cheapo shared host - use a VPS as a minimum.

Tracking 202 - This is a tracker hosted by a 3rd party company.  Use this product if you are not confident installing 3rd party software on your own servers.  Ignore anyone who gives you crap about them stealing your campaigns - you’re new and don’t have any campaigns that are worth stealing.  Based on what I have seen on the forums using this software has the potential to save you hours, if not days, of frigging around wondering why you cant get things working properly.  When you have some campaigns rolling and you are finally making some money you can now invest some of that in a VPS or dedicated server and either take the time to install it yourself properly, learning as you go, or you can pay someone else to do it for you.

Immortal Promoter Update #3

Filed Under (Black Hat, Immortal Promoter) by zl1n0x on 01-12-2008

Tagged Under : ,

This week has seen some discouraging developments in my testing of the Immortal Promoter product, as well as some positives.  On a good note the site is listed with 4 pages in Google and a couple of individual entries in Yahoo.  The bad news is that I have noticed some rather nasty side effects of having the IP script on the page.  The worst of these are forced redirects to parked pages.

My process for getting backlinks is to just load up the site and leave it autorefreshing for 2 to 3 of hours every day.  I do this on another remote PC over Remote Desktop and work on other stuff whilst its running.  So what has been happening lately is I will return to the remote PC to check how its going and find it auto refreshing a parked page.  The other annoyance is popunders for poker and other affiliate deals as well as login boxes for sites that require authentication.  Considering that part of the appeal of IP is to generate backlinks via the random IP addresses of your sites visitors this does not bode well, although to keep things in in perspective I would say that these things happen rarely - but often enough that a small proportion of your visitors will experience them.

I think I’ve now run this enough to guage Immortal Promters effectiveness at getting an affiliate datafeed site indexed, so here are the results of the test so far:

  • Site was indexed without registering in webmaster tools - PASS
  • Site is displayed for searches on keywords listed in IP’s keyword rotator - PASS (just - I think this site needs more time)
  • Site has backlinks appearing in one or more search engines - FAIL.  No backlinks are appearing in Google or YSM.  Its likely that this just needs more time, as I know the backlinks are out there due to site visits.  I’ve been informed that it can take a couple of months for these to start showing up.

I have a number of other sites just like this one that I got indexed simply by registering the sitemaps with the big 3, and these had similar indexing times.  I’m wondering if I’m missing something, in fact I’m sure that I am.  My next step will be to go back to the creators and find out how to take this test further.

Microsoft AdCenter Desktop Rocks

Filed Under (AdCenter, Microsoft) by zl1n0x on 27-11-2008

Tagged Under : ,

I haven’t played around much with AdCenter until I got my hands on the AdCenter desktop beta. After building a bunch of campaigns today using it I feel like I’ve gotten the hang of it, and I was able to put stuff up lightning fast. I feel like this is going to be a great app. The only thing that is missing is VBA automation - that would make this product killer. Oh yeah, and a shitload more traffic ;)

Heres a sneak peek at the research menu - theres some interesting stuff in there. I found the similar keywords function very useful, but I had to head over to AdLab to research demographics as that is currently disabled.

AdCenter Research

If you haven’t yet signed up for the beta you can do so here.

**CORRECTION**
The monthly traffic and demographics buttons are NOT disabled - I’m just a moron and didn’t realise that you need to select your keywords before you can use them.

Quick Data Scraping Using Excel Web Queries

Filed Under (Excel, Scraping, VBA) by zl1n0x on 25-11-2008

Tagged Under : , ,

Heres a quick tip that will be very useful for many of you, especially those not too comfortable writing code.  Excel has a neat feature called Web Queries, which is basically a way that you can visually select data on a web page and import it into a spreadsheet.  For example, maybe you want a full list of countries or US States, you can find a site which contains this information in a tabular format and then import it into Excel with a few clicks.

I’ll use US states as the example, I found a nicely formatted list on a Canadian government site (hmm, what are those sneaky Canadians up to I wonder?? I’ve never trusted them). It seems that data rendered into html tables works best for this kind of work, as sometimes a tableless layout will end up a mess after import or you wont even be able to select the region page. The trick is to just search around the net for the info you want and find a page that works well.

So in Excel you select the Data tab (if you are using 2007, otherwise just hunt around for the web query option in the menus)

Excel Web Query

This will popup a new browser window with arrow overlays for the bits of data that we can select. The window looks like this once I have added the URL to the target site.

Web Query Window

As the hint suggests clicking the yellow arrow will select all of the data in the table. Then click the Import button on the bottom right of the screen and the data will be loaded into your spreadsheet.

Web Query Result

From here you now use the data however you want - you could import it into MySql or if its data you prefer to view in a spreadsheet you can refresh the query to update the result set. When you think of the powerful functionality built into Excel and the quantity and diversity of data freely available on the web this feature looks pretty cool.

Immortal Promoter Update #2

Filed Under (Black Hat, Immortal Promoter) by zl1n0x on 23-11-2008

Tagged Under : ,

The Immortal Promoter test is now on its 6th day. Every day I fire up Firefox on my proxy and kick off some link building, usually I let it run for 3 or 4 hours refreshing every 40s to 1 minute. Today I wanted to see if I could find any results in the SERPS so I added the site to Google Webmaster tools and was suprised to see 2 pages already indexed for one of the categories of products I am promoting. No inbound links are showing though. I thought it would take longer, but who’s complaining? Checks on Yahoo Site Explorer and Live Search so far show no results.

Personalise Your Landing Pages With Geolocation

Filed Under (GeoIP, Google Maps, PHP) by zl1n0x on 22-11-2008

Tagged Under : , , ,

This question popped up on PPC-Coach recently and its a fairly common one I’ve seen around. How do you go about detecting which country and city your visitiors are from? It’s actually pretty easy to do.

Maxmind publish two free databases - GeoLite Country and GeoLite City - their claim to accuracy is “Over 99.5% on a country level and 79% on a city level for the US within a 25 mile radius”. Good enough.

So lets look at how to perform a city lookup on a visitor using their database and API. First step is to download the city database in binary format. Also download the API for your programming language - the PHP one is here. You need to download the following files - geoip.inc, geoipcity.inc and geoipregionvars.php.

The code for initialising the database and retrieving the record for the current IP address looks like this:

<?php
//in this example these includes are in the same directory as this page
include("geoipcity.inc");
include("geoipregionvars.php");

//Include the full path to your binary database
$gi = geoip_open("/GeoLiteCity.dat",GEOIP_STANDARD);

//This gets the GeoIP record for the visitors IP address from the database
$record = geoip_record_by_addr($gi, $_SERVER["REMOTE_ADDR"]);
?>

Then in your page you can access the record object to write out the users location information

<table cellpadding="5" cellspacing="0">
	<tr>
		<th>IP Address</th>
		<td><?php echo $_SERVER["REMOTE_ADDR"] ?></td>
	</tr>
	<tr>
		<th>Country</th>
		<td><?php echo $record->country_name ?></td>
	</tr>
	<tr>
		<th>Region</th>
		<td><?php echo $GEOIP_REGION_NAME[$record->country_code][$record->region] ?></td>
	</tr>
	<tr>
		<th>City</th>
		<td><?php echo $record->city ?></td>
	</tr>
	<tr>
		<th>Post Code</th>
		<td><?php echo $record->postal_code ?></td>
	</tr>
	<tr>
		<th>Latitude</th>
		<td><?php echo $record->latitude ?></td>
	</tr>
	<tr>
		<th>Longitude</th>
		<td><?php echo $record->longitude ?></td>
	</tr>
</table>

Running this on my computer gives me the following result:
My Location

Actually, the city listed here is about 10 minutes drive away but at least it was close.

So now that we have this data what can we do with it? Aside from the obvious use of the city name in advertising my first though was to hook it up to google maps. This turned out to be very easy to do. You will need a Google Maps API key that is linked to the domain that you want to use the service on.

I modified the sample code provided in the Maps API documentation to add a point to the latitude and longitude coordinate returned by GeoLite City and to automatically popup a message bubble. You can see the code in action on this page

This is the javascript that sets up the map

<script src="http://maps.google.com/maps?file=api&amp;amp;amp;amp;amp;amp;amp;v=2&amp;amp;amp;amp;amp;amp;amp;key=YOUR_API_KEY" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
	function loadMap(latitude, longitude, city)
	{
	  if (GBrowserIsCompatible())
	  {
		//create the map and center it on our lat and long values
		var map = new GMap2(document.getElementById("map"));
		map.setCenter(new GLatLng(latitude, longitude), 13);

		//create an icon to display on our lat/long coords
		var location_icon = new GIcon(G_DEFAULT_ICON);
		markerOptions = { icon:location_icon };

		var point = new GLatLng(latitude, longitude);
		var marker = new GMarker(point, markerOptions);
		map.addOverlay(marker);

		//add a message bubble to the map
		var bubble = "<div class='bubble'><h1>GeoLite city thinks you're in <u>"+city+"</u></h1>  Was it close?</div>";

		//Attach the bubble to the point - this means we can open and close it by clicking
		//the icon we added earlier
		GEvent.addListener(marker, "click", function()
		{
			marker.openInfoWindowHtml(bubble);
		});

		//start the page with the map open
		marker.openInfoWindowHtml(bubble);

		//adds the ability to zoom in and out on your map
		map.addControl(new GSmallMapControl());
	  }
	}
//]]>
</script>

This is the HTML for the map

<div id="map" style="width:500px;height:400px;margin-top:10px;">
</div>

Then to initialise the map we call the javascript function in the body’s onload event, and pass in the latitude, longitude and city name

<body onload="javascript:loadMap(<?php echo $record->latitude?>, <?php echo $record->longitude?>, '<?php echo $record->city ?>')">

** Click here to see this code running **

Pretty easy right? You can download the sourcecode for the test page from here. Enjoy!

Immortal Promoter Update

Filed Under (Black Hat, Immortal Promoter) by zl1n0x on 18-11-2008

Tagged Under : ,

I’ve kicked off this test now using an install of Affilistore and the link rotator feature of Immortal Promoter.  The link rotator works in the following way - you generate a bunch of url/keyword combinations then upload them into Immortal Promoter’s control panel.  From here things got a little confusing as there are no instructions on how to use this particular feature, and it is not obvious as to how you should go about configuring your site once you’ve loaded in all of the urls you want to promote.  In the end I figured out that you can generate a blank IP script on another page, and if you use this script it will hook in to your link rotator urls.

So this is a summary of what I have done so far

  • Create a datafeed site using Affilistore
  • Created some custom categories for popular products
  • For each category I scripted out a bunch of URL/Keyword pairs - the keyword is just the product name
  • Uploaded these into Immortal Promoter
  • Generated the script for Immortal Promoter to add to the site.  This is much the same as your google analytics code.

Now the way this works is that when anyone accesses the page the IP javascript works its magic by selecting a url/keyword combination from the link rotator database that I just set up for this site and then inserts backlinks to this url using the keyword as the anchor text.  As such its dependent on new visits, so I set up a Firefox session on the site using the Reload Every plugin, and I’ve just finished running it for about 1.5 hours refreshing every 18 seconds.  Inspecting the request headers gives some clues as to what is going here and allowed me to confirm that the url and keywords are correct.  During the page resfreshes I did get a couple of javascript popups from the link target site asking me for a password, and also a html ad popup for some crappy service.  That might not be the best experience for a real visitor.

So now the plan is to run a couple of hours worth of link building daily and to monitor the results to see what happens with keyword rankings and traffic over time.

Experiments in Coloured Hat Wearing

Filed Under (Black Hat, Immortal Promoter) by zl1n0x on 11-11-2008

Tagged Under : ,

I’ve been intrigued by the world of the black hat for a while now, and have decided to test some tools and strategies that are currently being used to influence rankings and drive traffic to websites. The first tool I will be testing is an automated link building tool called Immortal Promoter. This is a service run by Vsloathe of Syndk8 fame which claims to automagically create backlinks to your site using the IP address of the visitor. So for test number one I’ve set up a simple wordpress splog in a consumer oriented niche which I will only promote using the IP service. The test will be judged a success if the site manages to get ranked by one or more of the tier one search engines. More info as the test progresses.

Datafeed Scraping

Filed Under (Excel, Regular Expressions, Scraping, VBA) by zl1n0x on 11-11-2008

Tagged Under : , , ,

This is the first post in my Learn to Scrape series.  We’re going to rip content from merchant websites using their affiliate datafeed and Microsoft Excel.  You might want to do something like this if you are setting up a price comparison style store that is populated from the content that merchants provide within their datafeeds.  One thing that I have noticed with these is that the quality of the content for products is often poor, and due to the ease with which you can set up these sites virtually every merchant you choose will already have many identical looking affiliate sites with the exact same content appearing in the SERP’s.  This is a way to differentiate your site with more relevent information regarding the products you are promoting.

For this example we will use the following tools:

  • Our affiliate store will be based on Affilistore.  This is a free datafeed solution that is probably the easiest package to get started with
  • We will scrape data from the merchant sites using Microsoft Excel.  If you dont have a copy Microsoft have a free 60 day trial.
  • We will use merchant datafeeds from Affiliate Window, a UK based affiliate network.  You could just as easily use datafeeds from Commission Junction or any other source, just so long as you can get the info in CSV format.
  • We will use Regular Expressions to extract the data from the page
  • Once we have scraped the information you can import it from your Excel spreadsheet to a database of your choice.

One caveat before we begin.  Many datafeeds contain hundreds or even thousands of products.  The technique we use is to loop through the products deep link, request the page, then extract the result from the response.  You need to be careful when doing this as some merchants will recognise it as bot traffic and may not like what you are doing.  You should take the following precautions:

  • Dont use the affiliate networks deep link, as this contains your affiliate id.  Use the direct url to the product.
  • Dont scrape during high traffic times.  Most merchants will handle the traffic just fine, but if you get unlucky and bring their site down with a constant stream of requests during their busiest hour you will have one pissed off merchant on your hands (assuming they can trace it back to you).
  • If you are really paranoid then find a good proxy and do your scraping through this.

OK, so thats the preliminaries out of the way, now for the fun stuff.  The first thing we will do is select a merchant that we want to promote.  For this example I will use a UK based book merchant Borders.co.uk from Affiliate Window.  Download the datafeed in CSV using a pipe delimiter as product descriptions often have commas which will bugger up Excel.  The datafeed is massive, 200,000+ records, so I’m deleting all but 4.  Lets do a comparison between Borders and Affilistore.

This is the Borders page for The Dark Tower.  In the product details section we have a nice long synopsis, then some technical details describing the book in a block on the right including the ISBN, number of pages, category and publication date.

The Dark Tower Page

This is the Affilistore page for the same product.  We get a brief description of the book and no technical details.

The Dark Tower Affilistore Page

Wouldn’t it be nice to have those technical details on our site?  Yes it would.  So lets do it.  The first thing to do is to import the datafeed into Excel.  Open Excel and create a new blank workbook.  Save it do disk as a Macro enabled workbook if you are using 2007.  Select the option to Import data from text and follow the wizards instructions to load it in.

Excel datafeed import step 1

Select the correct delimter

Excel Datafeed Import Step 2

Right, so now you’ve got the datafeed loaded in Excel you should create a new vba macro. Microsoft have gone and hidden the Developer tab in 2007 because they think that most of their users are too stupid to need it, which is probably true if you consider the amount of people using MySpace, but anyways this is how you get it to display - right click anywhere in the area at the top where the save icon is. Select “Customize Quick Access Toolbar” - Popular - check the option that says “Show Developer Tab in the Ribbon”

So go to the developer tab and click the Visual Basic icon to create a new macro. We’ll put the macro in “ThisWorkbook”. We’ll be using some external components for this so you will need to make a reference to Microsoft Scripting Runtime, Microsoft XML (v6.0, v5.0, whatever version you have listed) and Microsoft VBScript Regular Expressions 5.5 (or whatever version you have). You’ll find the dialog to select these under Tools - References.

Once you’ve done this add the following code (if the code is clipped in your browser click the “view plain” link)

Option Explicit

Public Sub Scrape()
Dim i As Integer
Dim j As Integer

'sends the web request and gets the response
Dim xmlReq As MSXML2.XMLHTTP60
Set xmlReq = New MSXML2.XMLHTTP60

'we use this to extract the response
Dim reg As VBScript_RegExp_55.RegExp
Set reg = New VBScript_RegExp_55.RegExp

'stores matches to our regex patterns
Dim matches As VBScript_RegExp_55.MatchCollection

Dim synopsis, publisher, publicationDate, category As String
Dim numPages As Integer

For i = 2 To 5 'change these numbers to suit your spreadsheet

'get the page from using our xmlhttp object
xmlReq.Open "GET", Replace(Sheet1.Cells(i, 19), "?utm_campaign=affiliates&amp;amp;amp;amp;amp;amp;amp;utm_source=awin&amp;amp;amp;amp;amp;amp;amp;utm_medium=affiliate-link", ""), False
xmlReq.send

If xmlReq.Status = 200 Then

'initialise our variables
synopsis = ""
publisher = ""
publicationDate = ""
category = ""
numPages = 0

'get the synopsis
reg.Pattern = "<div class=""withBigLetter"">(.*)</div></div>"

Set matches = reg.Execute(xmlReq.responseText)

If matches.Count = 1 And matches.Item(0).SubMatches.Count = 1 Then
synopsis = matches.Item(0).SubMatches.Item(0)
End If

'get the books details
reg.Pattern = "<div class=""title"">(.*)</div>\r\n[\S*\s*]<div class=""entry"">(.*)</div>"
reg.Global = True

Set matches = reg.Execute(xmlReq.responseText)

If matches.Count > 0 And matches.Item(0).SubMatches.Count = 2 Then

For j = 0 To matches.Count - 1

If matches.Item(j).SubMatches.Item(0) = "Publisher" Then
publisher = Replace(Replace(matches.Item(j).SubMatches.Item(1), "<h3>", ""), "</h3>", "")
ElseIf matches.Item(j).SubMatches.Item(0) = "Publication date" Then
publicationDate = matches.Item(j).SubMatches.Item(1)
ElseIf matches.Item(j).SubMatches.Item(0) = "Number of pages" Then
numPages = CInt(matches.Item(j).SubMatches.Item(1))
ElseIf matches.Item(j).SubMatches.Item(0) = "Category" Then
category = matches.Item(j).SubMatches.Item(1)
End If

Next j

'the category is surrounded by an anchor tag, so we'll extract the text and remove the link
reg.Pattern = "<[^>]+>"
category = reg.Replace(category, "")

'populate merchant_id field
Sheet2.Cells(i, 1) = Sheet1.Cells(i, 1)

'populate newtork_id field
Sheet2.Cells(i, 2) = Sheet1.Cells(i, 3)

'populate merchants product id field
Sheet2.Cells(i, 3) = Sheet1.Cells(i, 4)

'now add the scraped info
Sheet2.Cells(i, 4) = synopsis
Sheet2.Cells(i, 5) = publisher
Sheet2.Cells(i, 6) = publicationDate
Sheet2.Cells(i, 7) = numPages
Sheet2.Cells(i, 8 ) = category

End If

End If

Next i

End Sub

Most of this is actually pretty straightforward, the trickiest part is coming up with the regular expressions to get the bits of data that you are interested in. My go-to reference for regular expressions is at WebReference, in particular I use the Regex rules page. I also use the Regex tester at RegexpLib. The thing to remember is that you are writing throwaway scripts to scrape data - they dont have to be elegant so if you have to write hacky shit to get the job done fast then do it.

The first pattern pulls out the synopsis which is found in a div with class “withBigLetter”. The (.*) returns any text in its own match group that we can access later in VBA

reg.Pattern = "<div class=""withBigLetter"">(.*)</div></div>"

The second pattern does much the same thing, except you will notice the two sets of (.*) meaning we will have the content returned in 2 groups, representing the key value pairs in the table on the right of the synpopsis.

reg.Pattern = "<div class=""title"">(.*)</div>\r\n[\S*\s*]<div class=""entry"">(.*)</div>"

The third pattern matches any html tags - we use this to strip the unwanted anchor tag from the category name

reg.Pattern = "<[^>]+>"

On running this sheet 2 of your spreadsheet should populate with the data from the merchants site. Its a simple process then to load this into your database and modify your site to put these extra details on the screen for your products, something that we will cover using Affilistore in the next post in this series.

SocialMedia.com Progress So Far

Filed Under (Social Media) by zl1n0x on 11-11-2008

Tagged Under : ,

Following on from my last SocialMedia.com test I have managed to run 1 mobile offer for profit for a total of 3 more days, as well as testing a whole bunch of different offers to see what works.  These have ranged from mobile, email submit, consumer products like flowers and champagne, and dating.  So far only the crush offer, with the shittiest landing page you could imagine, actually converted well for a while but died off with no conversions in the end.   I also noticed a big drop in traffic after a while, possibly due to other people promoting the same offer.  I considered rasing my bids but this would have killed the ROI.  More updates to follow….