SEM and SEO https://www.digett.com/ en How to Solve Your Customer's Problems and Make Money Doing It https://www.digett.com/insights/how-solve-your-customers-problems-and-make-money-doing-it <span>How to Solve Your Customer&#039;s Problems and Make Money Doing It</span> <div class="field field--name-field-teaser-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/blog_card/public/dog-bath.png?itok=tuPt7eQD" width="800" height="533" alt="" typeof="foaf:Image" /> </div> <span><span lang="" about="/about/emma-ruehl" typeof="schema:Person" property="schema:name" datatype="">Emma Ruehl</span></span> <span>Mon, 07/31/2017 - 2:51pm</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>You’ve invested the time and effort to craft a solid sales message and marketing campaign. The offer is great, the price is right, and people should be flocking in your doors and email inboxes to purchase. You’ve even paid a company to help get your website to rank in the top five of Google’s search results page, and your site’s traffic has soared as a result. But somehow, the sales aren’t rolling in.</p> <p>Turns out, ranking #1 in Google doesn’t directly get you sales. Helping people does.</p> <h2>Back to the Drawing Board</h2> <p>At the heart of every potential sale is a person with a problem. Is your business the right solution to the problem? Does your prospect feel understood, cared for, and compelled to partner with you to work towards a solution? Before you sell, it’s imperative that you understand the person and the problem. Otherwise, you’re marketing blindly. Here’s where to start.</p> <h2>1. Stop Trying to Think For Your Customer</h2> <p>Instead of developing products and messaging around inferences and feelings, ask the consumer directly. Start with a simple survey asking about their pain points (there are a ton of great chat bots and survey tools out there right now), interview people as they use your site to uncover frustrations, and read through your reviews and testimonials.</p> <p><img alt="Olark" data-entity-type="file" data-entity-uuid="11cdd749-cd79-4daa-b2c1-95497c173d4a" src="/sites/default/files/inline-images/olark.png" /></p> <p><em>Photo via <a href="https://www.olark.com">Olark</a>.</em></p> <p>Uncover why your prospect went looking for a solution and other approaches they’ve tried. Why have your customers chosen you? What almost stopped them from choosing you? Before you prescribe the solution, flush out the problem, and observe it from multiple angles. It’s your goal, as the Master of the Solution, to better understand the problem than your prospects and customers.</p> <h2>2. Build Content that Resonates with Solution-Seekers</h2> <p>Your prospects and customers don’t want content shoved down their throat. They want to encounter messaging that speaks to them and their problems. Have a conversation that brings them to the conclusion that you are the right fit and worth their dollars.</p> <p><img alt="Hubspot messaging" data-entity-type="file" data-entity-uuid="29f1e97d-f2f2-42fd-b07c-3e2ee0833daa" src="/sites/default/files/inline-images/hubspot-messaging.png" /></p> <p><em>Screenshot via <a href="https://www.hubspot.com/products/crm">Hubspot</a></em></p> <p>Much of the best content comes directly from the mouths of your customers, which is another reason why surveys and interviews are critical. There is no better way to help someone feel understood than to translate their very own thoughts and feelings into helpful messaging. Did a prospect express frustration around cost? Include messaging about value, or offer a free trial. Even better: when you know their pain points, include a list of features that directly addresses those pain points.</p> <h2>3. Rid Design of Disruption and Trend</h2> <p>So many brands are latched on the heels of the latest design trends. Heard of parallax? Ghost buttons? Hero rotator images? Perhaps you’re not familiar with the terminology, but no doubt you and your competitors have toyed with one or all of these design trends.</p> <p><img alt="abc page design" data-entity-type="file" data-entity-uuid="fa64fda9-881b-4203-915e-41adb0a1a16a" src="/sites/default/files/inline-images/abc.png" /></p> <p><em>Look familiar? Screenshot via <a href="http://abc.go.com/">ABC</a>.</em></p> <p>It’s rare that businesses choose design elements based on actual research; typically, design is dictated by a template you purchased, or someone on your sales team saw an effect on a competitor’s site and thought it would be “cool” to implement on yours. If everyone else is doing it, you should be too, right?</p> <p>The problem with trend is that it’s often broken from its original context and applied to a million different projects, despite relevance and suitability. When design dictates development and content, you end up with a pretty portfolio site that is irrelevant to your target audience. And all your money goes to making a piece of art that no one buys.</p> <p>The best design adds to, and doesn’t detract from, user experience. It’s a supporting player that should be the last thing people notice. It should help logically guide users through your site architecture, keeping interest up and building trust in your brand.</p> <p> </p> <p><img alt="ted home page" data-entity-type="file" data-entity-uuid="19e54cf3-d769-48e9-b869-c779dae02392" src="/sites/default/files/inline-images/ted.png" /></p> <p><em>Easy to digest and navigate site via <a href="https://www.ted.com/">Ted</a>.</em></p> <p>At the end of the day, your content is the star of the show. It is what resonates with your customers at their core, communicating that you can solve their problem and solidifying the connection that supports a lasting, mutually-beneficial relationship.</p> <h2>4. Invest In an SEO Strategy that Seeks to First Answer a Query</h2> <p>At the heart of SEO is simply being the best answer to a particular query; it’s inherently about solving problems. No doubt, you’ve searched yourself for product or service pricing, clicked on one of the top search results that you expected to contain pricing information, and much to your disappointment found no pricing but a barrage of CTA popups and contact forms.</p> <p><img alt="google search result for marketo" data-entity-type="file" data-entity-uuid="6a0ac8e1-f816-4222-b37a-e94da5869b21" src="/sites/default/files/inline-images/serp-marketo.png" /></p> <p><em>Screenshot via <a href="https://www.google.com/">Google</a></em></p> <p>What happens when people don’t find what they’re looking for? They’ll exit your site. They’ll delete your email. They’ll go somewhere else because there will always be someone else who is actually solving their problem.</p> <p>Be a smart marketer and lead your team to new thinking. If your business has been stuck in a rut of one-sided communication and has no idea what your customers and prospects actually want, be the voice for them. Seek to understand pain points and solve the problem; don’t add to a million other voices trying to tell consumers what they want. If you put in the effort to understand your prospects, they will reward you.</p> </div> <section> <h2>LEAVE A COMMENT</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1239&amp;2=comment_no_subject&amp;3=comment_no_subject" token="TpZmYIO40-cRfjR68o2mYuTI8y92woQCGD6YSkmcNV8"></drupal-render-placeholder> </section> <div class="sharethis-wrapper"><span st_url="https://www.digett.com/insights/how-solve-your-customers-problems-and-make-money-doing-it" st_title="How to Solve Your Customer&#039;s Problems and Make Money Doing It" class="st_facebook_large" displayText="facebook"></span> <span st_url="https://www.digett.com/insights/how-solve-your-customers-problems-and-make-money-doing-it" st_title="How to Solve Your Customer&#039;s Problems and Make Money Doing It" class="st_linkedin_large" displayText="linkedin"></span> <span st_url="https://www.digett.com/insights/how-solve-your-customers-problems-and-make-money-doing-it" st_title="How to Solve Your Customer&#039;s Problems and Make Money Doing It" class="st_twitter_large" displayText="twitter"></span> <span st_url="https://www.digett.com/insights/how-solve-your-customers-problems-and-make-money-doing-it" st_title="How to Solve Your Customer&#039;s Problems and Make Money Doing It" class="st_email_large" displayText="email"></span> </div> Mon, 31 Jul 2017 19:51:54 +0000 Emma Ruehl 1239 at https://www.digett.com If Your Google Analytics Isn’t Customized, You’re Doing it Wrong https://www.digett.com/insights/if-your-google-analytics-isnt-customized-youre-doing-it-wrong <span>If Your Google Analytics Isn’t Customized, You’re Doing it Wrong</span> <div class="field field--name-field-teaser-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/blog_card/public/filefield_images/field_teaser_image/googleanalyticsstrong.png?itok=27jMZoLi" width="275" height="183" alt="Stronger google analytics" title="stronger google analytics" typeof="foaf:Image" /> </div> <span><span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span></span> <span>Wed, 06/11/2014 - 8:36am</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Google Analytics is a wonderful tool that offers a plethora of data and undoubtedly the most ubiquitous web analytics tool out there. With all of that data, it makes it incredibly easy to lose the signal through the noise — the less important metrics can easily overshadow your actionable insights. If you aren’t using custom segments or reports, you’re losing the signal.</p> <!--break--><h2> Remember why you have Google Analytics</h2> <p>First and foremost, go back to your roots — remember why you use Google Analytics. It’s to gain actionable insight, measure results, and provide a foundation for future strategies.</p> <p>Once upon a time, measuring a website’s success in terms of traffic was sufficient. But with mobile exploding and quickly <a href="http://www.smartinsights.com/mobile-marketing/mobile-marketing-analytics/mobile-marketing-statistics/">taking over desktop</a> and the data available to measure conversions, just looking at traffic isn’t enough.</p> <p>Google Analytics offers a platform full of data that allows you to be as creative as you can and view your data in endless amounts of ways. I look at it as a blank canvas waiting for a picture to be painted.</p> <h2> Aggregate data is irrelevant: Advanced segments</h2> <p>Looking for real insights can be the hardest part of an analyst’s job. You have to ask the right questions, look at the right data, and test your hypotheses. Using advanced segments makes this much easier to do.</p> <p><a href="https://support.google.com/analytics/answer/3123951?hl=en&amp;ref_topic=3123779">Advanced segments</a> do exactly as the same would suggest: segment your data. However you could possibly image.</p> <p>For example, you could have a segment with:</p> <ul> <li> Mobile users on iOS devices</li> <li> Have visited more than three times in your set time period</li> <li> Between the ages of 25 and 34</li> </ul> <p>If you’re running paid search campaigns, this is incredibly valuable if you’re testing your ad text and catering to a certain demographic. You can look at things like conversion rates, bounce rate, and other user engagement metrics.</p> <p>Would you be able to gain this insight without segmenting? Absolutely not.</p> <p>Why stop there? Because you can have more than one advanced segment filtering your data at one time, you can compare how different segments compare to each other. This is wonderful when looking at conversion data, because you’ll learn which segments are converting.</p> <p>And if you’re clever, you can use the same data to figure out why.</p> <p>There’s no “one size fits all” custom segment that will tell you everything you want to know. It starts with thinking about your website goals and objectives, and how you plan to meet them. And they are only as powerful as the reports you run them on. </p> <h2> Custom reports</h2> <p>If custom reports aren’t a part of your regular website reporting, you’ve been stuck mining through data puke — and missing key metrics and best practices along the way.</p> <p>The name “Custom reports” makes it sound more complicated than it is. In essence, you’re getting all of the metrics and dimensions from the standard Analytics reports and throwing them into your own spreadsheets. I’ll include a link below where you can download all of the custom reports Google Analytics Experts have put together for us to download.</p> <p>One of my favorite and most useful reports is one by <a href="http://www.kaushik.net/avinash/">Avinash Kaushik</a>.</p> <p><img alt="" src="/sites/default/files/screen_shot_2014-06-10_at_9.18.34_am.png" /></p> <p>Right here you can see how well each source of traffic performs. It lays out which traffic source and how many goal completions, among other user engagement metrics.</p> <p>Another favorite report of mine, also by Avinash, is a mobile performance analysis.</p> <p><img alt="" src="/sites/default/files/screen_shot_2014-06-10_at_9.31.54_am.png" /></p> <p>Looking at this report can give you valuable insight, such as whether or not your website renders correctly on certain devices.</p> <p>You can also see conversion data per each mobile operating system. If some mobile devices are converting and some aren’t, this is a great way to begin exploring that issue. It also can allow you to see how different mobile users are converting differently.</p> <h2> Overwhelmed with building your own custom reports? </h2> <p>The <a href="http://Looking at this report can give you valuable insight, such as whether or not your website renders correctly on certain devices. You can also see conversion data per each mobile operating system. If some mobile devices are converting and some aren’t, this is a great way to begin exploring that issue. It also can allow you to see how different mobile users are converting differently. Overwhelmed with building your own custom reports? The Google Analytics Solutions Gallery has everything you need to get going on customizing Google Analytics. The Solutions Gallery is a crowdsourced website where other savvy Google Analytics users submit their custom reports, segments, and dashboards and allow you to download them for free. The two I mentioned above can be found here in this download package, among many other valuable things like dashboards and custom segments. While these are created by experts, there’s no “one size fits all” report that works for everything. Each of these reports can be edited easily and tailored to fit your business objectives. (When opening up the report under the customization tab, the “edit” button can be found just below the name of the report.) When first diving in, it can be confusing deciphering the differences between metrics and dimensions. If you feel like you may have trouble, this article from Google is incredibly helpful. Add your segments below Do you have any custom segments or reports that you use regularly? Throw a link down in the comments below with a description of what it does. The customization possibilities are endless and it’s wonderful to see how other people are leveraging this tool to work for their business. If you want to get even more out of Google Analytics and leverage actionable insights that can help your marketing strategy, reach out to us! ">Google Analytics Solutions Gallery</a> has everything you need to get going on customizing Google Analytics. The Solutions Gallery is a crowdsourced website where other savvy Google Analytics users submit their custom reports, segments, and dashboards and allow you to download them for free.</p> <p>The two I mentioned above can be found <a href="http://www.google.com/analytics/gallery/#posts/search/%3F_.viewId%3DVMoVbW3LQbyo87ymcFDxCQ/">here in this download package</a>, among many other valuable things like dashboards and custom segments.</p> <p>While these are created by experts, there’s no “one size fits all” report that works for everything. Each of these reports can be edited easily and tailored to fit your business objectives. (When opening up the report under the customization tab, the “edit” button can be found just below the name of the report.)</p> <p>When first diving in, it can be confusing deciphering the differences between metrics and dimensions. If you feel like you may have trouble, <a href="https://support.google.com/analytics/answer/1033861?hl=en">this article</a> from Google is incredibly helpful.</p> <h2> Add your segments below</h2> <p>Do you have any custom segments or reports that you use regularly? Throw a link down in the comments below with a description of what it does.</p> <p>The customization possibilities are endless and it’s wonderful to see how other people are leveraging this tool to work for their business.</p> <p><strong>If you want to get even more out of Google Analytics and leverage actionable insights that can help your marketing strategy, <a href="http://www.digett.com/contact-us">reach out to us</a>!  </strong></p> <p><em>[Image credit: <a href="https://www.flickr.com/photos/petantik/">petantik</a>, via Flickr]</em></p> </div> <section> <h2>LEAVE A COMMENT</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1116&amp;2=comment_no_subject&amp;3=comment_no_subject" token="I-czO0lL7D8zplEc_Y_20F6WynRgykwR922ldscsV7o"></drupal-render-placeholder> </section> <div class="sharethis-wrapper"><span st_url="https://www.digett.com/insights/if-your-google-analytics-isnt-customized-youre-doing-it-wrong" st_title="If Your Google Analytics Isn’t Customized, You’re Doing it Wrong" class="st_facebook_large" displayText="facebook"></span> <span st_url="https://www.digett.com/insights/if-your-google-analytics-isnt-customized-youre-doing-it-wrong" st_title="If Your Google Analytics Isn’t Customized, You’re Doing it Wrong" class="st_linkedin_large" displayText="linkedin"></span> <span st_url="https://www.digett.com/insights/if-your-google-analytics-isnt-customized-youre-doing-it-wrong" st_title="If Your Google Analytics Isn’t Customized, You’re Doing it Wrong" class="st_twitter_large" displayText="twitter"></span> <span st_url="https://www.digett.com/insights/if-your-google-analytics-isnt-customized-youre-doing-it-wrong" st_title="If Your Google Analytics Isn’t Customized, You’re Doing it Wrong" class="st_email_large" displayText="email"></span> </div> Wed, 11 Jun 2014 13:36:41 +0000 Wes Mills 1116 at https://www.digett.com Consumer Privacy from the Perspective of a Digital Marketer https://www.digett.com/insights/consumer-privacy-perspective-digital-marketer <span>Consumer Privacy from the Perspective of a Digital Marketer</span> <div class="field field--name-field-teaser-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/blog_card/public/filefield_images/field_teaser_image/consumer-privacy-marketing-perspective.png?itok=wVfhyu5Q" width="275" height="183" alt="" typeof="foaf:Image" /> </div> <span><span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span></span> <span>Wed, 05/07/2014 - 10:31am</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Privacy, especially on the Internet, is something that’s prevalent in the minds of just about everyone. And when the finger isn’t being pointed towards certain government organizations, people are quick to get out their pitchforks and head for marketers and the organizations that “sell your data.”</p> <!--break--><p>But it’s nonsense, for the most part. I’ll offer up insight in the context of marketing on how it can incredibly beneficial for both consumers and businesses.</p> <p>Spoiler alert: We actually don’t even care who you are. </p> <h2>What data we actually care about</h2> <p>Any professional marketer likely has far too much data to single out individual people. And we’re talking about marketing here, so what’s the value in doing that anyway?</p> <p>When it comes to consumers, I don’t care what their name is, who they’re in a relationship with, or what they did on Spring Break back in ‘03. That’s a little <em>too</em> personal. And to be honest, there isn’t much value in trying to figure out all of that.</p> <p>What I do care about is demographics and psychographics like:</p> <ul> <li>Interests</li> <li>Age</li> <li>Gender</li> <li>Location</li> <li>Values</li> </ul> <p>Targeting at this level turns everything into just a numbers game. Marketers always want the largest reach for their target audience, which means you’re dealing with thousands of individuals.</p> <p>Using Facebook as an example, I may only care about a target audience if they all live in a certain zip code, own a house, are married, and the audience size is greater than 10,000 people. Once my ads run, I can analyze the key performance indicators, then test different demographic metrics and see which combinations perform better.</p> <p>Consumers become numbers in spreadsheets and the goal is to improve those numbers with testing and optimization.</p> <h2>What information Google and Facebook give marketers</h2> <p>This may come as a surprise to some, but Google and Facebook don’t give detailed information on individuals. In Facebook’s Power Editor and ad builder, you select which demographic metrics you’re targeting, and the only thing Facebook gives you is a potential size of your audience.</p> <p><a href="https://adwords.google.com/home/#?modal_active=none" target="_blank">Google AdWords</a> may be even less intrusive than that, since most of the emphasis is in the search term and not the individual searching with it.</p> <p>You can, however, target people who have already visited your website. Remarketing can seem intrusive, understandably — but it’s not possible to see any visitor’s entire web browsing history.</p> <p>Google goes a step further and applies a threshold in both <a href="https://en.wikipedia.org/wiki/Google_Analytics">Google Analytics</a> and AdWords that won’t show any data if the sample size isn’t large enough.</p> <h2>Everybody wins</h2> <p>The traditional rhetoric you hear may lead you to believe that no consumer likes targeted ads. But the data and results tell a different and more compelling story.</p> <p>I’ll put myself in the shoes of the consumer to conceptualize my point. I’m 23, male, and my browsing history and Facebook indicates that I like cycling. So browsing around the web, naturally I’d expect to see ads about cycling deals, upcoming cycling events, etc. I would find these relevant and some may even inform me of an offer that’s available on a product I was considering purchasing.</p> <p>Now what if highly targeted ads didn’t exist, and the ads I saw were about baby products, retirement homes, and low-APR mortgages? The ads become annoying, irrelevant, and from the businesses point of view, they aren’t reaching the customers they need to.</p> <h2>TL;DR</h2> <p>From the standpoint of a marketer, consumers’ privacy isn’t confiscated in any way. Marketers tell large advertising platforms like Facebook and Google what kind of people they want to share their ads with, and Facebook and Google make it happen. They then give the performance results back, so the marketer can make adjustments as necessary.</p> <p>The goal for marketers is that consumers can see product and service offerings that appeal to them, while a business gets a higher ROI because the targeting is more efficient.</p> <h2>Have you tried advertising online?</h2> <p>There’s something to gain from digital advertising for every business. Whether it’s reinforcing your brand, engaging with your target audience, or spreading awareness about a promotional offer.</p> <p><strong>If you own a business, or are a part of a business that wants to venture out on the digital advertising frontier, <a href="/contact">drop us a line here</a>. <a href="https://www.google.com/partners/#a_profile;idtf=7725270641">We’re trusted by Google</a>, and we know what it takes to produce meaningful results on all digital advertising platforms.</strong></p> <p><em>[Image credit: <a href="https://www.flickr.com/photos/g4ll4is/8521624548/">g4ll4is</a>]</em></p> </div> <section> <h2>LEAVE A COMMENT</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1103&amp;2=comment_no_subject&amp;3=comment_no_subject" token="vAijU94dCImaEytSXtevNCN4HYzn7M2LX4moSFQ-x-M"></drupal-render-placeholder> <article data-comment-user-id="0" id="comment-2021" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1400202768"></mark> <div> <div class="comment-name">Submitted by <span lang="" typeof="schema:Person" property="schema:name" datatype="">Bert Powers</span> on Thu, 05/15/2014 - 8:12pm</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>A rare concept in todays cyber world, where it seems everything is for sale.</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2021&amp;1=default&amp;2=en&amp;3=" token="4N03v3bAVt7lgl6EDZD46xowNiIeBeRGTzvXWGVf0Gc"></drupal-render-placeholder> </div> </div> </article> <article data-comment-user-id="27" id="comment-2022" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1400252947"></mark> <div> <div class="comment-name">Submitted by <span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span> on Fri, 05/16/2014 - 10:09am</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>I agree — it does seem everything is for sale. Thanks for reading, Bert! </p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2022&amp;1=default&amp;2=en&amp;3=" token="2x6CFBCyFUUtVBSeWGEVL5_IdrHII_lqw17uxpFrluY"></drupal-render-placeholder> </div> </div> </article> </section> <div class="sharethis-wrapper"><span st_url="https://www.digett.com/insights/consumer-privacy-perspective-digital-marketer" st_title="Consumer Privacy from the Perspective of a Digital Marketer" class="st_facebook_large" displayText="facebook"></span> <span st_url="https://www.digett.com/insights/consumer-privacy-perspective-digital-marketer" st_title="Consumer Privacy from the Perspective of a Digital Marketer" class="st_linkedin_large" displayText="linkedin"></span> <span st_url="https://www.digett.com/insights/consumer-privacy-perspective-digital-marketer" st_title="Consumer Privacy from the Perspective of a Digital Marketer" class="st_twitter_large" displayText="twitter"></span> <span st_url="https://www.digett.com/insights/consumer-privacy-perspective-digital-marketer" st_title="Consumer Privacy from the Perspective of a Digital Marketer" class="st_email_large" displayText="email"></span> </div> Wed, 07 May 2014 15:31:53 +0000 Wes Mills 1103 at https://www.digett.com Crawling vs. Indexing: Robots.txt and sitemap.xml https://www.digett.com/insights/crawling-vs-indexing-robotstxt-and-sitemapxml <span>Crawling vs. Indexing: Robots.txt and sitemap.xml</span> <div class="field field--name-field-teaser-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/blog_card/public/filefield_images/field_teaser_image/crawling-vs-indexing-robots-txt-sitemap-xml.png?itok=2JVvUodZ" width="275" height="183" alt="Crawling vs. indexing: robots.txt and sitemap.xml" typeof="foaf:Image" /> </div> <span><span lang="" about="/users/jd-collier" typeof="schema:Person" property="schema:name" datatype="">JD Collier</span></span> <span>Tue, 04/15/2014 - 9:55am</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Sometimes you need to prevent a site, page or everything at a particular path from showing up in Google search. I've heard people say to just disallow the page in robots.txt file. This is actually incorrect.</p> <!--break--><p>If you simply add a disallow to your robots.txt file, then it is true that Google will not "crawl" that page, but if you have that page in your sitemap.xml file then the page will still be submitted to the Google Index.</p> <p>You will find your disallowed content in Google search.</p> <h2> For example</h2> <p>Scenario:</p> <ul> <li> I have created a view with client logos and I don't want each node to be seen. I only want the nodes to appear inside my view.</li> <li> The nodes are at a /clients path.</li> </ul> <p>In this scenario, I will do just one thing:</p> <p><meta content="noindex" name="robots" /></p> <ul> <li> Add noindex to the page</li> </ul> <p>A common error I've seen is for people to add:</p> <ul> <li> disallow: /clients to robots.txt</li> </ul> <p>I've seen people perform this update and think this will prevent the page from showing in Google search. However, if you are using the sitemap.xml module to create your sitemap.xml file, chances are you also have it set to auto submit your index to Google and possibly other search engines.</p> <h2> Crawling vs. indexing</h2> <p>You have prevented Google from <em>crawling</em> your site, but you may have just allowed your sitemap module to autosubmit the url to be indexed. It will not crawl further after this link, but it has still been indexed.</p> <p><em>Note: You should also configure your sitemap.xml module correctly, but that is another topic.</em></p> <p>Robots.txt tells Googlebot and other crawlers what is and is not allowed to be crawled; the noindex tag tells Google Search what is and is not allowed to be indexed and displayed in Google Search.</p> <h3> One step further</h3> <p>This part hurts my brain, but there seems to be consensus that you should <em>not</em> add items you want to prevent from search to your robots file. Instead, you should allow them to be crawled and have a noindex tag on them to then ensure Google knows not to display them.</p> <h2> Development environments</h2> <p>On a development server, this is much simpler. You can tell Apache to globally disallow all files. In the Apache httpd.conf file, add this:</p> <p><code># Globally disallow robots from the development sever<br /> Header Set X-Robots-Tag "noindex, noarchive, nosnippet"</code> </p><p>You can also do this in an htaccess file to add this header in a more granular scenario.</p> <p>What do you think? Agree, disagree, or duh? :)</p> <p><em>[Image by  <a href="https://www.flickr.com/photos/iguanajo/277209483">giorgio raffaelli</a>]</em></p> </div> <section> <h2>LEAVE A COMMENT</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1098&amp;2=comment_no_subject&amp;3=comment_no_subject" token="-lVWn5vBacPBdHtO6rc2AqWf7OUEU0bJvzEB30YBoek"></drupal-render-placeholder> <article data-comment-user-id="0" id="comment-2004" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1397657127"></mark> <div> <div class="comment-name">Submitted by <span lang="" typeof="schema:Person" property="schema:name" datatype="">kalabro</span> on Wed, 04/16/2014 - 9:05am</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Both robots.txt and sitemap.xml are recommendations. Usually you need to configure 403 HTTP status for non-public data.</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2004&amp;1=default&amp;2=en&amp;3=" token="MXijhLoJF2Mfb6M_UM45Kv1zTTW4mIe3vx_4we9LwXE"></drupal-render-placeholder> </div> </div> </article> <article data-comment-user-id="0" id="comment-2008" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1398124278"></mark> <div> <div class="comment-name">Submitted by <span lang="" typeof="schema:Person" property="schema:name" datatype="">Your Name</span> on Mon, 04/21/2014 - 6:51pm</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Nice post. It's a duh and a jeh all in once. We see a lot of things go wrong with robots.txt and sitemaps because somehow all website developers, hobbyist and pro alike, need to do some seo it seems. They then turn to the usual suspects that are top of mind resulting in people putting in regular expressions in the robots as well. So the want to disallow a url and end up take down a whole tag or category with 40 valuable pages on it. </p> <p>Truth of the matter is that the real masters of the crawl and indexing process do not use robots.txt nor a xml sitemap. A well designed and structured site should provide ample breadcrumbs for the spider to follow starting with an effective menu and navigation structure on the front page for every website as not doing this causes a chain reaction like effect on the indexability of a site as a whole. When we do not cut corners we manage to get millions of pages indexed in the first year for new websites. How? With with followed links on to targets we choose and for the rest it’s never cutting corners. </p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2008&amp;1=default&amp;2=en&amp;3=" token="WVvLIk32cpkXnQ41JrbGD_9ouhY7jXkxCZK1a0fh50E"></drupal-render-placeholder> </div> </div> </article> <article data-comment-user-id="0" id="comment-2053" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1404591998"></mark> <div> <div class="comment-name">Submitted by <span lang="" typeof="schema:Person" property="schema:name" datatype="">Stefan</span> on Sat, 07/05/2014 - 3:26pm</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Commands in a robots.txt file are requests, not commands, to web crawlers, which they hopefully choose to honor.</p> <p>However malicious crawlers will actually look for the locations of hidden content in robots.txt - which they would otherwise not have discovered if the robots.txt file was not present.</p> <p>That is why I believe it is better not to specify the location of hidden pages using robots.txt, but instead with a meta robots tag with a noindex value (or other solutions f you have access to server configuration.)</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2053&amp;1=default&amp;2=en&amp;3=" token="anoQX8HAJIdAj3aCrPQOfz3z3LdlC8m05OhfmVcssaI"></drupal-render-placeholder> </div> </div> </article> <article data-comment-user-id="0" id="comment-2073" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1407334645"></mark> <div> <div class="comment-name">Submitted by <span lang="" typeof="schema:Person" property="schema:name" datatype="">ahmed</span> on Wed, 08/06/2014 - 9:17am</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>so what if i submitted both xml sitemap and submitted another sitemap (for videos for example) in robots.txt? are both of them gonna be indexed? or one will override the other? here's exactly my confusion...</p> <p>i actually have my sitemap in the root of my site, and i am in process now for making my content rich by adding videos and implement video SEO for it, so the video seo tool is advising to add 1 line to robots.txt to point to the sitemap that is hosted on their servers for videos, i am not sure what to do now.. i wish if i have separate sitemaps, but not to index them in one file, i want to keep the default way for videos to be added to robots and leave my other sitemap as it is, how could i perform that?</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2073&amp;1=default&amp;2=en&amp;3=" token="r2kvd3j7AMpbPz1j8Dwqp_6zWChZFGp9j2_bSt8xcqA"></drupal-render-placeholder> </div> </div> </article> </section> <div class="sharethis-wrapper"><span st_url="https://www.digett.com/insights/crawling-vs-indexing-robotstxt-and-sitemapxml" st_title="Crawling vs. Indexing: Robots.txt and sitemap.xml" class="st_facebook_large" displayText="facebook"></span> <span st_url="https://www.digett.com/insights/crawling-vs-indexing-robotstxt-and-sitemapxml" st_title="Crawling vs. Indexing: Robots.txt and sitemap.xml" class="st_linkedin_large" displayText="linkedin"></span> <span st_url="https://www.digett.com/insights/crawling-vs-indexing-robotstxt-and-sitemapxml" st_title="Crawling vs. Indexing: Robots.txt and sitemap.xml" class="st_twitter_large" displayText="twitter"></span> <span st_url="https://www.digett.com/insights/crawling-vs-indexing-robotstxt-and-sitemapxml" st_title="Crawling vs. Indexing: Robots.txt and sitemap.xml" class="st_email_large" displayText="email"></span> </div> Tue, 15 Apr 2014 14:55:05 +0000 JD Collier 1098 at https://www.digett.com Facebook Advertising Just Got Much More Powerful https://www.digett.com/insights/facebook-advertising-just-got-much-more-powerful <span>Facebook Advertising Just Got Much More Powerful</span> <div class="field field--name-field-teaser-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/blog_card/public/filefield_images/field_teaser_image/facebook_lightening.png?itok=0Q-DZu4d" width="275" height="183" alt="" typeof="foaf:Image" /> </div> <span><span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span></span> <span>Wed, 04/02/2014 - 3:43pm</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Up until now, targeting your ads on Facebook to those who have visited your site had to be done through a third-party company, like AdRoll. Yes, remarketing — that’s what I’m talking about. As excited as I am that it’s finally available to advertisers, I can’t believe it’s taken this long. But it’s powerful and everything I could’ve hoped for.</p> <!--break--><h2>Remarketing is a wonderful thing</h2> <p>I’ll preface with providing a context about why remarketing is incredibly important and why Facebook’s new change is a big deal. It’s a way to re-engage your target audience.</p> <p>When you’re browsing around the web and notice ads from the websites you’ve recently visited, you’re being re-engaged and exposed again to the brand. Traditionally, users who visit a website from a remarketing ad are <a href="http://www.thinkwithgoogle.com/products/remarketing.html">much more valuable</a>.</p> <p>For those indecisive visitors who haven’t converted yet, or those who visited your site and have forgotten how amazing it was, this is your opportunity to invite them back.</p> <p>But not every visitor is the same and you can’t market to them like they’re all the same. And this is why Facebook’s refresh of <a href="https://developers.facebook.com/docs/marketing-api/custom-audience-targeting">custom audiences</a> is awesome. </p> <h2>It’s time to get creative</h2> <p>Facebook’s new custom audiences can be broken down into three levels:</p> <ol> <li>All visitors</li> <li>Visitors of a specific set of pages</li> <li>Converters</li> </ol> <p>From a marketing perspective, it’s instinctual that all three of these categories are marketed to with their own unique messaging. This is where we can be creative.</p> <p>I’ll use a home builder’s website to conceptualize my point here. On this website, there’s a portfolio that’s organized by varying styles — all of which are unique. We’ll call one of the organized sections “Contemporary Living” and another “Classical Charm.”</p> <p>With Facebook’s custom audiences, advertisers can now create one audience who has viewed the “Contemporary Living” portfolio and another audience that viewed “Classical Charm.”</p> <p>Separating these audiences will now allow for highly targeted ads that you already know appeal to those users.</p> <p>A good example of this would be two different sponsored stories, each targeted to the two the organized sections. Each ad could contain one of the popular pictures from the section on your site, with a call-to-action that may look like “View our most recent Contemporary Living homes by subscribing to our blog!”. This may be not the best call-to-action, but hopefully you get the idea.</p> <p>This is just a simple example. The possibilities are endless, of course, but let’s look at how it can get more complex.</p> <p>If you love Google Analytics as much as I do, you’re probably familiar with reverse goal paths and knowing which of the pages on your site create conversions. With this knowledge, you can easily create a custom audience that only includes visitors of those pages.</p> <h2>But wait, there’s more!</h2> <p>There’s one caveat to all of this: you have to have a significant amount of visitors to your website for your campaigns to have any kind of traction. But Facebook has a solution to that, too.</p> <p>Facebook has always given the option to create a <a href="https://www.facebook.com/help/164749007013531">lookalike audience</a>. After creating a custom audience, Facebook will look into a number of different variables and turn that audience into millions.</p> <p>This was always a great option when creating audiences from email lists, but it just got much more valuable now with remarketing.</p> <p>[Note: Facebook is somewhat ambiguous as to what exactly they’re looking at, so testing and pulling reports regularly is highly recommended when using a lookalike audience.]</p> <p>For most businesses, the most valuable visitors are those who convert. Now that Facebook has remarketing available to those converters, the “create a lookalike audience” gives you a plethora of Facebook users to are similar to those who already converted on your site.</p> <p>For those of you who are perspicacious, the ideas are probably already flowing through your head!</p> <h2>Pro tip: don’t be creepy</h2> <p>It’s important when developing your remarketing strategy to take your mind out of the context of the business and put your consumer hat on for a moment.</p> <p>Remember to have your messaging highly targeted, but not so targeted that the audience becomes uncomfortable, which can be really easy to do.</p> <p>A good example of this was an ad I saw on Facebook that used my name. While this was great targeting, don’t do this. With the thought of privacy very prevalent in everyone’s mind nowadays, it’s best to be discreet about knowing who your audience is. Admittedly, I thought it was awesome and immediately Google’d how they did it. But I won’t use it and you shouldn’t either!</p> <p>Frequency plays another role in not being creepy. Facebook gives you the option of how long to keep a user on your remarketing lists, with a maximum of 180 days.</p> <p>This is all dependent on your business, obviously, but don’t overdo it. It’s not beneficial to keep showing your ad to someone who has visited your site once 60 days ago and has not been back since. </p> <h2>Google Tag Manager can be your silver bullet</h2> <p>This is really where you can create endless possibilities with your Facebook advertising strategy. <a href="https://www.google.com/tagmanager/faq.html">Google Tag Manager</a> is a tool that deploys JavaScript snippets across your site asynchronously. But with each “tag” or snippet of code — like the Facebook remarketing code — comes a custom firing schedule.</p> <p>Depending on your level of expertise with JavaScript, you can define custom rules that will only fire for certain web browsers, operating systems, mobile phones, or after a visitor has spent a certain amount of time on a page.</p> <p>I doubt that Facebook will release these as native features anytime soon, or at all, but I am a huge fan of Google Tag Manager and the wonderful things it can do.</p> <p>Is your mind blown yet?</p> <h2>You still have to be marketing smart</h2> <p>Facebook’s new robust audience options are great, but they don’t do everything for you. To leverage them correctly, you still have to be a great marketer and understand who your audience is and what they respond to.</p> <p>But if you don’t have a clue, no need to worry. Luckily for you, we’re digital marketing experts and know what it takes to reach success with Facebook advertising.</p> <p><strong>Do you feel that you’re not getting the most out of your Facebook advertising? Or are you ready to start leveraging the most ubiquitous social platform in the world to drive valuable leads to your business? <a href="/contact">Drop us a line here</a>, and let’s talk about how we can help. </strong></p> </div> <section> <h2>LEAVE A COMMENT</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1095&amp;2=comment_no_subject&amp;3=comment_no_subject" token="WCNXP8syfRq1Tm-9YFC3alc1HPFUlegX33HaiJI8ZrI"></drupal-render-placeholder> </section> <div class="sharethis-wrapper"><span st_url="https://www.digett.com/insights/facebook-advertising-just-got-much-more-powerful" st_title="Facebook Advertising Just Got Much More Powerful" class="st_facebook_large" displayText="facebook"></span> <span st_url="https://www.digett.com/insights/facebook-advertising-just-got-much-more-powerful" st_title="Facebook Advertising Just Got Much More Powerful" class="st_linkedin_large" displayText="linkedin"></span> <span st_url="https://www.digett.com/insights/facebook-advertising-just-got-much-more-powerful" st_title="Facebook Advertising Just Got Much More Powerful" class="st_twitter_large" displayText="twitter"></span> <span st_url="https://www.digett.com/insights/facebook-advertising-just-got-much-more-powerful" st_title="Facebook Advertising Just Got Much More Powerful" class="st_email_large" displayText="email"></span> </div> Wed, 02 Apr 2014 20:43:53 +0000 Wes Mills 1095 at https://www.digett.com Why Infographics Suck https://www.digett.com/insights/why-infographics-suck <span>Why Infographics Suck</span> <div class="field field--name-field-teaser-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/blog_card/public/filefield_images/field_teaser_image/why-infographics-suck.png?itok=Bes8sSbw" width="275" height="183" alt="Why infographics suck" typeof="foaf:Image" /> </div> <span><span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span></span> <span>Mon, 03/17/2014 - 10:02am</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>“Visualize your data!” is a phrase I see smeared around everything that has to do with infographics. It’s time to wake up, folks. Making the font bigger, changing the color, and sprinkling in great looking graphics along with numbers and trend lines isn’t visualizing data.</p> <!--break--><h2> What it actually means to “visualize”</h2> <p>When we look at infographics, and websites that sell them, they’re selling the idea that you can visualize your data better. Sure, it looks prettier — but are you really visualizing it? Probably not.</p> <p>Visualizing data isn’t knowing the bounce rate for pages on your website or knowing the average time on the site. It’s knowing the narrative behind the numbers.</p> <p>Numbers can tell stories, but not by themselves. “Our traffic increased 15% from last month!” But what’s missing here? One word: insight.</p> <p>Insight answers the who, what, when, where, and why. This is the hardest part about data analytics. Something I believe that can never be automated and could never be conveyed just by slapping some pretty looking numbers on an infographic.</p> <p>Numbers need context. Without context, you don’t have insight. Without insight, the numbers are useless.</p> <p>I challenge you. The next time you read through an infographic, think about what insight you’re actually gaining. Was it actually valuable? Are you <em>really</em> visualizing your data, or are you just wasting time making the same numbers look pretty? </p> </div> <section> <h2>LEAVE A COMMENT</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1092&amp;2=comment_no_subject&amp;3=comment_no_subject" token="9ir4NY3GMzsYAK9QEItGN2MF2t-WdWytW3nLg9vDI8E"></drupal-render-placeholder> </section> <div class="sharethis-wrapper"><span st_url="https://www.digett.com/insights/why-infographics-suck" st_title="Why Infographics Suck" class="st_facebook_large" displayText="facebook"></span> <span st_url="https://www.digett.com/insights/why-infographics-suck" st_title="Why Infographics Suck" class="st_linkedin_large" displayText="linkedin"></span> <span st_url="https://www.digett.com/insights/why-infographics-suck" st_title="Why Infographics Suck" class="st_twitter_large" displayText="twitter"></span> <span st_url="https://www.digett.com/insights/why-infographics-suck" st_title="Why Infographics Suck" class="st_email_large" displayText="email"></span> </div> Mon, 17 Mar 2014 15:02:38 +0000 Wes Mills 1092 at https://www.digett.com The Benefits and Challenges of PPC Advertising https://www.digett.com/insights/benefits-and-challenges-ppc-advertising <span>The Benefits and Challenges of PPC Advertising</span> <div class="field field--name-field-teaser-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/blog_card/public/filefield_images/field_teaser_image/rubikscube_0.png?itok=RgFGbIFU" width="214" height="183" alt="The benefits and challenges of PPC advertising" title="The Benefits and Challenges of PPC Advertising" typeof="foaf:Image" /> </div> <span><span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span></span> <span>Wed, 03/05/2014 - 1:40pm</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>When it comes to PPC advertising, the benefits almost always outweigh the challenges. Digital advertising is a relatively new medium that offers marketers a plethora of data to optimize that has never existed before. It’s also a world that is ever-changing, which makes it tough to stay ahead of the curve.</p> <!--break--><h2> PPC benefits I’m most fond of</h2> <p>Before I outline the benefits, I want to provide some numbers as a framework. In 2011, Amazon, Lowe’s, and Kayak had a combined spend of <a href="http://www.wordstream.com/articles/google-earnings">over $140 million dollars</a> through Google AdWords, the most popular PPC advertising platform. Even for a large corporation, that’s a big investment on one channel of advertising.</p> <p>What am I saying here? There must be benefits — millions of them!</p> <h3> Unlimited data at your disposal</h3> <p>I love data. So there’s no doubt this is one of my favorite benefits. The beautiful thing for a digital marketer is the potential number of insights you can pull. To contrast against traditional mediums — like outdoor advertising — a marketer knows exactly how many impressions the ad got, how many people clicked on the ad, what they did on the website after they clicked on the ad, and more.</p> <p>For optimization, this is incredible. There’s less guesswork and more significance.</p> <p>But it doesn’t stop there. Because nearly every user interaction is measured and <a href="https://support.google.com/analytics/answer/2799357?hl=en">Google knows a lot about you</a>, any engaged marketer can really learn their target audience on a granular level.</p> <p>This means we all win — consumers are given relevant and valuable ads and marketers get to keep their jobs.</p> <h3> Expanded reach and highly optimized targeting</h3> <p>Everyone is online. Okay, not everyone. But <a href="http://www.nielsen.com/us/en/insights/reports/2012/how-digital-influences-how-we-shop-around-the-world.html">Nielsen reports</a> a 79% penetration rate for North America. Which is pretty close to everyone!</p> <p>From a marketing perspective, this means there’s a good chance that most, if not all, of your target audience is logging on. PPC advertising is an easy way to reach those who matter most.</p> <p>“Those who matter most” is something that smaller businesses (who don’t have millions to spend on market research) may struggle to define in traditional mediums. But as discussed above, digital advertising makes this easier to find out.</p> <p>And once you do find out, targeting with PPC is awesome. PPC advertising (Google AdWords specifically) allows you to control who sees your ad. But above all else, there’s the almighty keyword — the best targeting tool around. Users search a keyword that is relevant to marketer’s ads, and those ads show.</p> <h3> Instant results</h3> <p>Maybe not instant, but about as instant as you can get in the marketing world. I’m most experienced with Google AdWords, so I’ll use this as an example.</p> <p>After launching a new campaign, or even changes, one can expect to arrive at work the next morning and already have a decent amount of metrics to look at. While I wouldn’t suggest optimizing on one day’s worth of numbers, it’s great to have the ability to see them.</p> <p>This also translates into ads showing instantly! After planning and developing a strategy, getting ads up and running around the Internet takes just a click to get them showing. Contrast this against a print mail piece, where it can take days to start measuring effectiveness and final results could take months. Print mail is still very effective, it’s just snail mail in every aspect.</p> <h2> It isn’t all glitz and glamour</h2> <p>PPC advertising is an exciting new medium, but it still comes with the same challenges marketers have faced for years, plus new ones that come along with the digital advertising landscape.</p> <h3> Overwhelming amounts of data</h3> <p>I may be cheating here a bit by listing this both as a benefit and a challenge, but it fits. There’s a <em>ton</em> of data.</p> <p>Sometimes it can be overwhelming and you may find yourself asking “What data is important?” and “How can I turn this into something actionable?”</p> <p>Every business and industry operates differently. Every PPC account manager has different KPIs (key performance indicators), so there’s no set list of which metrics to look at. There’s so much stuff that can muddy the waters, and it takes a lot of skill and practice to learn what matters most in relation to your goals.</p> <h3> You have to be an all-around marketer</h3> <p>Allow me to generalize a bit, but I would venture to say from personal experience, a majority of us who manage PPC accounts handle targeting, ad text, keywords, etc. You have to be a creative writer, marketer, and data analyst at the same time.</p> <p>I’m a numbers guy. I’m most comfortable manipulating spreadsheets chock-full of numbers and digging through Google Analytics. It secretly may be even one of my hobbies.</p> <p>But when it comes to writing creative and engaging ad text, I struggle with it. It doesn’t come naturally to me. And this is how many people are: great with numbers or great with creative writing.</p> <p>Nobody can be excellent at <em>everything</em>. But this challenge also means that you can expand your skills into other areas.</p> <h3> Staying ahead of the curve</h3> <p>Google AdWords has updates nearly <a href="http://adwords.blogspot.com/">every single day</a>, and it's just one digital advertising platform. Keeping at the forefront of updates is a full time job by itself. To be honest, I don’t really have an easy solution to offer to overcome this challenge.</p> <p>It can be overwhelming, because to be the best marketer, it’s important to leverage all of the new tools that advertising platforms make available to us.</p> <p>If you have any tips/insight on how you stay ahead of the curve, I’d love to hear from you in the comments below.</p> <h2> We’re PPC experts</h2> <p><strong>If the challenges overwhelm you, or you see a new potential in PPC advertising for your business, <a href="http://www.digett.com/contact-us">drop us a line</a>. We’d love to help you out! We have experience reaching success with PPC for businesses of all sizes. </strong></p> <p><em>Image credit: <a href="http://www.flickr.com/photos/huangjiahui/">Huangjiahui</a></em></p> </div> <section> <h2>LEAVE A COMMENT</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1089&amp;2=comment_no_subject&amp;3=comment_no_subject" token="rnTPwJR12QF386L96gwrOSbtSKrw6b0n0O2dRoNpo6w"></drupal-render-placeholder> </section> <div class="sharethis-wrapper"><span st_url="https://www.digett.com/insights/benefits-and-challenges-ppc-advertising" st_title="The Benefits and Challenges of PPC Advertising" class="st_facebook_large" displayText="facebook"></span> <span st_url="https://www.digett.com/insights/benefits-and-challenges-ppc-advertising" st_title="The Benefits and Challenges of PPC Advertising" class="st_linkedin_large" displayText="linkedin"></span> <span st_url="https://www.digett.com/insights/benefits-and-challenges-ppc-advertising" st_title="The Benefits and Challenges of PPC Advertising" class="st_twitter_large" displayText="twitter"></span> <span st_url="https://www.digett.com/insights/benefits-and-challenges-ppc-advertising" st_title="The Benefits and Challenges of PPC Advertising" class="st_email_large" displayText="email"></span> </div> Wed, 05 Mar 2014 19:40:45 +0000 Wes Mills 1089 at https://www.digett.com Facebook Advertising: A Love-Hate Relationship https://www.digett.com/insights/facebook-advertising-love-hate-relationship <span>Facebook Advertising: A Love-Hate Relationship</span> <div class="field field--name-field-teaser-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/blog_card/public/filefield_images/field_teaser_image/facebook_love_hate.png?itok=bpsKaI0T" width="275" height="183" alt="" typeof="foaf:Image" /> </div> <span><span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span></span> <span>Tue, 02/11/2014 - 8:11am</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>After using Facebook Ads regularly for the last five months, there’s a lot I’ve found to love. There’s also a few things that make me want to pull my hair out. Hair-pulling aside, the ubiquity of Facebook makes it an incredibly powerful advertising medium with enough targeting options to keep anyone busy with A/B testing.</p> <!--break--><h2>The love</h2> <p>The targeting options Facebook gives advertisers are wonderful. And this is arguably my favorite part about advertising through Facebook. Even if your target audience is broad, you can get creative with your messaging and targeting. Just how creative can you get? Here’s a screenshot of just a few of the categories in <a href="https://www.facebook.com/help/162528860609436/">Power Editor</a>: </p> <p><img alt="" src="/sites/default/files/facebook_categories.png" /></p> <p>Now this is just an example. Each of those categories expands into more subcategories.</p> <p><a href="/insights/facebook-vs-google-debate-old-school-leverage-them-both-work-you">Compared to Google AdWords</a>, Facebook makes getting your message across a little easier — you’re not limited to 35 characters. At least when you’re using <a href="https://www.facebook.com/help/153611548180567/">Page Post Ads</a>, like the example shown below. </p> <p><img alt="" src="/sites/default/files/facebook_ppa.png" /></p> <p>I look at this as a trade-off, though. While Google limits your character space, your ad is shown to people actively searching for your keywords. On Facebook, your ad is shown based on your targeting criteria that you’ve outlined. Meaning, you tell Facebook what kind of people you want to see your ad. That aside, being able to include a picture, video, etc. tied to your messaging and product (with a link to your page) is insanely awesome.</p> <p>While I could go on about the things that are great about Facebook Ads, I’ll refrain and direct you to <a href="http://www.jonloomer.com/">Jon Loomer’s blog</a>, which has a plethora of valuable information regarding Facebook Ads.</p> <h2>The hate</h2> <p>When it comes to digital marketing, there’s a fine line between “the bad” and “the ugly.” So I’ll tread carefully here to outline “the bad” on Facebook Ads. </p> <h3>Facebook’s Ad Manager</h3> <p>Above, I mentioned <a href="https://www.facebook.com/help/162528860609436/">Facebook’s Power Editor</a>. If you’re familiar with AdWords Editor, it’s essentially the same concept — it allows you to work offline and make bulk changes that would take much longer in the Ads Manager, along with a plenitude of other options. I learned to master Power Editor before really delving into the traditional interface. So perhaps I am biased.</p> <p>I preface with that to provide a contrast against the ad creator that Facebook provides in the Ad Manager. To put it bluntly: it sucks. It feels like an incredibly watered-down version of Power Editor with less options to the advertiser. There’s no ability to save audiences, post texts are limited to 90 characters, and there’s no ability to copy and paste from different campaigns (if I’m missing some options, please feel free to let me know where to find this in the comments below).</p> <p>I’m not entirely sure who Facebook made the interface for. By the looks of it, probably a elementary school student wanting to get into the digital marketing world. I honestly don’t think anyone who is serious uses this. If they do, it’s because no one has been kind enough to tell them about Power Editor. </p> <h3>Nothing is perfect</h3> <p>Alas, Power Editor isn’t perfect. The hair-pulling generally comes from one critical option that is missing — you can’t edit Page Post Ads after you create them. “What?!” you ask?</p> <p>Yes, if I create a PPA (Page Post Ad) in Power Editor and change my mind about something or find a typo, I have to create a whole new unpublished post. Which isn’t necessarily time consuming, but more of an annoyance than anything. Here’s what you have to fill out and get right the first time (It’s taught me to proofread like no other):</p> <p><img alt="" src="/sites/default/files/facebook_pe.png" /></p> <h3>The worst formula, ever</h3> <p>There is just one last thing that I feel has to be mentioned and that’s Facebook’s formula for showing your ad. To provide some context, Facebook wants to make money. So they only want to show ads that:</p> <ul> <li>Are on a CPM (cost per thousand impressions) structure; OR</li> <li>Have a relatively high CTR (click-through rate)</li> </ul> <p>While this doesn’t seem troublesome on the surface, it makes A/B testing incredibly hard.</p> <p>When you first post an ad, Facebook will show your ad briefly. If it doesn’t get any clicks in that short amount of time, your ad won’t gain any more impressions (on a CPC bidding structure). This is a big deal because there’s a lot of factors that determine when people click on ads (like time of day, day of week, etc). Unlike Google AdWords, where you can optimize two weeks or a month down the road, not much optimization can be done. In fact, if your ad shows a certain amount of times with no clicks, Facebook will literally quit showing it at all — I’ve seen an ad stop showing after just 20 impressions.</p> <p>For some anecdotal evidence, here is a situation that happened last month.</p> <p>Generally I’ll start a campaign with only one ad. If it does poorly, I’ll pause it and run another variation. I do this because the audience I’m targeting is somewhat small, so this is the best approach for A/B testing.</p> <p>In January, though, I mistakenly paused and then un-paused the same ad after it had shown about 100 times with no clicks. The ad started getting impressions again, and ultimately became the highest-converting Facebook ad I’ve done. Without changing a thing.</p> <p>So from an analytical standpoint, one can see how this is frustrating when it comes to optimizing your ad spend. Impossible, though? No, but it definitely presents a challenge.</p> <h2>It’s mostly love for Facebook</h2> <p>Despite my much longer rant of things I disliked, the good definitely outweighs the bad. Facebook is an amazing medium not only for branding, but audience engagement, too. It’s unique and has an incredibly large reach — which is all a marketer could ask for.</p> <p><strong>Do you need help whipping your digital marketing strategy into shape? Luckily for you, that’s what we do. We’d love to give you a <a href="/contact">free consultation</a> and explore how we could help you grow your business.  </strong></p> </div> <section> <h2>LEAVE A COMMENT</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1082&amp;2=comment_no_subject&amp;3=comment_no_subject" token="jQy4ZVyo4RqEgAPPsZiuwAPyonE2L213ao9x3Mi8ZLc"></drupal-render-placeholder> </section> <div class="sharethis-wrapper"><span st_url="https://www.digett.com/insights/facebook-advertising-love-hate-relationship" st_title="Facebook Advertising: A Love-Hate Relationship" class="st_facebook_large" displayText="facebook"></span> <span st_url="https://www.digett.com/insights/facebook-advertising-love-hate-relationship" st_title="Facebook Advertising: A Love-Hate Relationship" class="st_linkedin_large" displayText="linkedin"></span> <span st_url="https://www.digett.com/insights/facebook-advertising-love-hate-relationship" st_title="Facebook Advertising: A Love-Hate Relationship" class="st_twitter_large" displayText="twitter"></span> <span st_url="https://www.digett.com/insights/facebook-advertising-love-hate-relationship" st_title="Facebook Advertising: A Love-Hate Relationship" class="st_email_large" displayText="email"></span> </div> Tue, 11 Feb 2014 14:11:47 +0000 Wes Mills 1082 at https://www.digett.com Building an AdWords Mobile Strategy https://www.digett.com/insights/building-adwords-mobile-strategy <span>Building an AdWords Mobile Strategy</span> <div class="field field--name-field-teaser-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/blog_card/public/filefield_images/field_teaser_image/sidewayslegoiphone.png?itok=KcwFZqL0" width="275" height="145" alt="" typeof="foaf:Image" /> </div> <span><span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span></span> <span>Tue, 01/07/2014 - 8:30am</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>In search engine marketing, both desktop and mobile deserve their own strategy. Generally speaking, the desktop volume will always exceed mobile. But this doesn’t mean you should roll your mobile strategy under the desktop’s umbrella. If you want to maximize your ROI and optimize your spend, pay attention to and learn your mobile audience.</p> <!--break--><h2>A micro-to-macro approach</h2> <p>There’s no “one size fits all” for marketing — especially digital marketing. Every industry is different. Every location is different. Competitors are different. That’s why your micro data acts as the groundwork for any strategy. The most valuable insight can be derived from the data in your own AdWords or other PPC account.</p> <p>The macro data is important, too: it puts your micro findings into context. The weather, economic trends, time of year, and even things such as crime rates may have an effect on your account performance. Macro data is always best at answering the question “why?”.</p> <p>If you’re a statistician or love numbers just as much as I do, use <a href="https://en.wikipedia.org/wiki/Chi-squared_test">chi-squared</a> and <a href="https://en.wikipedia.org/wiki/Student%27s_t-test">Student’s t-test</a> to learn which metrics are statistically significant in your mobile segment. This is where you can pull in macro data like weather and more to see if it has any statistical significance on your conversion rates or click-through rates. </p> <h2>Analyze your data and learn your mobile audience</h2> <p>Before implementing any type of strategy, the first thing that needs to take place is research. Extract your keyword data into pivot tables. Before exporting, besure you have the device segment on and all of your relevant columns are visible (like conversions, for instance). This will allow you to define who your mobile audience is. Learn everything you can about the mobile and desktop audience, such as:</p> <ul> <li>peak conversion times</li> <li>cost-per-conversion</li> <li>conversions by location</li> <li>etc.</li> </ul> <p>The more insight you can pull from the data, the more thorough your mobile strategy will be.</p> <p>Contrasting your findings for desktop and mobile against each other and highlighting the differences will provide a solid framework for your mobile strategy. If you find that there are no differences in your account, you have some testing to do.</p> <h2>Leverage bid adjustments</h2> <p>Google AdWords gives marketers an unbelievable amount of customization through <a href="https://support.google.com/adwords/answer/2732132?hl=en">bid adjustments</a>. Bids can be adjusted for device (mobile and desktop), locations (postal codes, cities, and other geographic areas), and schedule (time of day, days of the week, and hour of day).</p> <p>This is where the pivot tables are key — you can break down your mobile conversions by all of the above dimensions. Looking at your CPA (cost per acquisition) alongside your conversions is something you should do before making any bid adjustments. For instance, you probably don’t want to bid higher on a location where your CPA is already high.</p> <p>An important note: bid adjustments do “stack” on top of each other. For instance, assume you have an ad group where all mobile devices are adjusted 20% higher, Wednesdays are adjusted 15% higher, and between the hours of 6pm and 8pm is 13% higher. A $1.00 bid on any given keyword would become a $1.56 bid for mobile users searching on Wednesday between 6 and 8pm. </p> <h2>Cater to mobile users with device preference</h2> <p>One of the best features for mobile strategy in AdWords is the <a href="https://support.google.com/adwords/editor/answer/30854?hl=en">device preference</a> when creating an ad. Google allows you to specify whether you want an ad to show on just mobile devices or both mobile and desktop (there are no desktop only ads). If you know that your mobile user segment usually searches on-the-go, you can test different CTAs (calls to action) that are tailored to someone who’s already out of home.</p> <p>I strongly suggest A/B testing to see what works and what doesn’t. There’s a high probability that the same ad will have different performance on mobile than desktop.</p> <p>When creating ads and landing pages for mobile users, keep in mind that 77% are in a location to already <a href="http://www.thinkwithgoogle.com/research-studies/creating-moments-that-matter.html">have a computer available to them</a>. Convenience is always going to be a major factor when it comes to mobile users.</p> <h2>A dynamic strategy: expert level</h2> <p><a href="/insights/getting-started-4-easy-adwords-scripts">Utilizing scripts within AdWords</a> is the cherry on top of your mobile strategy. I’ll preface this with saying that the bidding schedule and options AdWords as built in will satisfy most marketers’ needs. But with AdWords scripts, things can be as fine-tuned as you need.</p> <p>Going to back to my point above about using statistical analysis for macro data, scripts allow you to really leverage anything you find of significance. But the best part — it’s all dynamic. Bid adjustments can fluctuate based on the data you’re grabbing.</p> <p>If you’re not familiar with AdWords scripts, I recommend an earlier blog post: <a href="/insights/getting-started-4-easy-adwords-scripts">Getting Started with 4 Easy AdWords Scripts</a>.</p> <h2>We’re AdWords experts</h2> <p>I hope this article provided you with a plethora of actionable insight for you to implement in your own AdWords account. But if you find yourself still struggling with AdWords and PPC, we can help!</p> <p><strong>We have expertise in reaching success with accounts of all sizes. <a href="/contact">Reach out to us for an absolutely free consultation</a>! </strong></p> <p><em>[Images: iPhone via <a href="http://www.flickr.com/photos/daviderickson/">David Erickson</a>, Legos via <a href="http://www.flickr.com/photos/m0php/">Craig Rodway</a>] </em></p> </div> <section> <h2>LEAVE A COMMENT</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1070&amp;2=comment_no_subject&amp;3=comment_no_subject" token="FJaUO5uJnb2TFw2eQZ8hPgMWaWS66zuoe1aFQP0TMm8"></drupal-render-placeholder> </section> <div class="sharethis-wrapper"><span st_url="https://www.digett.com/insights/building-adwords-mobile-strategy" st_title="Building an AdWords Mobile Strategy" class="st_facebook_large" displayText="facebook"></span> <span st_url="https://www.digett.com/insights/building-adwords-mobile-strategy" st_title="Building an AdWords Mobile Strategy" class="st_linkedin_large" displayText="linkedin"></span> <span st_url="https://www.digett.com/insights/building-adwords-mobile-strategy" st_title="Building an AdWords Mobile Strategy" class="st_twitter_large" displayText="twitter"></span> <span st_url="https://www.digett.com/insights/building-adwords-mobile-strategy" st_title="Building an AdWords Mobile Strategy" class="st_email_large" displayText="email"></span> </div> Tue, 07 Jan 2014 14:30:40 +0000 Wes Mills 1070 at https://www.digett.com Getting Started With 4 Easy AdWords Scripts https://www.digett.com/insights/getting-started-4-easy-adwords-scripts <span>Getting Started With 4 Easy AdWords Scripts</span> <div class="field field--name-field-teaser-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/blog_card/public/filefield_images/field_teaser_image/google-adwords-scripts.png?itok=kJsfcim1" width="275" height="183" alt="" typeof="foaf:Image" /> </div> <span><span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span></span> <span>Thu, 12/05/2013 - 9:54am</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>If you aren’t already using scripts in your AdWords account, you’re missing out. The possibilities of what you can do with them are only limited by your creativity (and coding skills, obviously). Even for JavaScript rookies like myself, there are still easy scripts that can make your life easier.</p> <!--break--><h2>What is an AdWords script?</h2> <p><a href="https://developers.google.com/adwords/scripts/">AdWords scripts</a> allow a user to programmatically access their AdWords account using JavaScript. Like I said above, what you can do with this is only limited by your creativity.</p> <p>For example, let’s say you own a sports apparel store that specializes in NBA swag and you’re advertising jerseys using AdWords. During the NBA season, there are multiple games every day. Using JavaScript, you could write code that dynamically adjust bids higher for the teams that won. Brilliant, right?</p> <h2>Inputting the scripts</h2> <p>This is where we’ll start. You’ll find the “Create and Manage Scripts” menu option concealed under “Automate” on the campaigns tab.</p> <p><img alt="" src="/sites/default/files/scripts_step_1_0.png" /></p> <p>After navigating here, you’ll end up on a page where you can create, schedule, and manage all of your scripts. From here, select the “+ Script” button shown below.</p> <p><img alt="" src="/sites/default/files/scripts_step_2_0.png" /></p> <p>Now you’ll be shown the box where you can easily copy and paste any AdWords scripts you have. Remember to delete what shows up in the box by default when pasting a script.</p> <p><img alt="" src="/sites/default/files/scripts_step_3_0.png" /></p> <p>And finally, when you’re done adding your script and making the necessary changes, go ahead and save it. After you save, you can navigate back to the scripts menu and schedule your script.</p> <p><img alt="" src="/sites/default/files/scripts_step_4_0.png" /></p> <p> </p> <h2>Four easy-to-use AdWords scripts</h2> <p>My NBA example is complicated; the simpler scripts below are just four of my favorites that I use regularly. All of them require little programming knowledge and are essentially “plug and play.” If you’re hungry for more, my favorite <a href="http://www.freeadwordsscripts.com/">AdWords scripts blog</a> has a plethora of them to choose from. The source code for each script is found underneath setup instructions.</p> <h3>Daily account summary report</h3> <p>The origins of this script can be found <a href="https://developers.google.com/adwords/scripts/docs/solutions/account-summary">directly from Google</a>. This one is my favorite because I can check it every morning, wherever I am. Since it updates to a Google Spreadsheet, even checking it on your smartphone is nice. It gives a nice snapshot of performance from an account level.</p> <p><img alt="" src="/sites/default/files/account_summary_screenshot_0.png" /></p> <h4>Setup</h4> <p>This one does involve some initial setup. But getting it going is simple.</p> <ol> <li>First, make a copy of <a href="https://docs.google.com/spreadsheet/ccc?key=0Agg6qWimbbe4dG5rWUZRalRQUG16Tmx5d2wwb1lkR3c">this spreadsheet</a> in your Drive account. (File &gt; Make a copy…)</li> <li>Following the instructions above, create a new script then copy and paste the source code below.</li> <li>Be sure to update “SPREADSHEET_URL” with the URL of your new template.</li> <li>Lastly, to be sure you have it updating every morning, it has to be scheduled to run every day at a set time. Google recommends scheduling it at 5:00am, because there sometimes can be a delay in the statistics. </li> </ol> <div style="background: #f8f8f8; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"> <pre style="margin: 0; line-height: 125%"> <span style="color: #AA22FF; font-weight: bold">var</span> SPREADSHEET_URL <span style="color: #666666">=</span> <span style="color: #BB4444">"[YOUR_URL]"</span>; <span style="color: #AA22FF; font-weight: bold">function</span> main() { <span style="color: #AA22FF; font-weight: bold">var</span> spreadsheet <span style="color: #666666">=</span> SpreadsheetApp.openByUrl(SPREADSHEET_URL); spreadsheet.getRangeByName(<span style="color: #BB4444">"account_id_report"</span>).setValue(AdWordsApp.currentAccount().getCustomerId()); <span style="color: #AA22FF; font-weight: bold">var</span> yesterday <span style="color: #666666">=</span> getYesterday(); <span style="color: #AA22FF; font-weight: bold">var</span> last_check <span style="color: #666666">=</span> spreadsheet.getRangeByName(<span style="color: #BB4444">"last_check"</span>).getValue(); <span style="color: #008800; font-style: italic">// Checks every day from last day checked to yesterday inclusive. If there isn't a last date checked,</span> <span style="color: #008800; font-style: italic">// checks yesterday.</span> <span style="color: #AA22FF; font-weight: bold">var</span> date; <span style="color: #AA22FF; font-weight: bold">if</span> (last_check.length <span style="color: #666666">==</span> <span style="color: #666666">0</span>) { date <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(yesterday); } <span style="color: #AA22FF; font-weight: bold">else</span> { date <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(last_check); date.setDate(date.getDate() <span style="color: #666666">+</span> <span style="color: #666666">1</span>); } <span style="color: #AA22FF; font-weight: bold">var</span> rows <span style="color: #666666">=</span> []; <span style="color: #AA22FF; font-weight: bold">while</span> (date.getTime() <span style="color: #666666">&lt;=</span> yesterday.getTime()) { <span style="color: #AA22FF; font-weight: bold">var</span> row <span style="color: #666666">=</span> getReportRowForDate(date); rows.push([<span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(date), row[<span style="color: #BB4444">'Cost'</span>], row[<span style="color: #BB4444">'AverageCpc'</span>], row[<span style="color: #BB4444">'Ctr'</span>], row[<span style="color: #BB4444">'AveragePosition'</span>], row[<span style="color: #BB4444">'Impressions'</span>], row[<span style="color: #BB4444">'Clicks'</span>]]); date.setDate(date.getDate() <span style="color: #666666">+</span> <span style="color: #666666">1</span>); } <span style="color: #AA22FF; font-weight: bold">if</span> (rows.length <span style="color: #666666">&gt;</span> <span style="color: #666666">0</span>) { <span style="color: #AA22FF; font-weight: bold">var</span> access <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> SpreadsheetAccess(SPREADSHEET_URL, <span style="color: #BB4444">"Report"</span>); <span style="color: #AA22FF; font-weight: bold">var</span> emptyRow <span style="color: #666666">=</span> access.findEmptyRow(<span style="color: #666666">6</span>, <span style="color: #666666">2</span>); <span style="color: #AA22FF; font-weight: bold">if</span> (emptyRow <span style="color: #666666">&lt;</span> <span style="color: #666666">0</span>) { access.addRows(rows.length); emptyRow <span style="color: #666666">=</span> access.findEmptyRow(<span style="color: #666666">6</span>, <span style="color: #666666">2</span>); } access.writeRows(rows, emptyRow, <span style="color: #666666">2</span>); <span style="color: #AA22FF; font-weight: bold">var</span> last_check <span style="color: #666666">=</span> spreadsheet.getRangeByName(<span style="color: #BB4444">"last_check"</span>).setValue(yesterday); <span style="color: #AA22FF; font-weight: bold">var</span> email <span style="color: #666666">=</span> spreadsheet.getRangeByName(<span style="color: #BB4444">"email"</span>).getValue(); <span style="color: #AA22FF; font-weight: bold">if</span> (email) { sendEmail(email); } } } <span style="color: #AA22FF; font-weight: bold">function</span> sendEmail(email) { <span style="color: #AA22FF; font-weight: bold">var</span> day <span style="color: #666666">=</span> getYesterday(); <span style="color: #AA22FF; font-weight: bold">var</span> yesterdayRow <span style="color: #666666">=</span> getReportRowForDate(day); day.setDate(day.getDate() <span style="color: #666666">-</span> <span style="color: #666666">1</span>); <span style="color: #AA22FF; font-weight: bold">var</span> twoDaysAgoRow <span style="color: #666666">=</span> getReportRowForDate(day); day.setDate(day.getDate() <span style="color: #666666">-</span> <span style="color: #666666">5</span>); <span style="color: #AA22FF; font-weight: bold">var</span> weekAgoRow <span style="color: #666666">=</span> getReportRowForDate(day); <span style="color: #AA22FF; font-weight: bold">var</span> html <span style="color: #666666">=</span> []; html.push( <span style="color: #BB4444">"&lt;html&gt;"</span>, <span style="color: #BB4444">"&lt;body&gt;"</span>, <span style="color: #BB4444">"&lt;table width=800 cellpadding=0 border=0 cellspacing=0&gt;"</span>, <span style="color: #BB4444">"&lt;tr&gt;"</span>, <span style="color: #BB4444">"&lt;td colspan=2 align=right&gt;"</span>, <span style="color: #BB4444">"&lt;div style='font: italic normal 10pt Times New Roman, serif; margin: 0; color: #666; padding-right: 5px;'&gt;Powered by AdWords Scripts&lt;/div&gt;"</span>, <span style="color: #BB4444">"&lt;/td&gt;"</span>, <span style="color: #BB4444">"&lt;/tr&gt;"</span>, <span style="color: #BB4444">"&lt;tr bgcolor='#3c78d8'&gt;"</span>, <span style="color: #BB4444">"&lt;td width=500&gt;"</span>, <span style="color: #BB4444">"&lt;div style='font: normal 18pt verdana, sans-serif; padding: 3px 10px; color: white'&gt;Account Summary report&lt;/div&gt;"</span>, <span style="color: #BB4444">"&lt;/td&gt;"</span>, <span style="color: #BB4444">"&lt;td align=right&gt;"</span>, <span style="color: #BB4444">"&lt;div style='font: normal 18pt verdana, sans-serif; padding: 3px 10px; color: white'&gt;"</span>, AdWordsApp.currentAccount().getCustomerId(), <span style="color: #BB4444">"&lt;/h1&gt;"</span>, <span style="color: #BB4444">"&lt;/td&gt;"</span>, <span style="color: #BB4444">"&lt;/tr&gt;"</span>, <span style="color: #BB4444">"&lt;/table&gt;"</span>, <span style="color: #BB4444">"&lt;table width=800 cellpadding=0 border=0 cellspacing=0&gt;"</span>, <span style="color: #BB4444">"&lt;tr bgcolor='#ddd'&gt;"</span>, <span style="color: #BB4444">"&lt;td&gt;&lt;/td&gt;"</span>, <span style="color: #BB4444">"&lt;td style='font: 12pt verdana, sans-serif; padding: 5px 0px 5px 5px; background-color: #ddd; text-align: left'&gt;Yesterday&lt;/td&gt;"</span>, <span style="color: #BB4444">"&lt;td style='font: 12pt verdana, sans-serif; padding: 5px 0px 5px 5px; background-color: #ddd; text-align: left'&gt;Two Days Ago&lt;/td&gt;"</span>, <span style="color: #BB4444">"&lt;td style='font: 12pt verdana, sans-serif; padding: 5px 0px 5x 5px; background-color: #ddd; text-align: left'&gt;A week ago&lt;/td&gt;"</span>, <span style="color: #BB4444">"&lt;/tr&gt;"</span>, emailRow(<span style="color: #BB4444">'Cost'</span>, <span style="color: #BB4444">'Cost'</span>, yesterdayRow, twoDaysAgoRow, weekAgoRow), emailRow(<span style="color: #BB4444">'Average Cpc'</span>, <span style="color: #BB4444">'AverageCpc'</span>, yesterdayRow, twoDaysAgoRow, weekAgoRow), emailRow(<span style="color: #BB4444">'Ctr'</span>, <span style="color: #BB4444">'Ctr'</span>, yesterdayRow, twoDaysAgoRow, weekAgoRow), emailRow(<span style="color: #BB4444">'Average Position'</span>, <span style="color: #BB4444">'AveragePosition'</span>, yesterdayRow, twoDaysAgoRow, weekAgoRow), emailRow(<span style="color: #BB4444">'Impressions'</span>, <span style="color: #BB4444">'Impressions'</span>, yesterdayRow, twoDaysAgoRow, weekAgoRow), emailRow(<span style="color: #BB4444">'Clicks'</span>, <span style="color: #BB4444">'Clicks'</span>, yesterdayRow, twoDaysAgoRow, weekAgoRow), <span style="color: #BB4444">"&lt;/table&gt;"</span>, <span style="color: #BB4444">"&lt;/body&gt;"</span>, <span style="color: #BB4444">"&lt;/html&gt;"</span>); MailApp.sendEmail(email, <span style="color: #BB4444">"AdWords Account "</span> <span style="color: #666666">+</span> AdWordsApp.currentAccount().getCustomerId() <span style="color: #666666">+</span> <span style="color: #BB4444">" Summary Report"</span>, <span style="color: #BB4444">""</span>, {htmlBody<span style="color: #666666">:</span> html.join(<span style="color: #BB4444">"\n"</span>)}); } <span style="color: #AA22FF; font-weight: bold">function</span> emailRow(title, column, yesterdayRow, twoDaysAgoRow, weekAgoRow) { <span style="color: #AA22FF; font-weight: bold">return</span> <span style="color: #BB4444">"&lt;tr&gt; \</span> <span style="color: #BB4444"> &lt;td style='padding: 5px 10px'&gt;"</span> <span style="color: #666666">+</span> title <span style="color: #666666">+</span> <span style="color: #BB4444">"&lt;/td&gt; \</span> <span style="color: #BB4444"> &lt;td style='padding: 0px 10px'&gt;"</span> <span style="color: #666666">+</span> yesterdayRow[column] <span style="color: #666666">+</span> <span style="color: #BB4444">"&lt;/td&gt; \</span> <span style="color: #BB4444"> &lt;td style='padding: 0px 10px'&gt;"</span> <span style="color: #666666">+</span> twoDaysAgoRow[column] <span style="color: #666666">+</span> formatChangeString(yesterdayRow[column], twoDaysAgoRow[column]) <span style="color: #666666">+</span> <span style="color: #BB4444">"&lt;/td&gt; \</span> <span style="color: #BB4444"> &lt;td style='padding: 0px 10px'&gt;"</span> <span style="color: #666666">+</span> weekAgoRow[column] <span style="color: #666666">+</span> formatChangeString(yesterdayRow[column], weekAgoRow[column]) <span style="color: #666666">+</span> <span style="color: #BB4444">"&lt;/td&gt; \</span> <span style="color: #BB4444"> &lt;/tr&gt;"</span>; } <span style="color: #008800; font-style: italic">// returns noon in the timezone of the account</span> <span style="color: #AA22FF; font-weight: bold">function</span> getYesterday() { <span style="color: #AA22FF; font-weight: bold">var</span> now <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(Utilities.formatDate(<span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(), AdWordsApp.currentAccount().getTimeZone(), <span style="color: #BB4444">"MMM dd,yyyy HH:mm:ss"</span>)); <span style="color: #AA22FF; font-weight: bold">var</span> yesterday <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(now.getTime() <span style="color: #666666">-</span> <span style="color: #666666">24</span> <span style="color: #666666">*</span> <span style="color: #666666">3600</span> <span style="color: #666666">*</span> <span style="color: #666666">1000</span>); yesterday.setHours(<span style="color: #666666">12</span>); <span style="color: #AA22FF; font-weight: bold">return</span> yesterday; } <span style="color: #AA22FF; font-weight: bold">function</span> getReportRowForDate(date) { <span style="color: #AA22FF; font-weight: bold">var</span> accountDate <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(Utilities.formatDate(date, AdWordsApp.currentAccount().getTimeZone(), <span style="color: #BB4444">"MMM dd,yyyy HH:mm:ss"</span>)); <span style="color: #AA22FF; font-weight: bold">var</span> dateString <span style="color: #666666">=</span> Utilities.formatDate(accountDate, <span style="color: #BB4444">"PST"</span>, <span style="color: #BB4444">"yyyyMMdd"</span>); <span style="color: #AA22FF; font-weight: bold">return</span> getReportRowForDuring(dateString <span style="color: #666666">+</span> <span style="color: #BB4444">","</span> <span style="color: #666666">+</span> dateString); } <span style="color: #AA22FF; font-weight: bold">function</span> getReportRowForDuring(during) { <span style="color: #AA22FF; font-weight: bold">var</span> report <span style="color: #666666">=</span> AdWordsApp.report( <span style="color: #BB4444">"SELECT Cost, AverageCpc, Ctr, AveragePosition, Impressions, Clicks "</span> <span style="color: #666666">+</span> <span style="color: #BB4444">"FROM ACCOUNT_PERFORMANCE_REPORT "</span> <span style="color: #666666">+</span> <span style="color: #BB4444">"DURING "</span> <span style="color: #666666">+</span> during); <span style="color: #AA22FF; font-weight: bold">return</span> report.rows().next(); } <span style="color: #AA22FF; font-weight: bold">function</span> formatChangeString(newValue, oldValue) { <span style="color: #AA22FF; font-weight: bold">var</span> x <span style="color: #666666">=</span> newValue.indexOf(<span style="color: #BB4444">'%'</span>); <span style="color: #AA22FF; font-weight: bold">if</span> (x <span style="color: #666666">!=</span> <span style="color: #666666">-1</span>) { newValue <span style="color: #666666">=</span> newValue.substring(<span style="color: #666666">0</span>, x); <span style="color: #AA22FF; font-weight: bold">var</span> y <span style="color: #666666">=</span> oldValue.indexOf(<span style="color: #BB4444">'%'</span>); oldValue <span style="color: #666666">=</span> oldValue.substring(<span style="color: #666666">0</span>, y); } <span style="color: #AA22FF; font-weight: bold">var</span> change <span style="color: #666666">=</span> <span style="color: #AA22FF">parseFloat</span>(newValue <span style="color: #666666">-</span> oldValue).toFixed(<span style="color: #666666">2</span>); <span style="color: #AA22FF; font-weight: bold">var</span> changeString <span style="color: #666666">=</span> change; <span style="color: #AA22FF; font-weight: bold">if</span> (x <span style="color: #666666">!=</span> <span style="color: #666666">-1</span>) { changeString <span style="color: #666666">=</span> change <span style="color: #666666">+</span> <span style="color: #BB4444">'%'</span>; } <span style="color: #AA22FF; font-weight: bold">if</span> (change <span style="color: #666666">&gt;=</span> <span style="color: #666666">0</span>) { <span style="color: #AA22FF; font-weight: bold">return</span> <span style="color: #BB4444">"&lt;span style='color: #38761d; font-size: 8pt'&gt; (+"</span> <span style="color: #666666">+</span> changeString <span style="color: #666666">+</span> <span style="color: #BB4444">")&lt;/span&gt;"</span>; } <span style="color: #AA22FF; font-weight: bold">else</span> { <span style="color: #AA22FF; font-weight: bold">return</span> <span style="color: #BB4444">"&lt;span style='color: #cc0000; font-size: 8pt'&gt; ("</span> <span style="color: #666666">+</span> changeString <span style="color: #666666">+</span> <span style="color: #BB4444">")&lt;/span&gt;"</span>; } } <span style="color: #AA22FF; font-weight: bold">function</span> SpreadsheetAccess(spreadsheetUrl, sheetName) { <span style="color: #AA22FF; font-weight: bold">this</span>.spreadsheet <span style="color: #666666">=</span> SpreadsheetApp.openByUrl(spreadsheetUrl); <span style="color: #AA22FF; font-weight: bold">this</span>.sheet <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">this</span>.spreadsheet.getSheetByName(sheetName); <span style="color: #008800; font-style: italic">// what column should we be looking at to check whether the row is empty?</span> <span style="color: #AA22FF; font-weight: bold">this</span>.findEmptyRow <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">function</span>(minRow, column) { <span style="color: #AA22FF; font-weight: bold">var</span> values <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">this</span>.sheet.getRange(minRow, column, <span style="color: #AA22FF; font-weight: bold">this</span>.sheet.getMaxRows(), <span style="color: #666666">1</span>).getValues(); <span style="color: #AA22FF; font-weight: bold">for</span> (<span style="color: #AA22FF; font-weight: bold">var</span> i <span style="color: #666666">=</span> <span style="color: #666666">0</span>; i <span style="color: #666666">&lt;</span> values.length; i <span style="color: #666666">++</span>) { <span style="color: #AA22FF; font-weight: bold">if</span> (<span style="color: #666666">!</span>values[i][<span style="color: #666666">0</span>]) { <span style="color: #AA22FF; font-weight: bold">return</span> i <span style="color: #666666">+</span> minRow; } } <span style="color: #AA22FF; font-weight: bold">return</span> <span style="color: #666666">-1</span>; } <span style="color: #AA22FF; font-weight: bold">this</span>.addRows <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">function</span>(howMany) { <span style="color: #AA22FF; font-weight: bold">this</span>.sheet.insertRowsAfter(<span style="color: #AA22FF; font-weight: bold">this</span>.sheet.getMaxRows(), howMany); } <span style="color: #AA22FF; font-weight: bold">this</span>.writeRows <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">function</span>(rows, startRow, startColumn) { <span style="color: #AA22FF; font-weight: bold">this</span>.sheet.getRange(startRow, startColumn, rows.length, rows[<span style="color: #666666">0</span>].length).setValues(rows); } } </pre></div> <h3> </h3> <h3>Search query performance report</h3> <p>Looking at your search queries at least once a week is something that you should be doing to look for more potential negative and positive keywords. This script pulls search query performance over the last seven days, outputs it in a Google Doc, and emails a user-defined list of email addresses when it’s finished. The author of this script is <a href="http://www.freeadwordsscripts.com/2013/03/store-search-query-performance-report.html">Russ Savage</a> and you can find all of his awesome scripts on his site.</p> <h4>Setup</h4> <p>The setup here is fairly straightforward. Create a new Google Doc, input your Google Doc URL and email(s), then you’re good to go.</p> <div style="background: #f8f8f8; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"> <pre style="margin: 0; line-height: 125%"> <span style="color: #008800; font-style: italic">//-----------------------------------</span> <span style="color: #008800; font-style: italic">// Store Search Query Perf Report in Google Doc</span> <span style="color: #008800; font-style: italic">// Created By: Russ Savage</span> <span style="color: #008800; font-style: italic">// FreeAdWordsScripts.com</span> <span style="color: #008800; font-style: italic">//-----------------------------------</span> <span style="color: #AA22FF; font-weight: bold">function</span> main() { <span style="color: #AA22FF; font-weight: bold">var</span> date_range <span style="color: #666666">=</span> <span style="color: #BB4444">'LAST_7_DAYS'</span>; <span style="color: #AA22FF; font-weight: bold">var</span> ignore_exact <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">true</span>; <span style="color: #AA22FF; font-weight: bold">var</span> to <span style="color: #666666">=</span> [<span style="color: #BB4444">"email_1@my_company.com"</span>,<span style="color: #BB4444">"email_2@my_company.com"</span>]; <span style="color: #AA22FF; font-weight: bold">var</span> spreadsheet_url <span style="color: #666666">=</span> <span style="color: #BB4444">"your spreadsheet url goes here"</span>; <span style="color: #AA22FF; font-weight: bold">var</span> columns <span style="color: #666666">=</span> [<span style="color: #BB4444">'AccountDescriptiveName'</span>, <span style="color: #BB4444">'CampaignName'</span>, <span style="color: #BB4444">'AdGroupName'</span>, <span style="color: #BB4444">'KeywordTextMatchingQuery'</span>, <span style="color: #BB4444">'MatchType'</span>, <span style="color: #BB4444">'Query'</span>, <span style="color: #BB4444">'Device'</span>, <span style="color: #BB4444">'Impressions'</span>, <span style="color: #BB4444">'Clicks'</span>, <span style="color: #BB4444">'Cost'</span>, <span style="color: #BB4444">'Conversions'</span>, <span style="color: #BB4444">'AverageCpc'</span>, <span style="color: #BB4444">'CostPerConversion'</span>, <span style="color: #BB4444">'ConversionRate'</span>, <span style="color: #BB4444">'Ctr'</span>]; <span style="color: #AA22FF; font-weight: bold">var</span> columns_str <span style="color: #666666">=</span> columns.join(<span style="color: #BB4444">','</span>) <span style="color: #666666">+</span> <span style="color: #BB4444">" "</span>; <span style="color: #AA22FF; font-weight: bold">var</span> sheet <span style="color: #666666">=</span> getSpreadsheet(spreadsheet_url).getActiveSheet(); sheet.clear(); sheet.appendRow(columns); <span style="color: #AA22FF; font-weight: bold">var</span> report_iter <span style="color: #666666">=</span> AdWordsApp.report( <span style="color: #BB4444">'SELECT '</span> <span style="color: #666666">+</span> columns_str <span style="color: #666666">+</span> <span style="color: #BB4444">'FROM SEARCH_QUERY_PERFORMANCE_REPORT '</span> <span style="color: #666666">+</span> <span style="color: #BB4444">'DURING '</span> <span style="color: #666666">+</span> date_range, { includeZeroImpressions<span style="color: #666666">:</span> <span style="color: #AA22FF; font-weight: bold">false</span>, apiVersion<span style="color: #666666">:</span> <span style="color: #BB4444">'v201302'</span> }).rows(); <span style="color: #AA22FF; font-weight: bold">while</span>(report_iter.hasNext()) { <span style="color: #AA22FF; font-weight: bold">var</span> row <span style="color: #666666">=</span> report_iter.next(); <span style="color: #AA22FF; font-weight: bold">if</span>(ignore_exact <span style="color: #666666">&amp;&amp;</span> row[<span style="color: #BB4444">'MatchType'</span>].indexOf(<span style="color: #BB4444">'exact'</span>) <span style="color: #666666">&gt;=</span> <span style="color: #666666">0</span>) { <span style="color: #AA22FF; font-weight: bold">continue</span>; } <span style="color: #AA22FF; font-weight: bold">var</span> row_array <span style="color: #666666">=</span> []; <span style="color: #AA22FF; font-weight: bold">for</span>(<span style="color: #AA22FF; font-weight: bold">var</span> i <span style="color: #AA22FF; font-weight: bold">in</span> columns) { row_array.push(row[columns[i]]); } sheet.appendRow(row_array); } <span style="color: #AA22FF; font-weight: bold">for</span>(<span style="color: #AA22FF; font-weight: bold">var</span> i <span style="color: #AA22FF; font-weight: bold">in</span> to) { MailApp.sendEmail(to[i], <span style="color: #BB4444">"Search Query Report Ready"</span>, spreadsheet_url); } } <span style="color: #AA22FF; font-weight: bold">function</span> getSpreadsheet(spreadsheetUrl) { <span style="color: #AA22FF; font-weight: bold">var</span> matches <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">RegExp</span>(<span style="color: #BB4444">'key=([^&amp;#]*)'</span>).exec(spreadsheetUrl); <span style="color: #AA22FF; font-weight: bold">if</span> (<span style="color: #666666">!</span>matches <span style="color: #666666">||</span> <span style="color: #666666">!</span>matches[<span style="color: #666666">1</span>]) { <span style="color: #AA22FF; font-weight: bold">throw</span> <span style="color: #BB4444">'Invalid spreadsheet URL: '</span> <span style="color: #666666">+</span> spreadsheetUrl; } <span style="color: #AA22FF; font-weight: bold">var</span> spreadsheetId <span style="color: #666666">=</span> matches[<span style="color: #666666">1</span>]; <span style="color: #AA22FF; font-weight: bold">return</span> SpreadsheetApp.openById(spreadsheetId); } </pre></div> <h3> </h3> <h3>Track account, campaign, and ad group level Quality Scores</h3> <p>If you’re unsure about what exactly Quality Score is, I would recommend reading about <a href="/insights/how-google-calculates-adwords-quality-score">how Quality Score is calculated</a> and <a href="/insights/how-google-calculates-adwords-quality-score">everything that goes into Quality Score</a>. This script is also from <a href="http://www.freeadwordsscripts.com/2013/04/store-account-campaign-and-adgroup.html">Russ Savage</a>, and it does something that Google doesn’t allow you to do: view Quality Scores over time.</p> <p>It’s arguable whether there’s actionable insight available in doing this, but it’s always nice to have the data available. This script looks at the top 50,000 keywords in your account. (As a sidenote, re-running the script does not overwrite the previous entries.) </p> <h4>Setup</h4> <p>Create a new Google Spreadsheet and copy the URL in the script. Once you’ve done that, copy the script into AdWords and schedule it to run every 30 days.</p> <div style="background: #f8f8f8; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"> <pre style="margin: 0; line-height: 125%"> <span style="color: #008800; font-style: italic">/************************************</span> <span style="color: #008800; font-style: italic">* Store Account, Campaign, and AdGroup Level Quality Score</span> <span style="color: #008800; font-style: italic">* Version 1.2</span> <span style="color: #008800; font-style: italic">* ChangeLog v1.2</span> <span style="color: #008800; font-style: italic">* - Changed status to ENABLED</span> <span style="color: #008800; font-style: italic">* ChangeLog v1.1</span> <span style="color: #008800; font-style: italic">* - Added APPEND option</span> <span style="color: #008800; font-style: italic">* - Added ability to create spreadsheet sheets</span> <span style="color: #008800; font-style: italic">* - Updated logic for faster spreadsheet insertion</span> <span style="color: #008800; font-style: italic">* Created By: Russ Savage</span> <span style="color: #008800; font-style: italic">* FreeAdWordsScripts.com</span> <span style="color: #008800; font-style: italic">**************************************/</span> <span style="color: #AA22FF; font-weight: bold">var</span> SIG_FIGS <span style="color: #666666">=</span> <span style="color: #666666">10000</span>; <span style="color: #008800; font-style: italic">//this will give you 4 decimal places of accuracy</span> <span style="color: #AA22FF; font-weight: bold">var</span> APPEND <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">true</span>; <span style="color: #008800; font-style: italic">//set this to false to overwrite your data daily</span> <span style="color: #AA22FF; font-weight: bold">function</span> main() { <span style="color: #AA22FF; font-weight: bold">var</span> SPREADSHEET_URL <span style="color: #666666">=</span> <span style="color: #BB4444">"PUT YOUR SPREADSHEET HERE"</span>; <span style="color: #AA22FF; font-weight: bold">var</span> date_str <span style="color: #666666">=</span> Utilities.formatDate(<span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(),AdWordsApp.currentAccount().getTimeZone(),<span style="color: #BB4444">'yyyy-MM-dd'</span>); <span style="color: #AA22FF; font-weight: bold">var</span> account_id <span style="color: #666666">=</span> AdWordsApp.currentAccount().getCustomerId(); <span style="color: #AA22FF; font-weight: bold">var</span> kw_iter <span style="color: #666666">=</span> AdWordsApp.keywords() .withCondition(<span style="color: #BB4444">"Status = ENABLED"</span>) .forDateRange(<span style="color: #BB4444">"LAST_30_DAYS"</span>) .withCondition(<span style="color: #BB4444">"Impressions &gt; 0"</span>) .orderBy(<span style="color: #BB4444">"Impressions DESC"</span>) .withLimit(<span style="color: #666666">50000</span>) .get(); <span style="color: #008800; font-style: italic">//This is where i am going to store all my data</span> <span style="color: #AA22FF; font-weight: bold">var</span> account_score_map <span style="color: #666666">=</span> {}; <span style="color: #AA22FF; font-weight: bold">var</span> camp_score_map <span style="color: #666666">=</span> {}; <span style="color: #AA22FF; font-weight: bold">var</span> ag_score_map <span style="color: #666666">=</span> {}; <span style="color: #AA22FF; font-weight: bold">while</span>(kw_iter.hasNext()) { <span style="color: #AA22FF; font-weight: bold">var</span> kw <span style="color: #666666">=</span> kw_iter.next(); <span style="color: #AA22FF; font-weight: bold">var</span> kw_stats <span style="color: #666666">=</span> kw.getStatsFor(<span style="color: #BB4444">"LAST_30_DAYS"</span>); <span style="color: #AA22FF; font-weight: bold">var</span> imps <span style="color: #666666">=</span> kw_stats.getImpressions(); <span style="color: #AA22FF; font-weight: bold">var</span> qs <span style="color: #666666">=</span> kw.getQualityScore(); <span style="color: #AA22FF; font-weight: bold">var</span> camp_name <span style="color: #666666">=</span> kw.getCampaign().getName(); <span style="color: #AA22FF; font-weight: bold">var</span> ag_name <span style="color: #666666">=</span> kw.getAdGroup().getName(); <span style="color: #AA22FF; font-weight: bold">var</span> imps_weighted_qs <span style="color: #666666">=</span> (qs<span style="color: #666666">*</span>imps); _loadEntityMap(account_score_map,account_id,imps_weighted_qs,imps); _loadEntityMap(camp_score_map,camp_name,imps_weighted_qs,imps); _loadEntityMap(ag_score_map,camp_name <span style="color: #666666">+</span> <span style="color: #BB4444">"~~!~~"</span> <span style="color: #666666">+</span> ag_name,imps_weighted_qs,imps); } <span style="color: #008800; font-style: italic">//Make sure the spreadsheet has all the sheets</span> _addSpreadsheetSheets(SPREADSHEET_URL,[<span style="color: #BB4444">'Account'</span>,<span style="color: #BB4444">'Campaign'</span>,<span style="color: #BB4444">'AdGroup'</span>]); <span style="color: #008800; font-style: italic">//Load Account level QS</span> <span style="color: #AA22FF; font-weight: bold">var</span> sheet <span style="color: #666666">=</span> SpreadsheetApp.openByUrl(SPREADSHEET_URL).getSheetByName(<span style="color: #BB4444">'Account'</span>); _addHeadingsIfNeeded(sheet,[<span style="color: #BB4444">'Date'</span>,<span style="color: #BB4444">'Account'</span>,<span style="color: #BB4444">'QS'</span>]); <span style="color: #AA22FF; font-weight: bold">var</span> e <span style="color: #666666">=</span> account_score_map[account_id]; sheet.appendRow([date_str,account_id,<span style="color: #AA22FF">Math</span>.round(e.imps_weighted_qs <span style="color: #666666">/</span> e.tot_imps <span style="color: #666666">*</span> SIG_FIGS)<span style="color: #666666">/</span>SIG_FIGS]); <span style="color: #008800; font-style: italic">//Load Campaign level QS</span> sheet <span style="color: #666666">=</span> SpreadsheetApp.openByUrl(SPREADSHEET_URL).getSheetByName(<span style="color: #BB4444">'Campaign'</span>); _addHeadingsIfNeeded(sheet,[<span style="color: #BB4444">'Date'</span>,<span style="color: #BB4444">'Account'</span>,<span style="color: #BB4444">'Campaign'</span>,<span style="color: #BB4444">'QS'</span>]); <span style="color: #AA22FF; font-weight: bold">var</span> to_write <span style="color: #666666">=</span> []; <span style="color: #AA22FF; font-weight: bold">for</span>(<span style="color: #AA22FF; font-weight: bold">var</span> i <span style="color: #AA22FF; font-weight: bold">in</span> camp_score_map) { <span style="color: #AA22FF; font-weight: bold">var</span> e <span style="color: #666666">=</span> camp_score_map[i]; to_write.push([date_str, account_id, i, <span style="color: #AA22FF">Math</span>.round(e.imps_weighted_qs <span style="color: #666666">/</span> e.tot_imps <span style="color: #666666">*</span> SIG_FIGS)<span style="color: #666666">/</span>SIG_FIGS]); } _writeDataToSheet(sheet,to_write); <span style="color: #008800; font-style: italic">//Load Campaign + AdGroup level QS</span> sheet <span style="color: #666666">=</span> SpreadsheetApp.openByUrl(SPREADSHEET_URL).getSheetByName(<span style="color: #BB4444">'AdGroup'</span>); _addHeadingsIfNeeded(sheet,[<span style="color: #BB4444">'Date'</span>,<span style="color: #BB4444">'Account'</span>,<span style="color: #BB4444">'Campaign'</span>,<span style="color: #BB4444">'AdGroup'</span>,<span style="color: #BB4444">'QS'</span>]); to_write <span style="color: #666666">=</span> []; <span style="color: #AA22FF; font-weight: bold">for</span>(<span style="color: #AA22FF; font-weight: bold">var</span> i <span style="color: #AA22FF; font-weight: bold">in</span> ag_score_map) { <span style="color: #AA22FF; font-weight: bold">var</span> e <span style="color: #666666">=</span> ag_score_map[i]; to_write.push([date_str, account_id, i.split(<span style="color: #BB4444">'~~!~~'</span>)[<span style="color: #666666">0</span>], i.split(<span style="color: #BB4444">'~~!~~'</span>)[<span style="color: #666666">1</span>], <span style="color: #AA22FF">Math</span>.round(e.imps_weighted_qs <span style="color: #666666">/</span> e.tot_imps <span style="color: #666666">*</span> SIG_FIGS)<span style="color: #666666">/</span>SIG_FIGS]); } _writeDataToSheet(sheet,to_write); } <span style="color: #008800; font-style: italic">// Super fast spreadsheet insertion</span> <span style="color: #AA22FF; font-weight: bold">function</span> _writeDataToSheet(sheet,to_write) { <span style="color: #AA22FF; font-weight: bold">var</span> last_row <span style="color: #666666">=</span> sheet.getLastRow(); <span style="color: #AA22FF; font-weight: bold">var</span> numRows <span style="color: #666666">=</span> sheet.getMaxRows(); <span style="color: #AA22FF; font-weight: bold">if</span>((numRows<span style="color: #666666">-</span>last_row) <span style="color: #666666">&lt;</span> to_write.length) { sheet.insertRows(last_row<span style="color: #666666">+1</span>,to_write.length<span style="color: #666666">-</span>numRows<span style="color: #666666">+</span>last_row); } <span style="color: #AA22FF; font-weight: bold">var</span> range <span style="color: #666666">=</span> sheet.getRange(last_row<span style="color: #666666">+1</span>,<span style="color: #666666">1</span>,to_write.length,to_write[<span style="color: #666666">0</span>].length); range.setValues(to_write); } <span style="color: #008800; font-style: italic">// Helper function to add the sheets to the spreadsheet if needed</span> <span style="color: #AA22FF; font-weight: bold">function</span> _addSpreadsheetSheets(url,sheet_names) { <span style="color: #AA22FF; font-weight: bold">var</span> spreadsheet <span style="color: #666666">=</span> SpreadsheetApp.openByUrl(url); <span style="color: #AA22FF; font-weight: bold">var</span> all_sheets <span style="color: #666666">=</span> spreadsheet.getSheets(); <span style="color: #AA22FF; font-weight: bold">var</span> all_sheet_names <span style="color: #666666">=</span> []; <span style="color: #AA22FF; font-weight: bold">for</span>(<span style="color: #AA22FF; font-weight: bold">var</span> i <span style="color: #AA22FF; font-weight: bold">in</span> all_sheets) { all_sheet_names.push(all_sheets[i].getName()); } <span style="color: #AA22FF; font-weight: bold">for</span>(<span style="color: #AA22FF; font-weight: bold">var</span> i <span style="color: #AA22FF; font-weight: bold">in</span> sheet_names) { <span style="color: #AA22FF; font-weight: bold">var</span> name <span style="color: #666666">=</span> sheet_names[i]; <span style="color: #AA22FF; font-weight: bold">if</span>(all_sheet_names.indexOf(name) <span style="color: #666666">==</span> <span style="color: #666666">-1</span>) { spreadsheet.insertSheet(name); } <span style="color: #AA22FF; font-weight: bold">else</span> { <span style="color: #AA22FF; font-weight: bold">if</span>(<span style="color: #666666">!</span>APPEND) { spreadsheet.getSheetByName(name).clear(); } } } } <span style="color: #008800; font-style: italic">// Helper function to load the map for storing data</span> <span style="color: #AA22FF; font-weight: bold">function</span> _loadEntityMap(map,key,imps_weighted_qs,imps) { <span style="color: #AA22FF; font-weight: bold">if</span>(<span style="color: #666666">!</span>map[key]) { map[key] <span style="color: #666666">=</span> { imps_weighted_qs <span style="color: #666666">:</span> imps_weighted_qs, tot_imps <span style="color: #666666">:</span> imps }; } <span style="color: #AA22FF; font-weight: bold">else</span> { map[key].imps_weighted_qs <span style="color: #666666">+=</span> imps_weighted_qs; map[key].tot_imps <span style="color: #666666">+=</span> imps; } } <span style="color: #008800; font-style: italic">//Helper function to add headers to sheet if needed</span> <span style="color: #AA22FF; font-weight: bold">function</span> _addHeadingsIfNeeded(sheet,headings) { <span style="color: #AA22FF; font-weight: bold">if</span>(sheet.getRange(<span style="color: #BB4444">'A1:A1'</span>).getValues()[<span style="color: #666666">0</span>][<span style="color: #666666">0</span>] <span style="color: #666666">==</span> <span style="color: #BB4444">""</span>) { sheet.clear(); sheet.appendRow(headings); } } </pre></div> <h3> </h3> <h3>Ad, ad group, keyword, or campaign creation date</h3> <p>Yet another script from the <a href="http://www.freeadwordsscripts.com/2013/07/figuring-out-when-your-ad-was-created.html">Russ Savage gold mine</a>. Because Google doesn’t actually store when these entities were created, the script uses the day it first started receiving impressions, which generally is the day it was created.</p> <p>This is most useful for A/B testing and seeing how long specific ads have been running. When A/B testing, it’s always important to leave enough time to collect data that can become actionable insight. Having a label showing the date created helps to make sure you don’t make changes to your account too soon (or too late). </p> <h4>Setup</h4> <p>As far as setting up goes, this one is by far the easiest. Copy and paste the code in a new script and define which entity you want to track in the “ENTITY” line (if you want to track all of them, make a new script for each one). And you’re done.</p> <p>Depending on your account size, this script can take some time to complete so be patient!</p> <div style="background: #f8f8f8; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"> <pre style="margin: 0; line-height: 125%"> <span style="color: #008800; font-style: italic">/**************************************</span> <span style="color: #008800; font-style: italic">* Track Entity Creation Date</span> <span style="color: #008800; font-style: italic">* Version 1.4</span> <span style="color: #008800; font-style: italic">* Changelog v1.4</span> <span style="color: #008800; font-style: italic">* - Removed apiVersion from reporting call</span> <span style="color: #008800; font-style: italic">* Changelog v1.3</span> <span style="color: #008800; font-style: italic">* - Updated script to handle all entities</span> <span style="color: #008800; font-style: italic">* Changelog v1.2</span> <span style="color: #008800; font-style: italic">* - Fixed an issue with comparing dates</span> <span style="color: #008800; font-style: italic">* ChangeLog v1.1</span> <span style="color: #008800; font-style: italic">* - Updated logic to work with larger accounts</span> <span style="color: #008800; font-style: italic">* Created By: Russ Savage</span> <span style="color: #008800; font-style: italic">* http://www.FreeAdWordsScripts.com</span> <span style="color: #008800; font-style: italic">**************************************/</span> <span style="color: #008800; font-style: italic">//All my labels will start with this. For example: Created:2013-05-01</span> <span style="color: #AA22FF; font-weight: bold">var</span> LABEL_PREFIX <span style="color: #666666">=</span> <span style="color: #BB4444">'Created:'</span>; <span style="color: #AA22FF; font-weight: bold">var</span> DAYS_IN_REPORT <span style="color: #666666">=</span> <span style="color: #666666">30</span>; <span style="color: #AA22FF; font-weight: bold">var</span> ENTITY <span style="color: #666666">=</span> <span style="color: #BB4444">'ad'</span>; <span style="color: #008800; font-style: italic">//or adgroup or keyword or campaign</span> <span style="color: #AA22FF; font-weight: bold">function</span> main() { <span style="color: #008800; font-style: italic">//First we get the impression history of our entity</span> <span style="color: #AA22FF; font-weight: bold">var</span> ret_map <span style="color: #666666">=</span> getImpressionHistory(); <span style="color: #008800; font-style: italic">//Then we apply our labels</span> applyLabels(ret_map); } <span style="color: #008800; font-style: italic">//Function to apply labels to the ads in an account</span> <span style="color: #AA22FF; font-weight: bold">function</span> applyLabels(ret_map) { <span style="color: #AA22FF; font-weight: bold">var</span> iter; <span style="color: #AA22FF; font-weight: bold">if</span>(ENTITY <span style="color: #666666">===</span> <span style="color: #BB4444">'campaign'</span>) { iter <span style="color: #666666">=</span> AdWordsApp.campaigns().get(); } <span style="color: #AA22FF; font-weight: bold">if</span>(ENTITY <span style="color: #666666">===</span> <span style="color: #BB4444">'adgroup'</span>) { iter <span style="color: #666666">=</span> AdWordsApp.adGroups().get(); } <span style="color: #AA22FF; font-weight: bold">if</span>(ENTITY <span style="color: #666666">===</span> <span style="color: #BB4444">'ad'</span>) { iter <span style="color: #666666">=</span> AdWordsApp.ads().get(); } <span style="color: #AA22FF; font-weight: bold">if</span>(ENTITY <span style="color: #666666">===</span> <span style="color: #BB4444">'keyword'</span>) { iter <span style="color: #666666">=</span> AdWordsApp.keywords().get(); } <span style="color: #AA22FF; font-weight: bold">while</span>(iter.hasNext()) { <span style="color: #AA22FF; font-weight: bold">var</span> entity <span style="color: #666666">=</span> iter.next(); <span style="color: #AA22FF; font-weight: bold">var</span> id <span style="color: #666666">=</span> entity.getId(); <span style="color: #AA22FF; font-weight: bold">if</span>(ret_map[id]) { <span style="color: #AA22FF; font-weight: bold">var</span> label_name <span style="color: #666666">=</span> LABEL_PREFIX<span style="color: #666666">+</span>Utilities.formatDate(ret_map[id], AdWordsApp.currentAccount().getTimeZone(), <span style="color: #BB4444">"yyyy-MM-dd"</span>); createLabelIfNeeded(label_name); entity.applyLabel(label_name); } } } <span style="color: #008800; font-style: italic">//This is a helper function to create the label if it does not already exist</span> <span style="color: #AA22FF; font-weight: bold">function</span> createLabelIfNeeded(name) { <span style="color: #AA22FF; font-weight: bold">if</span>(<span style="color: #666666">!</span>AdWordsApp.labels().withCondition(<span style="color: #BB4444">"Name = '"</span><span style="color: #666666">+</span>name<span style="color: #666666">+</span><span style="color: #BB4444">"'"</span>).get().hasNext()) { AdWordsApp.createLabel(name); } } <span style="color: #008800; font-style: italic">//A helper function to find the date days ago</span> <span style="color: #AA22FF; font-weight: bold">function</span> getDateDaysAgo(days) { <span style="color: #AA22FF; font-weight: bold">var</span> the_past <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(); the_past.setDate(the_past.getDate() <span style="color: #666666">-</span> days); <span style="color: #AA22FF; font-weight: bold">return</span> Utilities.formatDate(the_past,AdWordsApp.currentAccount().getTimeZone(),<span style="color: #BB4444">"yyyyMMdd"</span>); } <span style="color: #008800; font-style: italic">//A helper function to compare dates.</span> <span style="color: #008800; font-style: italic">//Copied from: http://goo.gl/uW48a</span> <span style="color: #AA22FF; font-weight: bold">function</span> diffDays(firstDate,secondDate) { <span style="color: #AA22FF; font-weight: bold">var</span> oneDay <span style="color: #666666">=</span> <span style="color: #666666">24*60*60*1000</span>; <span style="color: #008800; font-style: italic">// hours*minutes*seconds*milliseconds</span> <span style="color: #AA22FF; font-weight: bold">return</span> <span style="color: #AA22FF">Math</span>.round(<span style="color: #AA22FF">Math</span>.abs((firstDate.getTime() <span style="color: #666666">-</span> secondDate.getTime())<span style="color: #666666">/</span>(oneDay))); } <span style="color: #AA22FF; font-weight: bold">function</span> getImpressionHistory() { <span style="color: #AA22FF; font-weight: bold">var</span> API_VERSION <span style="color: #666666">=</span> { includeZeroImpressions <span style="color: #666666">:</span> <span style="color: #AA22FF; font-weight: bold">false</span> }; <span style="color: #AA22FF; font-weight: bold">var</span> first_date <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(<span style="color: #BB4444">'10/23/2000'</span>); <span style="color: #AA22FF; font-weight: bold">var</span> max_days_ago <span style="color: #666666">=</span> diffDays(first_date,<span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>()); <span style="color: #AA22FF; font-weight: bold">var</span> cols <span style="color: #666666">=</span> [<span style="color: #BB4444">'Date'</span>,<span style="color: #BB4444">'Id'</span>,<span style="color: #BB4444">'Impressions'</span>]; <span style="color: #AA22FF; font-weight: bold">var</span> report <span style="color: #666666">=</span> { <span style="color: #BB4444">'campaign'</span> <span style="color: #666666">:</span> <span style="color: #BB4444">'CAMPAIGN_PERFORMANCE_REPORT'</span>, <span style="color: #BB4444">'adgroup'</span> <span style="color: #666666">:</span> <span style="color: #BB4444">'ADGROUP_PERFORMANCE_REPORT'</span>, <span style="color: #BB4444">'ad'</span> <span style="color: #666666">:</span> <span style="color: #BB4444">'AD_PERFORMANCE_REPORT'</span>, <span style="color: #BB4444">'keyword'</span> <span style="color: #666666">:</span> <span style="color: #BB4444">'KEYWORDS_PERFORMANCE_REPORT'</span>}[ENTITY]; <span style="color: #AA22FF; font-weight: bold">var</span> ret_map <span style="color: #666666">=</span> {}; <span style="color: #AA22FF; font-weight: bold">var</span> prev_days_ago <span style="color: #666666">=</span> <span style="color: #666666">0</span>; <span style="color: #AA22FF; font-weight: bold">for</span>(<span style="color: #AA22FF; font-weight: bold">var</span> i <span style="color: #666666">=</span> DAYS_IN_REPORT; i <span style="color: #666666">&lt;</span> max_days_ago; i<span style="color: #666666">+=</span>DAYS_IN_REPORT) { <span style="color: #AA22FF; font-weight: bold">var</span> start_date <span style="color: #666666">=</span> getDateDaysAgo(i); <span style="color: #AA22FF; font-weight: bold">var</span> end_date <span style="color: #666666">=</span> getDateDaysAgo(prev_days_ago); <span style="color: #AA22FF; font-weight: bold">var</span> date_range <span style="color: #666666">=</span> start_date<span style="color: #666666">+</span><span style="color: #BB4444">','</span><span style="color: #666666">+</span>end_date; Logger.log(<span style="color: #BB4444">'Getting data for '</span> <span style="color: #666666">+</span> date_range); <span style="color: #AA22FF; font-weight: bold">var</span> query <span style="color: #666666">=</span> [<span style="color: #BB4444">'select'</span>,cols.join(<span style="color: #BB4444">','</span>),<span style="color: #BB4444">'from'</span>,report,<span style="color: #BB4444">'during'</span>,date_range].join(<span style="color: #BB4444">' '</span>); <span style="color: #AA22FF; font-weight: bold">var</span> report_iter <span style="color: #666666">=</span> AdWordsApp.report(query, API_VERSION).rows(); <span style="color: #AA22FF; font-weight: bold">if</span>(<span style="color: #666666">!</span>report_iter.hasNext()) { Logger.log(<span style="color: #BB4444">'No more impressions found. Breaking.'</span>); <span style="color: #AA22FF; font-weight: bold">break</span>; } <span style="color: #008800; font-style: italic">// no more entries</span> <span style="color: #AA22FF; font-weight: bold">while</span>(report_iter.hasNext()) { <span style="color: #AA22FF; font-weight: bold">var</span> row <span style="color: #666666">=</span> report_iter.next(); <span style="color: #AA22FF; font-weight: bold">if</span>(ret_map[row[<span style="color: #BB4444">'Id'</span>]]) { <span style="color: #AA22FF; font-weight: bold">var</span> [year,month,day] <span style="color: #666666">=</span> (row[<span style="color: #BB4444">'Date'</span>]).split(<span style="color: #BB4444">'-'</span>); <span style="color: #AA22FF; font-weight: bold">var</span> from_row <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(year, <span style="color: #AA22FF">parseFloat</span>(month)<span style="color: #666666">-1</span>, day); <span style="color: #AA22FF; font-weight: bold">var</span> from_map <span style="color: #666666">=</span> ret_map[row[<span style="color: #BB4444">'Id'</span>]]; <span style="color: #AA22FF; font-weight: bold">if</span>(from_row <span style="color: #666666">&lt;</span> from_map) { ret_map[row[<span style="color: #BB4444">'Id'</span>]] <span style="color: #666666">=</span> from_row; } } <span style="color: #AA22FF; font-weight: bold">else</span> { <span style="color: #AA22FF; font-weight: bold">var</span> [year,month,day] <span style="color: #666666">=</span> (row[<span style="color: #BB4444">'Date'</span>]).split(<span style="color: #BB4444">'-'</span>); ret_map[row[<span style="color: #BB4444">'Id'</span>]] <span style="color: #666666">=</span> <span style="color: #AA22FF; font-weight: bold">new</span> <span style="color: #AA22FF">Date</span>(year, <span style="color: #AA22FF">parseFloat</span>(month)<span style="color: #666666">-1</span>, day); } } prev_days_ago <span style="color: #666666">=</span> i; } <span style="color: #AA22FF; font-weight: bold">return</span> ret_map; } </pre></div> <div> <div> <h2> </h2> <h2><span>Reaching success with Google AdWords</span></h2> </div> </div> <p>Staying ahead of the curve with pay-per-click advertising can be difficult. But leveraging the latest techniques in the best way can add to the challenge.</p> <p>If you’re having trouble getting your account to perform like a superstar, Digett is here for you! We have experience helping clients of all sizes get the most for their business out of AdWords. <strong><a href="/contact">Contact us today for a free consultation</a> to get started! </strong></p> </div> <section> <h2>LEAVE A COMMENT</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1064&amp;2=comment_no_subject&amp;3=comment_no_subject" token="d5omtRThQcjt5g15AfnJMHg4U8UNpei9hUnRs6eo95s"></drupal-render-placeholder> <article data-comment-user-id="0" id="comment-1941" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1387965742"></mark> <div> <div class="comment-name">Submitted by <span lang="" typeof="schema:Person" property="schema:name" datatype="">yannick</span> on Wed, 12/25/2013 - 4:02am</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>i tried running the script "Search query performance report".</p> <p>But it says there's an error...</p> <p>Invalid reporting query: INVALID_INPUT: RequestError.INVALID_INPUT. (line 33)</p> <p>did it run smoothly for you?</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=1941&amp;1=default&amp;2=en&amp;3=" token="iWpYwXfjiUO5wDTIZL7jTGw6tuHE_kdBnItpDKU8FrI"></drupal-render-placeholder> </div> </div> </article> <article data-comment-user-id="27" id="comment-1944" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1388696227"></mark> <div> <div class="comment-name">Submitted by <span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span> on Thu, 01/02/2014 - 2:57pm</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Yes, this runs smoothly for me. The problem might be in the account you created your spreadsheet in. Is it the same Google account you manage the AdWords account with? </p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=1944&amp;1=default&amp;2=en&amp;3=" token="PJjt6AdiAkaiYXCEvULcLl_bKJJGVSN2Ah3XhWkdtFg"></drupal-render-placeholder> </div> </div> </article> <article data-comment-user-id="0" id="comment-2038" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1403633072"></mark> <div> <div class="comment-name">Submitted by <span lang="" typeof="schema:Person" property="schema:name" datatype="">Greg</span> on Tue, 06/24/2014 - 1:04pm</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Hi, Great article. Is it possible to add any other metrics into the daily account summary, specifically Conversion value per Cost? I've tried adding rows into the code, but it won't show up in the spreadsheet.</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2038&amp;1=default&amp;2=en&amp;3=" token="1H7G242jCUgYdXjWFlBzg3yV5QwCPci12Un8OOfdb4A"></drupal-render-placeholder> </div> </div> </article> <article data-comment-user-id="27" id="comment-2039" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1403720662"></mark> <div> <div class="comment-name">Submitted by <span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span> on Wed, 06/25/2014 - 1:24pm</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Greg, thanks for reading!</p> <p>Can you elaborate on the metric you're referring to? Perhaps you mean cost per conversion value? Sorry if I'm misunderstanding here. </p> <p>A possible workaround you may want to try is to set up a formatted sheet on a different page, and have the cells in the new page reference where those metrics would be. </p> <p>If you need more elaboration on that, please feel free to ask. </p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2039&amp;1=default&amp;2=en&amp;3=" token="_Irwf5_kFSXBYRmfur45JFfTFiSnVFmqJHVYz1XnEBM"></drupal-render-placeholder> </div> </div> </article> <article data-comment-user-id="0" id="comment-2040" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1403721113"></mark> <div> <div class="comment-name">Submitted by <span lang="" typeof="schema:Person" property="schema:name" datatype="">Greg</span> on Wed, 06/25/2014 - 1:31pm</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Hi Wes,</p> <p>I'm referring to Conv. Value/Cost, we use it to calculate ROAS. It's not in the default columns in Adwords which may be why I'm having trouble.</p> <p>I tried adding a column to the spreadsheet with the data label, and I went through the code and added ConversionValuePerCost wherever I saw the other metrics listed, but can't get it to show up in the report. I'm very new to coding, so it's probably an easy fix somewhere.</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2040&amp;1=default&amp;2=en&amp;3=" token="KqmS5UbYSCxjcgVBnwJbxa3348w30OJzkEShPnpMojI"></drupal-render-placeholder> </div> </div> </article> <article data-comment-user-id="27" id="comment-2046" class="js-comment comment-container"> <mark class="hidden" data-comment-timestamp="1403722082"></mark> <div> <div class="comment-name">Submitted by <span lang="" about="/about/wes-mills" typeof="schema:Person" property="schema:name" datatype="">Wes Mills</span> on Wed, 06/25/2014 - 1:48pm</div> <div class="comment-body"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Greg, </p> <p>Let me look into this and I'll get back to you. That's an interesting idea you have bringing that in there. </p> <p>You may also want to shoot Russ Savage an email, too. He's the king at AdWords scripts. He wrote a few of them I have listed above. </p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=2046&amp;1=default&amp;2=en&amp;3=" token="6KTC0ywfKLC1Em5EznSwmqYMZAK_UJ6uPwCu_HqqRus"></drupal-render-placeholder> </div> </div> </article> </section> <div class="sharethis-wrapper"><span st_url="https://www.digett.com/insights/getting-started-4-easy-adwords-scripts" st_title="Getting Started With 4 Easy AdWords Scripts" class="st_facebook_large" displayText="facebook"></span> <span st_url="https://www.digett.com/insights/getting-started-4-easy-adwords-scripts" st_title="Getting Started With 4 Easy AdWords Scripts" class="st_linkedin_large" displayText="linkedin"></span> <span st_url="https://www.digett.com/insights/getting-started-4-easy-adwords-scripts" st_title="Getting Started With 4 Easy AdWords Scripts" class="st_twitter_large" displayText="twitter"></span> <span st_url="https://www.digett.com/insights/getting-started-4-easy-adwords-scripts" st_title="Getting Started With 4 Easy AdWords Scripts" class="st_email_large" displayText="email"></span> </div> Thu, 05 Dec 2013 15:54:03 +0000 Wes Mills 1064 at https://www.digett.com