Scaling up Search at Sephora
Marketing for an eCommerce company starts with Search. In a company like Sephora which is at the cutting edge of an industry dominated by trends, people are constantly searching for newer and more niche keywords relating to makeup/skincare/haircare and somehow we need to constantly keep up in a competitive search landscape and show super relevant ads to every potentially high converting search term.
Its easier said than done.. At Sephora we have thousands of SKUs. Now add that to the fact that we have hundreds of thousands of category keywords and millions of overall combinations, it is next to impossible for even a rockstar performance marketing team to get this done without some sort of consistent automation.
When you break it down, expanding Adwords Keyword Search is fundamentally about three things:
- Mine every single relevant search terms in your account with a certain impression and CTR threshold
- Pull it into separate adgroups and create relevant ads for it
- Repeat as frequently as possible till the end of time
Except the relevant ads part, on first glance, it seems pretty well set up for automation. However, as my team pointed out, when you dig a bit deeper, you find that there are a couple of complexities that need human judgement:
- Is a search term distinct enough to warrant a separate ad group
- Does the search term warrant creating a new campaign or an adgroup in an existing campaign
- Finally ofcourse writing an inventive/relevant ad copy
So a couple of colleagues (Thao Pham and Vikas Gupta) and I started working on a compromise process flow with Automation and human intervention
This process for us hit the balance of the right amount of automation with the final control lying with the performance marketing team.
The Google Sheet
The Google sheet for this process is a mixture of automated (Columns 1–12) and manually selected/inputted columns (13–19)
- Basically the first 12 columns are built out by a simple JS (something like this) to automate the keywords with the requisite impression threshold that need to be along with their corresponding adgroup/campaign/best performing ad copy
- Column 13 is what is entered by the performance marketer which defines if the KW needs to be picked up and added to Adwords. Column 14 is just the label that will be applied(its optional and just for reference)
- Finally columns 15 to 18 are formulated columns where based on the standardized naming convention, the performance marketer can select the right value from the drop downs in 15 to 18, resulting in the value in column 19. Column 19 is the destination campaign (existing or new) where the new keyword/new adgroup is going to sit
The Code
The code is fairly simple. It checks for the flag in Column 13, and if the flag is Go, it checks for column 19 to identify the destination campaign and either creates the new adgroup/keyword/ad with label at an adgroup level in the new campaign (if the campaign in Column 19 is new) or does the same in an existing campaign if the campaign in Column 19 exists (I have commented in the code at what I judged to be the pivotal parts so hopefully it’s readable to someone with basic JS/AdWords entities knowledge :))
In Summary
With this process, we at Sephora try and ensure:
- Our search campaigns keep up pace with our fast paced industry and our super trendy customers (even if we performance marketers arent half as trendy as them!)
- We try and maximize long tail keywords search which by definition necessitates automation (hello high CR!)
- And Finally, we are able to scale up keyword search and not just rely on Shopping search ads (Dominate SERP real estate!)