Never Ending Thoughts…

blog site of ellipsis solutions

Login With PayPal Using PayPal Authentication Service

PayPal is trusted by over 90 million users world wide. All of us know having “Pay with PayPal” helps building trust in the consumer’s mind. They are rest assured that you are a legitimate and a PayPal verified merchant. Now how about earning more trust from your visitors by providing them a “Login With PayPal” functionality? It might sound a difficult and involving task but fortunately PayPal has made it very simple by providing access to their Authentication Service.

Both our products, ellipsis dive! and ellipsis AdNet use this functionality. Check them out by simply clicking here:

ellipsis dive! - http://apps.ellipsissolutions.com/dive

ellipsis AdNet – http://apps.ellipsissolutions.com/adnet

Here are the steps to implement this in your website. I have provided the sample code in Java Servlet. But you should be able to do this in pretty much any programming language.

Step 1: Create your App on x.com

http://x.com is PayPal’s Developer Network Site. Simply log in using your current PayPal account and click on “My Apps” link and create an App. Select Identity Services and provide your Realm URL. It would be something like http://<your website>/*. It will take a few days before PayPal verifies everything and approves your App.

Step 2: Write the Servlet

The Servlet below should be invoked when the visitor clicks on the “Login With PayPal” link/button on your website. Unlike the standard PayPal buttons that PayPal provides, there’s nothing available for the Login Functionality. So feel free to come up with your own!

The Servlet does the following things:

A. Gets an Authentication Token

B. Redirect the user to PayPal’s login page using that Authentication Token

C. Provides PayPal a Return URL. This is the URL that PayPal hits on successful login

D. If the response in the Return URL is a success, then use the Authentication API to pull basic information about the logged in user (such as name, email, etc.)

—–

Keep in mind that PayPal Authentication Service based Login is not a way to implement “Single Sign On”. It merely “authenticates” the user and let’s you know that the person is a legitimate PayPal user. “True Single Sign On” functionality can be built using technologies such as “Open Id” or “OAuth”.

—–

Step 3: Deploy the Servlet

I am skipping this part and assuming that you are a seasoned web developer and know what you are doing. However if you have any questions, please do not hesitate to ask! There’s always a “first time” and no question is dumb!

package <your package>;

import <all the relevant imports -
         your IDE will tell you so am stripping them
         from here to save space>;
// I am using Apache HTTP Client to make HTTP GET/POST calls

public class LoginWithPayPal extends HttpServlet {

    protected void doGet(HttpServletRequest req,
            HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }

    protected void doPost(HttpServletRequest req,
            HttpServletResponse resp)
            throws ServletException, IOException {
        if (req.getParameter("auth-resp") == null) {
            HttpClient client = new HttpClient();
            GetMethod method = new GetMethod(
                    "https://api-3t.paypal.com/nvp?" +
                    "USER=<your API user name>" +
                    "&PWD=<your API password>" +
                    "&SIGNATURE=<your API signature>" +
                    "&VERSION=65%2e1" +
                    "&RETURNURL=http://<your website>/" +
                       "loginwithpaypal.servlet?" +
                       "auth-resp=success" +
                    "&CANCELURL=http://<your website>/" +
                       "loginwithpaypal.servlet?" +
                       "auth-resp=cancel" +
                    "&LOGOUTURL=http://<your website>/" +
                       "loginwithpaypal.servlet?" +
                       "auth-resp=logout" +
                    "&SERVICENAME1=Name" +
                    "&SERVICEDEFREQ1=Required" +
                    "&SERVICENAME2=Email" +
                    "&SERVICEDEFREQ2=Required" +
                    "&INITFLOWTYPE=Signup" +
                    "&HDRIMG=<path to your logo (optional)>"
                    + "&METHOD=SetAuthFlowParam");

            client.executeMethod(method);

            Hashtable<String, String> respBodyParams =
                   getParamsFromBody(
                         method.getResponseBodyAsString());
            String token = respBodyParams.get("TOKEN");
            String ack = respBodyParams.get("ACK");
            if (token != null && ack != null &&
                ack.equals("Success")) {
                req.getSession().setAttribute(
                      "paypal-token", token);
                resp.sendRedirect(
                     "https://www.paypal.com/" +
                     "cgi-bin/webscr?cmd=" +
                     "_account-authenticate-login&token=" +
                     URLDecoder.decode(token));
                return;
            } else {
                req.getSession().setAttribute(
                     "paypal-token", null);
                // Redirect the user back to your home page
                // and display a login failure message.
                return;
            }
        } else if (req.getParameter("auth-resp").
            equals("success")) {
            if (req.getSession().
                getAttribute("paypal-token") != null) {
                HttpClient client = new HttpClient();
                GetMethod method = new GetMethod(
                        "https://api-3t.paypal.com/nvp?" +
                        "USER=<your API user name>" +
                        "&PWD=<your API password>" +
                        "&SIGNATURE=<your API signature>" +
                        "&VERSION=65%2e1" +
                        "&TOKEN="+req.getSession().
                             getAttribute("paypal-token") +
                        "&METHOD=GetAuthDetails");

                client.executeMethod(method);

                Hashtable<String, String> respBodyParams =
                    getParamsFromBody(
                        method.getResponseBodyAsString());

                String ack = respBodyParams.get("ACK");
                if (ack != null && ack.equals("Success")) {
                    String email = respBodyParams.
                                       get("EMAIL");
                    String firstName = respBodyParams.
                                       get("FIRSTNAME");
                    String lastName = respBodyParams.
                                       get("LASTNAME");

                    // Use this information (perhaps save it
                    // in session or in a database, etc. and
                    // then redirect the user to your
                    // successful login page
                    return;
                } else {
                    req.getSession().setAttribute(
                         "paypal-token", null);
                    // Redirect the user back to your
                    // home page and display a login failure
                    // message.
                    return;
                }
            } else {
                req.getSession().setAttribute(
                     "paypal-token", null);
                // Redirect the user back to your
                // home page and display a login
                // failure message.
                return;
            }
        } else {
            req.getSession().setAttribute(
                 "paypal-token", null);
            // Redirect the user back to your home page and
            // display a login failure message.
            return;
        }
    }

    private Hashtable<String, String>
        getParamsFromBody(String body) {
        StringTokenizer stTok =
             new StringTokenizer(body, "&");
        Hashtable<String, String> hash = 
             new Hashtable<String, String>();
        while (stTok.hasMoreElements()) {
            StringTokenizer stk = 
                new StringTokenizer(stTok.nextToken(), "=");
            hash.put(stk.nextToken(),
                URLDecoder.decode(stk.nextToken()));
        }
        return hash;
    }
}

This is how this Servlet Works:

When the visitor clicks on a link on your website, you invoke this servlet without any parameters. The servlet looks for “auth-resp” parameter in the request. Since it doesn’t find that, it assumes that this is a new login request. It then makes a HTTP call to PayPal to get authentication token. While calling that the servlet provides the return URL as itself (So PayPal will call this servlet in case of success or failure). Once a valid token is received, the servlet stores that token in the session variable called “paypal-token” and redirects the visitor to PayPal’s login page. PayPal then handles the user login and authentication and in case of successful authentication, PayPal calls the servlet with an “auth-resp“. This time when the servlet is called, it does find “auth-resp” in the request parameters and it looks out for the “Success” acknowledgement in the auth-resp. If it is successful, it then calls the Authentication Service to get first name, last name and email of the visitor.

Hope this helps! Enjoy! And feel free to shoot questions if any!

package com.ellipsis.dive.servlet;

import java.net.URLDecoder;
import java.net.URLEncoder;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Date;
import java.util.Hashtable;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.mail.EmailException;

import com.Ostermiller.util.StringTokenizer;
import com.ellipsis.dive.domain.UserDao;
import com.ellipsis.dive.model.User;
import com.ellipsis.dive.utils.EmailSender;

@SuppressWarnings(“serial”)
public class LoginWithPayPal extends HttpServlet {

private static Log log = LogFactory.getLog(LoginWithPayPal.class);

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}

@SuppressWarnings(“deprecation”)
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
if (req.getParameter(“auth-resp”) == null) {
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(“https://api-3t.paypal.com/nvp?” +
“USER=sales_api1.ellipsissolutions.com” +
“&PWD=SYABFV7DEQZUGNCA” +
“&SIGNATURE=AKxshOAvZdwPThAccajffzxpJ2P-AX9dlPIJmTKtsIUW2DnFgLYMOiB8″ +
“&VERSION=65%2e1″ +
“&RETURNURL=http://apps.ellipsissolutions.com/dive/loginwithpaypal.servlet?auth-resp=success” +
“&CANCELURL=http://apps.ellipsissolutions.com/dive/loginwithpaypal.servlet?auth-resp=cancel” +
“&LOGOUTURL=http://apps.ellipsissolutions.com/dive/loginwithpaypal.servlet?auth-resp=logout” +
“&SERVICENAME1=Name” +
“&SERVICEDEFREQ1=Required” +
“&SERVICENAME2=Email” +
“&SERVICEDEFREQ2=Required” +
“&INITFLOWTYPE=Signup” +
“&HDRIMG=http://www.ellipsissolutions.com/logo.jpg” +
“&METHOD=SetAuthFlowParam”);

client.executeMethod(method);

Hashtable<String, String> respBodyParams = getParamsFromBody(method.getResponseBodyAsString());
String token = respBodyParams.get(“TOKEN”);
String ack = respBodyParams.get(“ACK”);
if (token != null && ack != null && ack.equals(“Success”)) {
req.getSession().setAttribute(“paypal-token”, token);
resp.sendRedirect(“https://www.paypal.com/cgi-bin/webscr?cmd=_account-authenticate-login&token=”+URLDecoder.decode(token));
return;
} else {
req.getSession().setAttribute(“paypal-token”, null);
resp.sendRedirect(“/dive/default.jsp?login_msg=” + URLEncoder.encode(“Login Failure! Please Try Again Later.”));
return;
}
} else if (req.getParameter(“auth-resp”).equals(“success”)) {
if (req.getSession().getAttribute(“paypal-token”) != null) {
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(“https://api-3t.paypal.com/nvp?” +
“USER=sales_api1.ellipsissolutions.com” +
“&PWD=SYABFV7DEQZUGNCA” +
“&SIGNATURE=AKxshOAvZdwPThAccajffzxpJ2P-AX9dlPIJmTKtsIUW2DnFgLYMOiB8″ +
“&VERSION=65%2e1″ +
“&TOKEN=”+req.getSession().getAttribute(“paypal-token”) +
“&METHOD=GetAuthDetails”);

client.executeMethod(method);

Hashtable<String, String> respBodyParams = getParamsFromBody(method.getResponseBodyAsString());

String ack = respBodyParams.get(“ACK”);
if (ack != null && ack.equals(“Success”)) {
try {
String email = respBodyParams.get(“EMAIL”);
User u = UserDao.get(email);
if (u != null) {
u.setLastLoginTime(new Date());
UserDao.update(u);
req.getSession().setAttribute(“loginUser”, u);

if (req.getSession().getAttribute(“redirectUrl”) == null) {
req.getSession().setAttribute(“paypal-token”, null);
resp.sendRedirect(“/dive/login/manage.jsp”);
} else {
req.getSession().setAttribute(“paypal-token”, null);
resp.sendRedirect((String)req.getSession().getAttribute(“redirectUrl”));
req.getSession().removeAttribute(“redirectUrl”);
}
return;
} else {
String firstName = respBodyParams.get(“FIRSTNAME”);
String lastName = respBodyParams.get(“LASTNAME”);

u = new User();
u.setEmail(email);
u.setFirstName(firstName);
u.setLastName(lastName);
Date today = new Date();
u.setRegistrationDate(today);
u.setLastLoginTime(today);
u.setPerLeadDiveFee(0);
u.setPerDupLeadDiveFee(0);
u.setAccountBalance(0);
u.setSendWeeklyDigest(true);

try {
UserDao.save(u);

try {
EmailSender.sendMail(false, EmailSender.SENDER_TECHSUPPORT, EmailSender.SENDER_SALES,
“[ellipsis dive!] New User Registration”,
“<html><body>” +
“Name: ” + u.getFirstName() + ” ” + u.getLastName() + “<br/>” +
“Email: ” + u.getEmail() + “<br/>” +
“</body></html>”);
} catch (EmailException e) {
e.printStackTrace();
}

u = UserDao.get(u.getEmail());
req.getSession().setAttribute(“loginUser”, u);
resp.sendRedirect(“/dive/login/manage.jsp”);
} catch (SQLException e) {
req.getSession().setAttribute(“paypal-token”, null);
log.error(e.getMessage());
req.getSession().setAttribute(“exception”, e);
resp.sendRedirect(“/dive/error.jsp”);
}
return;
}
} catch (SQLException e) {
req.getSession().setAttribute(“paypal-token”, null);
log.error(e.getMessage());
req.getSession().setAttribute(“exception”, e);
resp.sendRedirect(“/dive/error.jsp”);
return;
}
} else {
req.getSession().setAttribute(“paypal-token”, null);
resp.sendRedirect(“/dive/default.jsp?login_msg=” + URLEncoder.encode(“Login Failure! Please Try Again Later.”));
return;
}
} else {
req.getSession().setAttribute(“paypal-token”, null);
resp.sendRedirect(“/dive/default.jsp?login_msg=” + URLEncoder.encode(“Login Failure! Please Try Again Later.”));
return;
}
} else {
req.getSession().setAttribute(“paypal-token”, null);
resp.sendRedirect(“/dive/default.jsp”);
return;
}
}

@SuppressWarnings(“deprecation”)
private Hashtable<String, String> getParamsFromBody(String body) {
StringTokenizer stTok = new StringTokenizer(body, “&”);
Hashtable<String, String> hash = new Hashtable<String, String>();
while (stTok.hasMoreElements()) {
StringTokenizer stk = new StringTokenizer(stTok.nextToken(), “=”);
hash.put(stk.nextToken(), URLDecoder.decode(stk.nextToken()));
}
return hash;
}
}


info@ellipsissolutions.com
ellipsis solultions LLC
http://www.ellipsissolutions.com
PO Box 2462, Union City, CA 94587

Toll Free:

+1 (855) ELLIPSIS
+1 (855) 355-4774

FAX:

+1 (855) 355-4774

**************************************************************************
ellipsis solutions is committed to protecting your privacy and asks you not to send sensitive
account information through e-mail. If you are not an ellipsis solutions customer and believe
you received this message in error, please notify us by responding to this email.
**************************************************************************


August 5, 2011 at 9:00 am Comments (0)

The Blunders of Bid Based Context Sensitive Advertising

What do you see in the picture above? The article is about “Excess Skin After Weight Loss. The Ad on the header is from WeightWatchers. While the Ad on the side if from Febreze! While WeightWatchers Ad still makes sense to me, I can’t think of any reason why Febreze would want to advertise on this page!

In this article I’d like to take this above picture as an example and show how context sensitive advertising is great but when mixed with bid based advertising, it can go a little ugly.

Keyword Ranking and Keyword Bidding in Context Sensitive Advertising

Context Sensitive Advertising is heavily based on the the relevance of keywords associated with the Ad and the content on the page where the Ad is being shown. There are lot of algorithms to make this happen. But in essence, the logic is pretty much based on coming up with some way to rank the keywords associated with the Ad against the content on the page. So for example the keywords of a given Ad might rank higher on one page and lower on some other page.

But what happens when there are two advertisers with almost similar products and almost similar keywords? That’s where things become hard. The only way to decide whose Ad should show up is based on who would be willing to pay more for the Ad! And that’s when bidding comes handy.

Is Bidding the only justified method to resolve whose Ad should show up?

In my opinion, the answer is No. To me bid based advertising looks like a “short cut hack” to the actual problem. Instead of the system deciding which Ad should show up based on who is paying more, it should really be left to the content provider as to whose Ad should show up. Of course, the content provider might choose to pick the highest bidder, but in my experience most content providers are very protective about their content and what kind of Ad shows up on their blog or website. And so it would make more sense for the content provider to pick the right Ad.

How Content Provider can be given more control in Context Sensitive Advertising?

Unfortunately, there’s no easy method available right now. One method that comes to my mind is perhaps an open and transparent network of merchants and publishers who come together to collaborate with each other for the purpose of advertising.


August 3, 2011 at 3:40 pm Comments (0)

Smarketing – The Perfect Blend Of Sales And Marketing

--
I wish it were as easy as taking the best books in sales and
marketing, and just simply blend them together to come up
with something that would really get me the results.
--

What Smarketing Really Is?

Smarketing simply means a way to align your sales and marketing efforts in order to make them more effective. This term is relatively new in the Industry. So new that I thought I came up with it while writing this blog! Then I started looking up on the Internet and found that the guys at Hubspot say that it was actually coined by Dan Tyre in around 2007. However I couldn't find much material from Dan on this topic. Perhaps he shared the thoughts with Hubspot folks at some meetup. So I followed up with Dan himself and got this information from him: "Mike Volpe and I coined the term in 2007 to explain how sales & marketing departments are really archiac holdovers from an earlier age and how HubSpot would be different." Thank You Dan!

In a nutshell, this is what I think it is: Alignment of sales and marketing efforts in order to make them more effective. So let's carry on with that.

When Do You Know You Need Smarketing?

Well the answer really is that you need it almost every time. But still, let's take a few examples.

Let's take some real life examples. So you came up with a great email marketing campaign. You got the best template out there and you got the best content and images for your email campaign. But you forgot to put the "sign up" button within the email. Instead you asked users to go to some page and click there to sign up. Guess what, you just ran a perfect marketing campaign but then left the sales folks at the mercy of only those few who would go an extra mile reading all the steps to sign up in your email.

Let's take another real life example. Your marketing team came did a great job attracting lot of people at your booth at the conference that happened last week. But they did a terrible job filtering the leads they captured and now a list of 20,000 contacts is left over at the mercy of sales folks who end up taking a month following up with all those leads. As a result you end up loosing many potential buyers.

What's the learning in both cases? Sales and Marketing teams can't work in solace. They have to work in perfect coherence to be able to generate amazing results.

OK. I Get The Point. How Do I Start?

1. Break the walls between your marketing and sales team. Have them work together. Have marketing plans reviewed by sales and have sales targets reviewed by marketing. It sounds a lot of work and perhaps something that might slow down your progress; but the reality is that these necessary evils are actually going to help you come up with that perfect blend of sales and marketing that works for you. You won't know it until you try!

2. Use technology that simplifies communication and helps easy blending of both the teams in every aspect related to lead generation, lead nurture to customer relationships.

3. Create a culture of respect for each other. Often marketing is considered as coming up with Banner Ads and Catchy Lines while sales is frowned upon as the dirty job of cold calling. Break that culture and make it open enough for both teams to realize the value one provides to the other.

Is smarketing for you? What do you think?

, ,
July 31, 2011 at 2:23 am Comments (0)

About A Marketing Plan That Didn’t Make Any Sense

OK so you have put together a brilliant team of techie folks who have huddled together and turned your great idea into reality. But when it comes to going out there and selling it, you realize how hard it is to make even a single sale. You think that the idea is so cool that it should sell all by itself! As every day passes by you start to realize how difficult it is to sell even the most brilliant idea; and you start envying those crappy products that make no sense to you but are supposedly selling just great!

That’s when you sit back and think what’s missing. Yes if you have been there, or are there, you know what I am talking about. I am talking about “The Marketing Plan”. OK, so now you know what’s missing. What have you done to solve this problem? Perhaps start coming up with a marketing plan; talk with few marketing agencies in your area? Or check out what has worked in the past.

But here’s the interesting problem. A marketing plan that worked in the past for some company that’s doing something similar to what you are doing, might not, and most probably will not work for you! What will make you crazy is the outrageous money you are going to spend in coming up with “that perfect marketing plan”; and to your surprise it won’t give the kind of results you were looking for! As long as your marketing efforts don’t recoil back and hit your image (God that would be a mess), you should take it positively and learn from it.

So how do you solve this problem? Well, the real answer to be frank is that you don’t solve it! You just don’t take it as a problem and don’t try to solve it! In other words, think outside the box. Think about who is going to use your product and how. Remember that story of a boy who, when asked about the benefits of a news paper, told that you can make a boat, a hat and a frog out of it?

A marketing plan doesn’t have to make sense to start with. Many great marketing plans evolve just like a great solution does. A great marketing plan is one that changes with time and morphs itself into what clings on in people’s minds. It might not make sense to start with, but eventually it will.

That doesn’t mean that if your plan it completely outrageous and bold it is going to be a definite hit! What it means is that dare to think outside the box. And try it out on a small scale to test the waters so to say. Don’t throw your current idea down the drain. A great marketing plan always morphs. If you completely change it you are throwing out a message “I messed up” or even worst “I didn’t know what the heck I was doing”. That’s one message you shouldn’t be conveying. A morphing message would convey “Hey what I wanted to say means this too!”.

Have you tried to go out of the box and came up with a marketing plan that didn’t make sense but then eventually took off and everyone said “I kind of knew it’s going to rock the first time you told me…”.

Happy Marketing!

, ,
July 28, 2011 at 4:54 pm Comments (0)

You “Follow” Them On Twitter. But Do You “Believe” In Them?

After three attempts, and self learning, I seemed to have found the Twitter Recipe that works for me. And I am going to share some of it with you today. I could have shared it all but then, to be frank, most of it is philosophy; and will perhaps take lot of time and wine sessions to fully throw over the table.

Twitter has definitely proven to be a true viral news platform. The 140 characters limitation enforces the originator of the news to be precise and concise. Sharing the information is as simple as a “one click” re-tweet! I don’t think it can get simpler than that! Anyways; This article is not about what Twitter can and cannot do. It’s about the people who use twitter. It’s about the people like you and me who either follow or have followers and are using Twitter mainly as a channel to spread and share knowledge.

One of the main things that I found on Twitter is that many people just blindly follow. Heck, many “people” on Twitter aren’t even “real people”! Many are just apps and bots that are constantly sniffing for material that their “masters” have programmed them for! When you see 10,000 followers in your Twitter profile and realize that 8000 of them are just apps and bots, believe me the “social” angle just goes down the drain.

So I think what matters on Twitter is not how many people are following you, but rather how many people are you following! When you follow someone or some feed, do you follow it because the material amuses you? gives you peace and harmony? makes you laugh? makes you think? I take Twitter just like any other channel of information. Just like today on my TV I have 100s of channels that I am subscribed to and I watch based on what I want to; I think the same philosophy goes for Twitter.

That brings the discussion to the point that when you follow someone on Twitter, are you really following them to increase your user base hoping that bots and other random people would see that and start following you? Or are you following them because you genuinely like what they say? It might not be the matter of whether or not you actually truly “believe” in what they say; However the question is really about the real reason behind your action of following other people on Twitter.

I believe that once you carefully start looking at it and selectively pick the people and feeds that you believe to some extent and think are useful sources of information, Twitter will be more beneficial for you. Twitter is not about increasing number of followers; It’s about enjoying the information that you love and believe in, and sharing that information with others who you think believe in you and love reading your material!

Or is it just the Friday / Weekend Fever kicking in me? What do you think?

Happy Friday!
GT

, , , ,
July 22, 2011 at 1:40 pm Comments (0)

Business Tip: Competition Is Your Friend

Competition is something that’s considered as “a consumer’s friend and a business’s foe”. Is that really true? It might be true in some cases. However in most cases, my belief is that it’s not true. And here’s my justification:

Competition in business is something  that many business owners are afraid of. After all which businessman wouldn’t want to live in the World where only he/she is the service provider? Wouldn’t that be great? You will own the whole market without the fear of loosing any share! However, if you look at it closely, that’s not really true! In fact competition is something that every business should welcome and consider it as a friend! Say for example Google practically owns the Search Engine Market. Microsoft, although getting sluggish, still practically owns the Operating System Market. And So Forth. How did these companies become as big as they are now? The answer is by carefully looking at the competition and making sure that they remain above it! These companies have to constantly work hard to make sure that they remain at the top.

Competition Helps You Improve Your Product

It’s hard to get feedback from customers regarding how you could improve your current product offering. If customers don’t like your product, most of the times they just leave without providing any feedback. Very few actually give you a hint of where you should be focusing. The best way to solve this problem is to look at your competition. What are the features that your product is missing? What’s that people are finding attractive in your competing product? How can you match that or come up with an even better feature? By carefully analyzing your competition, you can find answers to these important questions.

Competition Helps You Easily Define Your Goals

One of the important aspects of running a business is being able to clearly define short term and long term goals. Having a goal like “becoming market leader in clothing industry” or “gaining 500 million customers” are too abstract and hence difficult to accomplish. Looking at the competition will help you clearly define your goals. For example, if you are in the Pizza Delivery Business and your Competition Delivers Pizzas in 15 minutes, your goal can be “Delivering Pizzas in less than 15 minutes”. Competition helps you identify where your product or service lacks and then helps you define goals in order to fix those gaps.

Competition Helps You Be True To Your Customers and Hence Build Trust

One of the best ways to measure your success is by comparing where you stand against your competitors. If you won’t do this, your customers will! So it’s always a good idea to compare your self against your competition and see where you stand. For example, on our lead generation product – ellipsis dive! – we have created a feature comparison page that gives a clear and measurable matrix of our product offering against our competition. When doing a comparison against the competition there is no harm in showing where you lack. Often there are cases where the customer is not really looking for “those extra features” that your competitor has. By showing a true comparison you will not only build trust, it will help setting the right expectations with your customers regarding what you have to offer.

So I believe competition has a very big role to play in the growth of any business. What do you think?


July 20, 2011 at 11:17 am Comments (0)

Where and When Do Sales Presentations Fail

Sales Presentations are an inevitable and necessary evil. They become even more important in case of complex sales.You spend hours on making that “one great sales presentation”. However how many times have you found yourself into a situation where you think that there’s something going wrong? You are not able to convey the right message, the audience is not able to visualize what you are saying; or perhaps you left some key points in your presentation that pretty much broke the deal. I don’t think this after reading this article you won’t make such mistakes ever; However I hope that you will make them less frequently.

Out of the many reasons of where and when a sales presentation might fail, I think these three are the most important ones. If you fail to pay attention to these three, you are probably going to fall into hard luck trying to make that deal happen.

1. Sales Process is really a Two Way Street

People have gone into the habit of coming up with “trailer” based presentation. Like TV Ads. They are good to be hosted on the website. But when it comes to giving a face to face presentation, they are probably not the best option to go with. The idea of having a face to face presentation is to meet the client and understand the requirement; The idea is to pretty much “cut through the chase” and listen to the requirements. And the presentation should reflect the same intention. The more interactive you can make the session, the more you’ll be able to understand what’s needed and quickly conclude to next steps.

It’s a good idea to stick to the plan and the overall presentation, but moving here or there a bit is not bad at all. Especially when your audience is showing interest and is engaging in a discussion, it makes perfect sense to keep the synergy going even if it means jumping on the white board and discussing what is important for the customer.

2. There is no “one size fits all” Solution – Customization is the King

I do agree that there are those certain slides and material that you can always re-use. But to be able to really deliver a great sales presentation, I think it should be unique. Every requirement is different and every client loves some level of personal touch. If you have done something similar and want to put that as a reference, that’s definitely a good idea, however keeping the “proposed solution” in line with what the client is asking for is the best strategy. The more “cookie cutter solutions” you fill your presentation with, the more you are calling out for disaster!

3. Respect Every-one’s Time and Set Right Expectations

Last but not the least and I have seen this happening so many times. Sales meetings going out of control and extending beyond the designated duration. Best way to deal with this is to send out agenda and set time slots for each activity (such as introduction, Q&A, etc.). Get a buy in from everyone regarding what makes sense. It’s sometimes better to share the material you are going to present before hand. That helps a lot in getting quick feedback before hand and make changes based on what would make sense for the customers.

In the end, I think sales presentations fail when they forget to address the needs of the customer and instead blindly drop a solution. What do you think?


July 19, 2011 at 3:17 pm Comments (0)

Should Online Advertising Be More Transparent?

Online Advertising has become part of our lives. I say “our” by pointing to the people like you and me who make use of computer and the Internet for living. And so, we like it or not, we have to deal with the daily spams, the flashing pop ups, the ridiculous Google Ads and the many other forms of Ads that don’t stop to amaze me every now and then. Every time I think I have seen it all, a yet another form of online advertising amazes me! In this topic I wanted to cover how transparent these online advertising programs are.

What is Transparency in Online Advertising?

First let’s have a common definition about this so that there are no issues later on. To me, “transparency” in online advertising is a three fold matter. Because there are really three parties involved in any form of online advertising (well for that matter in any form of advertising).

a. The merchant – who wants to advertise a product or a service

The online advertising system should be transparent for the merchant. It should show where the merchant’s Ad is being displayed and who is viewing it etc. The system should be transparent for the merchant in all respects possible. After all the merchant is the one who is paying for all the advertising effort to start with.

b. The publisher – who displays the merchant’s Ad

The online advertising system should be transparent for the publisher too. It should show not only show what the publisher is earning from the merchant, but also what kind of visitors are clicking on the Ads. It should provide a mechanism for the publisher to negotiate better rates and advertising schedules for the benefit of both parties. It should also be flexible and simple for the publisher to get the maximum out of his/her online real estate (i.e. website, blog, forum, etc.).

c. The website visitor (last but not the least)

Last but not the least, the online advertising system should be transparent to the visitor. It should clearly help the visitor distinguish between a paid advertisement and a legitimate article or information. It should also be as non-intrusive as possible so that the visitor’s attention is not diverted from the actual task he/she is doing.

Now let’s look at some of the most successful online advertising platforms and put them to our “transparency” test.

Google AdWords + AdSense = Great Experience but Not Transparent Enough

The Google AdWords product creates a “near transparent” experience for the merchants by providing them as much visitor analytics as possible. However it’s no where close when it comes to providing information about who is displaying the Ad, etc. It doesn’t allow the merchant to directly talk with the publishers and build a relationship that w0uld benefit both parties. Well, in some sense it does provide some clarity by showing from which domain the hits are coming, but the payments and the contractual obligations are still pretty much controlled by Google.

Google AdSense is a great product for publishers who want to monetize from their online real estate by advertising. However, once again, Google does a terrible job in keeping the communication channel between the merchant and the publisher. To some extent, it seems that Google has done this deliberately so that they can secure the major portion of the pie (perhaps that’s how Google makes it’s billions in every quarter! – shame on the merchants and publishers who refuse to use Google even after being so opaque in providing information that both the parties deserve).

Talking about visitors, Google has done a decent job in showing the “Paid Ad” caption at most places. But that’s all that the visitors get. Google’s policies are still pretty much open and things like not displaying pop up Ads, etc. is totally out of Google’s hands. I don’t think Google is to blame in this case, but I do think that given the infrastructure and trust (and not to mention the least – the profit margins) that Google has built, if they can’t do this who else can!

Bing and Others

I feel sad to put “The Great Bing” (pun intended) along with all other search engines who are in the race against Google. To be frank, almost all of them suck. I have used five of them and I know why Google has been able to rule the online advertising market. The answer is very simple actually. And it is that others suck so big time! It’s unbelievable! Companies like Microsoft and Yahoo who already had the resources couldn’t come close! Not even now! And that’s just terrible to say the least.

So where are we headed? Will Online Advertising Ever Be Transparent?

To be frank, I am not sure. I think we at ellipsis AdNet, are trying to keep it as transparent as possible. Of course due to that we are not making that much money; hell, we are not making anything! But then isn’t “advertising” about letting new products grow? Isn’t it about sharing new ideas with the public? Or is it always about hiding the truth? And trying to fool the consumers?

You Decide! Do you want to join hands with us? Or still keep on giving the “middle man” your fair share of the pie?


July 18, 2011 at 9:00 am Comments (0)

Google AdSense v/s Facebook Ads Promotion

If you own a blog or a website and are providing some space for advertisements you probably know Google AdSense very well (or at least to some extent). Google AdSense started creeping up into Facebook pages back in 2008. In around 2009 (or perhaps 2010) Facebook took several actions to stop that so that they could retain the “portion of the pie”. The end result was “Facebook Ads Promotion” – A “affiliate marketing” type solution from major affiliate marketing platforms Azoogle Ads and Neverblue Ads. Using these platforms users are able to advertise third party products on their Facebook owned pages (walls, apps, etc.).

It’s hard to compare both the advertising platforms because Google truly focuses on the “raw online traffic”, and Facebook is really all about “social traffic”. However, since the end goal of both the solutions is pretty much the same, I have tried here to compare both these models and see which model would make more sense where.

Google AdSense and Facebook Ads Promotion are Fundamentally Different Methods of Monetizing From Your Online Real Estate

Google AdSense makes the whole experience of monetizing from a website pretty much transparent for the user. You simply select the kind of area you’d like to use and throw in a javascript code where ever you want Google to do it’s magic and display the Ads and you are all set. From there on Google AdSense takes over and shows context sensitive Ads based on the content on the page. On the other hand, if you want to monetize from your Facebook pages, you’ll have to open a publisher account at Azoogle or Neverblue or any of the Facebook preferred affiliate partners. You then select the Ads you’d want to display. It’s a bit more involving and gives you a more of “simplified version” of “commission junction” or “click bank”.

Which Method Works Better Depends on Who You Are!

Which method works better really depends on You! If you have an established website with focused content and lot of visitors, you are probably using AdSense already and are reaping its benefits. If you are relatively new in the game and got introduced to the online world during the 2007-2008 time period (perhaps you just ventured into your first online business), and perhaps you focused more on building your footprint on social networks like Facebook, twitter, etc. then Facebook Ads Promotion might work great for you!

It’s not just about the timing. If your content is more interactive and social and you are very active on Facebook, you’d want to spend time to make that monetize rather than spending time and effort to make a website more popular, indexed, etc.

Another difference that I can think of is the whole “SEO planning” that you have to do in the “traditional” website development and marketing paradigm. With Facebook, it’s pretty much back to the “word of mouth” approach where in you try to get as many fans as possible. And the story doesn’t end just there. You need to have content and discussions that keep your wall live. Since people don’t go to Facebook to “search” things, the whole “SEO” thing doesn’t make much of a sense. That’s a big plus for people who are afraid of SEO and know how to do “word of mouth” better.

That’s all about for today. Was this article useful? Please don’t forget to share it with others!

Happy Friday!

GT


July 15, 2011 at 2:44 pm Comments (0)

Measuring Effectiveness of Article Marketing

Article Marketing is one of the proven techniques of spreading the word about a product or a service. There are so many variants of this concept that are available that it can easily span into a full book. You can have someone write articles about a product, write reviews, feature comparisons and what not. At the end of the day, the technique is pretty much simple. You or someone writes articles about your product or service. Articles are circulated across to target readers. But wait. What about “effectiveness”?

What is “effectiveness” in Article Marketing?

The answer to this question pretty much differentiates the “pro” marketing managers from the “not so pro” ones. Everyone can run an article marketing campaign. But then how many campaigns actually help you track the effectiveness of your article marketing effort? For that matter how do you even measure it in the article marketing scenario? Here’s what I think can be measured:

A. How much traffic are the articles bringing to you?

You can measure the traffic coming from articles by checking your website analytics reports. But then what about the articles that were distributed in print format during a conferences? What about those pdf’s that you emailed your target audience? To be able to find the true effectiveness of any article marketing campaign, you need to take into account all the channels that you will be using to spread your articles and a closed loop mechanism that allows you to track exactly how much traffic you are able to generate from your article.

B. How much is it costing you to run the campaign?

Good article writing can cost you some good amount of money. Be it in-house, or out sourced, the articles you write need to be quantified in terms of how much is it costing you either on weekly or daily basis or on per article basis.

C. Is it all worth it?

Once you can clearly identify how much traffic your articles are generating and how much is it costing to write articles you can find the “true cost per click” that’s coming from the article you just spread to your target audience.

This simple case study shows how companies are already doing this using ellipsis AdNet: http://apps.ellipsissolutions.com/adnet/article-marketing.pdf

Comments and Thoughts are Welcome!

,
July 14, 2011 at 12:53 pm Comments (0)

« Older PostsNewer Posts »