Yahoo's getting in the game. REST based APIs for Search, Images, News, etc.
Yahoo's differentiators:
I think another difference is that Yahoo knows how to support a community launch better than Google. Jeremy Zawodny alone will do more to promote the APIs than the Google AdWords API team has time for. E.g. a quick tour of the sample code shows more depth than the Google AdWords API samples. A nice perl example, even a JavaScript sample. PHP is kind of weak, however...
Paul Bausch, a creator of this fine blogging service (blogger), and author of Amazon Hacks, has a quick Yahoo API sample up on O'Reilly site.
BTW, if you want to get started with the Overture APIs, they are there, you just have to look carefully. Unfortunately, you need to process DTC-XML for Overture. So once people learn SOAP, REST and REST / DTC-XML, we can expect some cool apps!
SEMPO releases the results of a survey done in 2004. Click fraud is seen as a minor problem currently.
Statement | All Advertisers | Advertisers of < 500 Employees | Advertisers of 500+ Employees | Agencies |
---|---|---|---|---|
This is a significant problem we have tracked | 6% | 10% | 0% | 4% |
It is a moderate problem we have tracked | 19% | 21% | 15% | 30% |
We have not tracked it much, but we are worried about it | 45% | 36% | 58% | 43% |
It is not a significant concern | 26% | 28% | 23% | 23% |
Never heard of it before | 5% | 5% | 4% | 0% |
Interestingly, the survey summary claims that advertisers and agencies are currently more concerned about manipulation of search engine results, with repondents averaging a 2.0 on a scale of 1 - 5, agreeing with the statement: "Abuse of search engine optimization practices is a major problem".
My take would be that things change fast in the search world, and it's not surprising that SEO manipulation had more awareness than click-fraud. But I think SEO manipulation is the past trend. There is room for surprise on the click-fraud front since concern about click fraud hasn't reached critical mass in the marketplace. If it does, it is going to have a lot of room to run, since most market participants weren't worrying about click fraud at the time of this survey. Of course, I could be wrong, and click fraud is really nothing to worry about...
Here's how to prepare yourself to be able to detect click fraud and potentially get a refund from Google or Overture:
That's a start - you certainly need to keep good records and all your clickstream data.
Seth Godin picks up on some Indian stories about click farms...
Related:The warning at the end of John Heilman's article on Google:
When crisis eventually comes to Google— and it will—the company’s fate will depend on whether they have absorbed a handful of lessons that apply as much to life as they do to business: Adulthood happens. You can’t make all your own rules. And everyone fucks up.
Yes. Within 18 months. Call it the "Come to Jesus" moment. I'm guessing that it'll be related to click fraud.
Brian McAndrews in interviewed by the MarketingSherpa folks. He gives four tips, and number three deals with click fraud.
To stay in the game, McAndrews suggests these strategies:
- Look at lifetime value
- First rank isn't always the best
- Continue to monitor for click fraud
If anything, the click fraud topic will heat up this year. Advertisers should monitor campaigns closely: if click volume spikes while conversions stay within a normal range, you may be dealing with fraudulent clicks from affiliates or your competition.
- Search is just part of the mix
McAndrews is the CEO of the company that owns AtlasDMT. So he sees a lot of data. One tip that he probably assumes his audience must be doing is: "Track conversions." That's step one.
The fact that Google AdWords rewards relevancy creates a big differentiation for Google AdWords over Overture's system. The simple fact that your ad position is determined by the combination of your bid and your click-thru rate causes you to focus on the right things:
When you try to over-think the buying of PPC ads, you can get distracted by complex bid-management strategies such as day-parting: choosing when to run ads in order to reduce cost.
Although Overture's transparency has some advantages, it's all too easy to get caught up in the bidding process, since the bids are all that control your ad position. Techniques like day parting may make sense for high volume sellers who have very good understanding of their demographics, but for the most part, it's a distraction.
There are better ways to spend your time if you are looking to maximize profit on an ad campaign. Consistently focusing on keywords, ads and landing pages can easily increase conversion rates by factors of 2x or 3x.
Brian over at MicroISV speculates:
Now that Google is opening up the AdWords API, my guess is that we’re going to see dozens if not hundreds of apps that will handle scheduling of ads. By scheduling ads to appear at times when people are more likely to download my software, I have a better chance of both increasing sales and quite possibly, decreasing expenses. My other option is to use the API to increase the bids on my AdWords so that they appear first in the list during non-peak times which has the potential to increase sales during times that are traditionally slow.
My view is that it will take a while these apps to show up. Here's why I think the AdWords API adoption is going to be somewhat slow:
What could Google do to increase the adoption beyond the AmazEbayShoppingTag.coms? A few things are obvious:
Note that I don't think the choice of SOAP is a limiting factor. There are some who clamor for a REST version, but I think the AdWords API is more complex than most of the current REST things, and a different interface wouldn't spur adoption any faster. The AdWords API is a great thing because it's an early example of web services for the masses. Google should make it happen faster, though.
If this post shows up, I guess you can. ===== Visit one of my websites: http://gotads.blogspot.com -- Successful search engine marketing __________________________________ Do you Yahoo!? Meet the all-new My Yahoo! - Try it today! http://my.yahoo.com
UPDATE: Wow! It worked. I guess I gotta watch that .signature if I want to do that again.
If you buy PPC advertising, it's imperative that you track conversions somehow.
If you know your average conversion rate, and you have enough volume, then changes in the conversion rate can be a strong tip-off of possible click fraud.
However, if you are letting Google and Overture track conversions, and they are crediting you automatically for what they identify as fraudulent clicks, then you won't really be able to see what's happening - they are tweaking the data before you see it. Another good reason to track your own clicks and conversions outside of what Google and Overture do for you.
I spent an hour hacking the Y!Q javascript to see if I could get it to call Google. Of course in the end I really only changed about 10 lines. The idea was to see if I could get better "contextual" results.
However, I couldn't get the Google results into an IFRAME cleanly. On Firefox, I kept getting a syntax error.
The yahoo javascript grabs the search results from the page with the following line:
document.getElementsByTagName("head").item(0).appendChild(oJSResults);
But when you try it against google, it fails with:
Error: syntax error
Source File: http://www.google.com/search?q=click%20fraud%2C
%20click%20spam%2C%20google%20click%20fraud%2C
%20Overture%20click%20fraud&=Search%20Related
%20Info&hl=en&num=5
Line: 1
Source Code:
<html><head><meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"><title>Google Search: click fraud, click spam, google click fraud, Overture click fraud </title><style><!--
I think the problem may be that <!-- at the end. Google must put that in there for some reason - and it may be somehow messing up the Javascript/DOM ability to grab the right element. So if you know how to fix that, I'd love it if you'd put a note in the comments. Thanks
The SoapScope weblog explains how to use their product to see a soap envelope from .NET that's passed over an https service.
I used another method, without using a tracing product, and you can copy the concept from here:
Basically, you implement a SoapExtension that processes the soap message and you print the output during the AfterSerialize Stage. Fairly painful since you have to add an attribute to every method in the Web reference proxy classes.
However, I do get to see the SOAP output from my service.
Unfortunately, I also get an exception:
An unhandled exception of type 'System.Xml.XmlException' occurred in
system.xml.dll
My previous post tested out Y!Q. Basically the results sucked. Here's why - the "related search" that was done used the following keywords:
email spam google opine contextual search search advertising cause people ppc currency
So basically, Y!Q chooses some words out of the text I provided - which in the case of the last post was all of the text after the first paragraph. The words it choose weren't really very representative.
So here's another try, and this time, I'm providing just the keywords I want:
click fraud, click spam, google click fraud, Overture click fraud
In other words, provide it with the equivalent of a <META> keywords tag. Let's see what happens now...
UPDATE:
Bah! Still sucky. It took the words I provided and decided to only use the following:google spam fraud clickNo results about click fraud, really. Guess I have to wait til the next release...
Y!Q is Yahoo's beta contextual search tool. This means it gives you search results based on the context of what you are looking at. For example, at the bottom of this blog post, you can get a search result in a little popup. The results should be related to the text I've typed below.
So let's see what Y!Q has to say about click fraud. As I opine below, click fraud could be a really big problem for Google. If click spam has a year like email spam had back in 2003, we could see the percentage of fraudulent clicks go from 10-20% today to perhaps 50%+. That would cause people's perceptions of the PPC marketplace to change and could impact the value of Google stock.
But Google can adjust if they would "float" their minimum bids - the way that the government floats the value of currency. They also need to be more forthcoming about how much click spam is actually happening to them. So does Yahoo and Overture.
Now, back to Y!Q - could contextual search change the model for search advertising? Try it out below, and let's see what happens...
"Click fraud exists, but it's mostly a big paranoia," said Chris Churchill, chief executive of Fathom Online, a San Francisco firm that studies the spending patterns on search engine ads.Others believe anywhere from 10 percent to 20 percent of the clicks are made under false pretenses.
This article from CNet also cites several sources in the 10-20% range.
But what about last Thursday, Feb 10? Anyone notice 50% more clicks than usual on their Google AdWords campaigns? Random? It wouldn't be too odd if click spam could reach 3X normal levels on a peak day.
In any case, Google's current stance is precarious. Here is a recent quote from the CEO:
"We are always worried about it, but it hasn't been a material issue so far," said Google chief executive Eric Schmidt.
Basically: "Move on. Nothing to see here." Attempting to keep a lid on anything untoward... If the pundits are saying 10-20%, and on a given day it could be 50%+, how long will Eric Schmidt be able to honestly say "it hasn't been a material issue" ? I'm pretty sure he knows who William Lerach is.
PREDICTION: Click fraud will be a HUGE problem for Google this year. Since almost all of their revenue comes from AdWords, the stock could be very vulnerable to any real or perceived threat to that revenue. Google doesn't have THE answer just yet...
Here's a transcript of a video of Omri Gazritt at Microsoft explaining the meaning of Web Services and why they are important.
C9: What does Microsoft get out of this? In other words, why should I help Microsoft get richer by adopting, help you get your pay check?
...
OG: Seriously, the more we reach into the enterprise, the more we realized how heterogeneous the environments are. Hence, doing this, for Microsoft helps us be able to sell more of our software to that space. And it's something our customers just demand of us. He says, hey, I have a J2EE environment today on the server. I would love to bridge clients out there except a little detail. All that stuff runs on some other vendor's platform, and your stuff runs on Windows. Can you make it work for me?
SOAP and web services could theoretically make it easy for different apps, databases, web sites, etc. to work together!
All well and good in theory, but I can barely get VB.NET to talk to the AdWords API from Excel VBA, so I kinda wonder who's going to be making their ERP on Sun talk to their J2EE middleware on Linux and have the result show up on the Windows desktop in Firefox...
The upshot, as Simon Fell says, is that "Interop is hard"... True enough, e.g. the PocketSOAP wsdl tool can't grok the AdWords API wsdl without getting "Type Mismatch" errors...
I spent a few hours on the phone with some Overture sales and marketing people asking them about their API plans now that the Google API is out. First, Overture does have an API, and it's been in use for well over a year. It's XML based, but not a SOAP interface.
Overture charges for use of their API. I don't know exactly what they charge, and I'm sure it varies by how much you spend buying ads, but I think it's something like a tenth of a cent per operation. I was told that they charge a monthly minimum of around $2,000 to access the API. In other words, you need to be really big to justify using it.
The Overture API offers access to all the features of the web interface, according to the sales engineer I spoke with. It also offers access to the keyword suggestion and traffic prediction tools.
One of the questions I asked the Overture people was what their plans were now that their #1 competitor and top brand in PPC ads is giving access to their API for free? The answers didn't seem too promising. They are thinking about what to do, and don't want to seem to reactive to Google!? The time frame seemed at least 6 months before much happened.
I think they shouldn't worry about being perceived as reactive, and instead should get their API out there in the open, for free, ASAP...
Feel free to comment if I've got anything wrong, or if you have more information on the Overture API - I'd love to know more about how it compares to the Google AdWords API.
Some good advice in this Marketing Sherpa article (free access until Feb 25th) from a training consultant at Overture named Mary O'Brien.
O'Brien says "that advertisers tend to split right down the middle, with 50% getting a better return from Overture and 50% claiming Google offers a better return." Hmmm.
Her tips are good advice, and are similar to suggestions I have for Overture advertisers. Here are the highlights of her tips:
O'Brien also has some advice on bidding:
Some people say, "I'll choose 15 or 20 keywords and bid till I get to number one," O'Brien says. "That strategy will get you broke.
Read the whole thing - but get there before Feb 25, if you want to see it for free.
The first call that you need to really work when using the AdWords API is getAllAdWordsCampaigns. Here's the minimum XML / SOAP that I've found to work. Of course, you need your own AdWordsAPI token and account.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <email>EMAIL</email> <password>PASS</password> <token>TOKEN</token> <useragent>AGENT</useragent> <clientEmail>CLIENT</clientEmail> </soap:Header> <soap:Body> <getAllAdWordsCampaigns> <dummy>0</dummy> </getAllAdWordsCampaigns> </soap:Body> </soap:Envelope>
I tried PocketSOAP, but couldn't get the WSDL generator to work with google's wsdl. You can use PocketSOAP reasonably well, if you set up the envelope and header every time by hand... but that's not very time-efficient.
I also spent a good week trying to get Excel VBA to work. The Web References didn't fully work with the Google WSDL from Excel. For example, the campaign service has an enumerated type that has "type" as a variable name, which is not allowed in VB, since it's a reserved word. Furthermore, you can't just set the headers using the SoapClient30 from Excel, you need to try and implement IHeaderHandler. I finally got it to work, but it's very difficult. It's quite flaky and I think it's a waste of time, frankly.
So, if you wish to use Excel, the answer really is to use VB.NET from Visual Studio. You create a class, then use a COM module that can been seen from the "References" of Excel. Here's a program that works in Visual Studio and can be called from Excel. In Visual Studio, you'd create a Console Application that called the module below. Then if you step thru the code, you can see the output. I'm going to try and post more detailed instructions later.
For Excel/VBA, the "PrintCampaign" sub could be modified to dump the xml into a range on a worksheet.
In summary, I really recommend not wasting your time struggling with VBA and the Web Services Toolkit. Just use Visual Studio. The WSDL parser works, you can set the headers to what google expects much more easily, and you can move past just getting the calls to work.
' A creatable COM class must have a Public Sub New() ' with no parameters, otherwise, the class will not be ' registered in the COM registry and cannot be created ' via CreateObject. Public Sub New() MyBase.New() End Sub Public Sub PrintCampaignList(ByVal Email, ByVal Password, ByVal Token, ByVal Agent, ByVal ClientEmail) Dim s As New CampaignServiceService s.useragentValue = New useragent s.useragentValue.Text = New String() {Agent} s.clientEmailValue = New clientEmail s.clientEmailValue.Text = New String() {ClientEmail} s.emailValue = New email s.emailValue.Text = New String() {Email} s.passwordValue = New password s.passwordValue.Text = New String() {Password} s.tokenValue = New token s.tokenValue.Text = New String() {Token} Dim campaignList() As Campaign Dim c As New Campaign campaignList = s.getAllAdWordsCampaigns(0) For Each c In campaignList PrintCampaign(c) Next End Sub Public Sub PrintCampaign(ByVal campaign) Console.WriteLine("ID: " & campaign.id) Console.WriteLine("Name: " & campaign.name) Console.WriteLine("Daily Budget: " & campaign.dailyBudget) Console.WriteLine("Status: " & campaign.status) Console.WriteLine("Start: " & campaign.startDate) Console.WriteLine("EndDate: " & campaign.endDate) End Sub End Class
If you want to take advantage of the techniques, you can download wikto, which can use the google API (the original search API) and a database of queries created by Johnny Long (johnny.ihackstuff.com)
Having devoted / diverted my own attention for the last two weeks to the Google AdWords API, and away from my regular business, I think this article is a must read for any marketing manager thinking about using Google's AdWords API or even Overture's API.
The bottom-line is nailed down right here:
Before looking at a build-versus-buy decision, consider the following:
Your business rules set. Having access to the back end of Google or Overture is useless if you don't know what your goals and objectives are nor how those objectives can be coded into a flexible system that uses feedback to make adjustments and changes in the engines.
In other words, the person in charge needs to manage a mature set of keywords, understands conversion, cares both about PPC, organic, email, etc. They have to help their product managers, content people, and sales people understand search, and they have to keep them happy (if someone calls from the Barcelona office and wants to know why no ad shows up under some Spanish language term, they don't spend a lot of time explaining why, they just add it to the list - because it's cheap and easier than arguing about it)
In sum: prioritization, reducing risk, keeping things predictable and integrating with other marketing efforts while keeping the rest of the company happy is their main task. Search will mature and be managed like everything else, and software vendors will have to address all the pieces.
PS. What's the hardest problem for these F500 guys? Finding good consultants who can integrate into the WHOLE marketing strategy and focus on the business value while monetizing search. If they find one, they are either hired or hard to keep interested.
function expandcollapse (postid) { whichpost = document.getElementById(postid); if (whichpost.className=="postshown") { whichpost.className="posthidden"; } else { whichpost.className="postshown";} } </script>And the CSS that were provide in the help page:
.posthidden {display:none} .postshown {display:inline}And simply create my own span, with a made up id in the post. Do a view source on this post to see how it works. [+/-] Expand / Collapse this section
Giving the search engines visibility into the effectiveness of keyword buys could potentially allow them to consciously inflate their rates – Google and Overture will recommend a company's most successful words to their competitor, setting off small bidding wars.Andrew Goodman seconds the motion over at his Traffick blog
Bottom-line: Don't give your data to the ad network. Someday it may be used against you. Use 3rd party or in-house tracking tools instead.
In the olden days, I used to work with a great programmer named Phil Karlton. We worked on a real-time OS that ran on an SGI Indy and tried to make it become a set-top box for interactive TV...
However, in the early days, nothing was stable at all. Not the tools, the OS, the server side, the database - NOTHING. Each morning was a two hour fun-fest of fixes to your personal sandbox before what you had yesterday would come close to working.
Some days, you'd call Phil over to understand why your build was broken, or the code didn't work. He'd look at your versions, and look at the problem, and then usually say: "It works for me."
Which was basically a curmudgeonly way of saying: get on the right train, use the right versions, and do what I'm doing if you want anything to work...
So although Phil passed away in a tragic accident, I think I'd know what he'd say about working with the Google AdWordsAPI. If I were smart instead of stubborn, I'd have the same development environment as the Google team. As near as I can tell that would be:
An otherwise prolific programmer who runs KillerSite.com bemoans the difficulty of SOAP in VBA (that's Visual Basic for Applications, ie. Excel Macro language)
I'm having quite a time working with MSSoapLib... I searched all over Google and Google Groups but have found nothing helpful...He documents more troubles here. I don't know what service he's trying to use, but attempting to use the AdWordsAPI from VBA is a huge pain in the ass, so far.
The best place I've found for help are the xml and Excel VBA forums over at p2p.wrox.com. However, much of the Microsoft world is moving away from VBA towards Visual Basic .NET. The big advantage of VBA is you don't need a several thousand dollar investment in Visual Studio .NET to write a program that sends 400 bytes of xml over http. The disadvantage is that you can't get anything to work, and it's hard to debug... at least for me.
"For several months now I’ve been troubled by a nagging and unpleasant thought that there is a potentially large vulnerability in Google’s Adwords business model. ... A billionaire has arranged to give $100m to the first person that clicks on a special link that looks like a Google text ad."
I.e. the billionaire attempts to get a mass number of Internet users clicking on every ad, in order to find the "golden ticket"... AdWords advertisers would find they were paying for huge numbers of clicks that had no intention of converting to buyers. A panic could ensue, and everyone would stop investing in AdWords campaigns.
This is interesting to think about, but I think it misses a key point. Google has created a market - much like the stock market. Since the AdWords market does have intrinsic value to a lot of players, it would be hard to "corner".
If someone offered $100M dollars to incent mass number of users into click-fraud, it would shock the market for a short time, but the market would quickly "discount" the attempt. In other words, the advertisers would recall they can still derive value from placing ads, and actual buyers would still find their sites. In response, they could simply lower their bids to reflect the influx of non-converting clicks.
Google could also adjust quickly to such a threat, by lowering minimum bids requirements, for example.
So in the end, everyone's conversion rate might go down by a factor of 10 or 20, but the actual number of conversions wouldn't be affected too much. So you'd still spend the same on ads to get the same result.
I do think it's an interesting question - and it could definitely affect the stock market's view of the company. Remember when Jim Clark announced his confidence in Netscape by saying he would invest $30M of his cash back into the faltering stock? That move bolstered NSCP quickly enough so that Clark's overall stake increased in value by over $100M...
Via GoogleBlogoscoped. Philipp notes the other interesting part of this thought experiment - Google could eventually move toward a pay-per-conversion model, rather than a pay-per-click.
Best of all, she starts finding products for her customers instead of finding customers for her products.It may not be apparent how profound this is. Hell, it's the secret of all modern marketing. But search engines are the key - you start by understanding that the hard part is getting the customers - and you find products for them... "Huh?" I hear you saying - well think about this: Get some tools that tell you what people are searching for, and not finding, and provide it to them...
Here's a test program I wrote. You can indeed call the Google AdWordsAPI from JavaScript...
function postData(Url, Data, Action) {
var oHttpReq = new ActiveXObject("Msxml2.XMLHTTP.4.0");
oHttpReq.open("POST", Url, false);
oHttpReq.setRequestHeader("Man", "POST" + Url + "HTTP/1.1");
oHttpReq.setRequestHeader("MessageType", "CALL");
oHttpReq.setRequestHeader("Content-Type", "text/xml");
oHttpReq.setRequestHeader("SOAPACtion", Action);
oHttpReq.send(Data);
return oHttpReq;
}
function main() {
var sUrl = "https://adwords.google.com/api/adwords/v2";
var sData = ' <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="https://adwords.google.com/api/adwords/v2">
<soap:Header>
<email>EMAIL HERE</email>
<password>YOUR PASSWORD</password>
<useragent>XXX</useragent>
<token>YOUR TOKEN</token>
<clientEmail></clientEmail>
</soap:Header>
<soap:Body>
<getOperationCount>
<startdate>2005-01-02T23:59:59</startdate><enddate>2005-02-02T23:59:59</enddate>
</getOperationCount></soap:Body></soap:Envelope>';
var oResponse = postData(sUrl, sData, "getOperationCount");
if (oResponse.status == 200) {
WScript.echo(oResponse.responseText);
} else {
WScript.echo("Could not retrieve data:\n" + oResponse.statusText + " (" + oResponse.status + ")");
}
oHttpReq = null;
}
main();