Speed Up Data Studio Reports (Significantly) – Extract Data
To speed up your reports – you can “Extract Data” and cache it.
It can help to have 2 copies of the report up – so you can see which metrics and dimensions you need to select when adding the data to extract and cache (also a good idea to test the extract data method on a copy of the report in case you faff anything up)
Go to “Add Data” in the top menu-bar
Click on “Extract Data”
Choose the data you need – eg Google Analytics
Add the dimensions and metrics you need for the report
On the Right hand side – click to turn “Auto Update” on
Select “daily”
Click “Save and Extract”
Sometimes you have to faff around a bit with the dimensions – Google Analytics doesn’t seem to like caching a dimension, but still goes super-quick if you cache the metrics only.
Edit in Bulk
If you want to edit all of the charts or tables on the page, in “Edit” mode, right click – go to “Select” and then choose “Tables on page” or whatever type of chart, scorecard or table you’ve selected.
This works instead of CTRL clicking or SHIFT clicking – but you can only change charts or visualisations of the same type at the same time. You can change the style, add a comparison date range etc.
Brand Colour Theme in Data Studio
Click on “Them and Layout” at the top of the screen and then, near the bottom right click “Extract Theme from Image” – you can then upload your logo and choose a theme with your brand colours.
If your shite at presentation like me, this is helpful.
Copy & Paste Styles
In Data Studio – If you want to copy a style from a chart or table, right click it, then choose “copy”
Click another chart/table and the right click – Paste Special – Paste Style Only
Add Chart Filters to an Entire Report
If you want to add a filter to all the data in a report, then it can be a pain going through the charts individually.
Right click on a blank part of the page –
Click “Current Page Settings”
On the right hand side – click “Create a Filter”
Choose or create a filter to apply to all the page
To add a filter to multiple pages
Right click on a blank part of the page
click “Report Settings”
click “Add a filter” in the right side-menu
Add Elements to All Pages of a Report in Data Studio
If you want to add a header and date range selector, for example, to all the pages in the report – add the elements to a page, then right click on the element – and choose “Make report-level”
Quickly Align Elements in Data Studio
Click and drag to select all the elements
Right click – choose “align” – “middle” to get everything inline horizontally
To get an equal space between all the elements, so they’re spaced evenly:
– click and drag to select the elements
– right click – select “Distribute”
– “horizontally” to space evenly across the page, or “vertically” to distribute evenly in a vertical manner.
You can also tidy up individual tables to align the columns vertically – right click and select “”Fit to data”
You will probably want a “Call to Action” or “CTA” button, such as “Buy Now”, “Learn More” or “Contact Us”
This CTA button is generally placed “above the fold” on most pages, so that people don’t have to scroll down or look for a way to get in touch or buy from you.
“Join Free for a Month” – is the CTA on Netflix’s homepage (at the time of writing)
For more expensive, high end or though-out purchases such as – buying a car or contacting a therapist, sometimes it’s better to have the CTA below the fold. The best thing to do is test it, with Google Optimize.
For more information about “Conversion Rate Opimization” (CRO), see this article:
For a full SEO (Search Engine Optimization) checklist for your website – to help get visibility on Google – see this article – https://backlinko.com/seo-checklist
Google My Business
Register your website and your office with Google My Business
Google will send out a postcard to your office (or home) address
The postcard has a code – so you can confirm you are at that address
Local Directories
Register your business with high quality, local directories such as
Bing Places
Yelp
Yell
Free Index
Open Di
Try and get on any local government directories too.
Social Media & Captioned Videos
If relevant, register your business on:
Linkedin
Facebook
Instagram
TikTok
Arguably the best way to get noticed on social media at the moment, is to create videos with captions – so they can be watched on mute.
Linkedin is said to have the greatest organic reach at the moment too – meaning you can get your video, image or text-post in front of more people, without paying for ads.
Social media sites like people posting videos too – because they drive a high rate of engagement and keep people on the site for longer.
Do NOT post to YouTube and then post a link on social media
Instead – upload your video direct to the platform.
Social media sites will tend to kill your reach if you post a link – they don’t want people to click and leave their website
YouTube is also showing on more and more Search Results Pages on Google.
Consider creating a YouTube channel with lots of informative, helpful and entertaining content. You can then edit the videos and post to specific social media platforms.
Jab, Jab, Jab – Right Hook
General principle of content and social media marketing by Gary V.
Identify your target market
Identify their issues and pain points
Post helpful content related to their pain points and problems
Do NOT constantly promote your business – slip in the odd “Right Hook”, every 3 or 4 posts
People do not want to be sold to constantly, they want helpful, insightful and funny content.
For example.
If you target market is small business owners, take a look on Quora and Reddit and see what people are talking about. If a common theme is Facebook advertising for example, make some helpful videos and blog posts about Facebook marketing.
SEO, PPC and More
The above is just a foundation.
If you have the time and resources, you will ideally produce lots of insightful blog content, earn lots of inbound links and work your way to the top of Google.
You will also want to consider “PPC” – Pay Per Click ads on Google, Facebook and Linkedin.
One beginner mistake to avoid with ads – is sending people to your homepage.
Have a specific “landing page” for each advertising campaign.
oh – make sure you have a good looking logo too. You can use Canva or hire someone on PeoplePerHour.com
A good place to start with SEO is to check your website using an On-Page SEO Checklist.
Videos are great for social media, and YouTube is also starting to show more and more often in the Google results. I would personally have a good go at gaining an online presence using videos and social media – particularly Linkedin at the moment.
Build a Brand
Here’s a good article that some hero wrote about building your brand as a small business
Identify other propositions “why use me/us and not the competitor?”
Write down your brand story
Use high quality photography & videography (avoid stock pictures)
Consider making customer support a key element of your brand – this can help with online reviews too. Pre-purchase, purchase and post-purchase consumer stages are all opportunities to impress and help.
Put the URL of the sheet in the code below – next to where it says – var SPREADSHEET_URL =
Change the email address from drewgriffiths@live.com to your email – on the line that starts with – var RECIPIENT_EMAIL =
Change the Google sheet/doc URL and the email address
Sign into Google Ads
Click on “Tools & Settings” on the top menu near the right hand side
Click “scripts”
Click the addition (+) sign to add a new script
Paste in the below script – save – preview and then run
// Copyright 2015, Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @name Account Summary Report
*
* @overview The Account Summary Report script generates an at-a-glance report
* showing the performance of an entire Google Ads account. See
* https://developers.google.com/google-ads/scripts/docs/solutions/account-summary
* for more details.
*
* @author Google Ads Scripts Team [adwords-scripts@googlegroups.com]
*
* @version 1.1
*
* @changelog
* - version 1.1
* - Add user-updateable fields, and ensure report row ordering.
* - version 1.0.4
* - Improved code readability and comments.
* - version 1.0.3
* - Added validation for external spreadsheet setup.
* - version 1.0.2
* - Fixes date formatting bug in certain timezones.
* - version 1.0.1
* - Improvements to time zone handling.
* - version 1.0
* - Released initial version.
*/
var RECIPIENT_EMAIL = 'drewgriffiths@live.com';
var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/1mNjc7iJWOIq580DMLf6rYKT8xRAcl2MynnGSY29UiXY/edit#gid=3';
/**
* Configuration to be used for running reports.
*/
var REPORTING_OPTIONS = {
// Comment out the following line to default to the latest reporting version.
apiVersion: 'v201809'
};
/**
* To add additional fields to the report, follow the instructions at the link
* in the header above, and add fields to this variable, taken from the Account
* Performance Report reference:
* https://developers.google.com/adwords/api/docs/appendix/reports/account-performance-report
*/
var REPORT_FIELDS = [
{columnName: 'Cost', displayName: 'Cost'},
{columnName: 'AverageCpc', displayName: 'Avg. CPC'},
{columnName: 'Ctr', displayName: 'CTR'},
{columnName: 'Impressions', displayName: 'Impressions'},
{columnName: 'Clicks', displayName: 'Clicks'}
];
function main() {
Logger.log('Using spreadsheet - %s.', SPREADSHEET_URL);
var spreadsheet = validateAndGetSpreadsheet();
spreadsheet.setSpreadsheetTimeZone(AdsApp.currentAccount().getTimeZone());
spreadsheet.getRangeByName('account_id_report').setValue(
AdsApp.currentAccount().getCustomerId());
var yesterday = getYesterday();
var date = getFirstDayToCheck(spreadsheet, yesterday);
var rows = [];
var existingDates = getExistingDates();
while (date.getTime() <= yesterday.getTime()) {
if (!existingDates[date]) {
var row = getReportRowForDate(date);
rows.push([new Date(date)].concat(REPORT_FIELDS.map(function(field) {
return row[field.columnName];
})));
spreadsheet.getRangeByName('last_check').setValue(date);
}
date.setDate(date.getDate() + 1);
}
if (rows.length > 0) {
writeToSpreadsheet(rows);
var email = spreadsheet.getRangeByName('email').getValue();
if (email) {
sendEmail(email);
}
}
}
/**
* Retrieves a lookup of dates for which rows already exist in the spreadsheet.
*
* @return {!Object} A lookup of existing dates.
*/
function getExistingDates() {
var spreadsheet = validateAndGetSpreadsheet();
var sheet = spreadsheet.getSheetByName('Report');
var data = sheet.getDataRange().getValues();
var existingDates = {};
data.slice(5).forEach(function(row) {
existingDates[row[1]] = true;
});
return existingDates;
}
/**
* Sorts the data in the spreadsheet into ascending date order.
*/
function sortReportRows() {
var spreadsheet = validateAndGetSpreadsheet();
var sheet = spreadsheet.getSheetByName('Report');
var data = sheet.getDataRange().getValues();
var reportRows = data.slice(5);
if (reportRows.length) {
reportRows.sort(function(rowA, rowB) {
if (!rowA || !rowA.length) {
return -1;
} else if (!rowB || !rowB.length) {
return 1;
} else if (rowA[1] < rowB[1]) {
return -1;
} else if (rowA[1] > rowB[1]) {
return 1;
}
return 0;
});
sheet.getRange(6, 1, reportRows.length, reportRows[0].length)
.setValues(reportRows);
}
}
/**
* Append the data rows to the spreadsheet.
*
* @param {Array<Array<string>>} rows The data rows.
*/
function writeToSpreadsheet(rows) {
var access = new SpreadsheetAccess(SPREADSHEET_URL, 'Report');
var emptyRow = access.findEmptyRow(6, 2);
if (emptyRow < 0) {
access.addRows(rows.length);
emptyRow = access.findEmptyRow(6, 2);
}
access.writeRows(rows, emptyRow, 2);
sortReportRows();
}
function sendEmail(email) {
var day = getYesterday();
var yesterdayRow = getReportRowForDate(day);
day.setDate(day.getDate() - 1);
var twoDaysAgoRow = getReportRowForDate(day);
day.setDate(day.getDate() - 5);
var weekAgoRow = getReportRowForDate(day);
var html = [];
html.push(
'<html>',
'<body>',
'<table width=800 cellpadding=0 border=0 cellspacing=0>',
'<tr>',
'<td colspan=2 align=right>',
"<div style='font: italic normal 10pt Times New Roman, serif; " +
"margin: 0; color: #666; padding-right: 5px;'>" +
'Powered by Google Ads Scripts</div>',
'</td>',
'</tr>',
"<tr bgcolor='#3c78d8'>",
'<td width=500>',
"<div style='font: normal 18pt verdana, sans-serif; " +
"padding: 3px 10px; color: white'>Account Summary report</div>",
'</td>',
'<td align=right>',
"<div style='font: normal 18pt verdana, sans-serif; " +
"padding: 3px 10px; color: white'>",
AdsApp.currentAccount().getCustomerId(), '</h1>',
'</td>',
'</tr>',
'</table>',
'<table width=800 cellpadding=0 border=0 cellspacing=0>',
"<tr bgcolor='#ddd'>",
'<td></td>',
"<td style='font: 12pt verdana, sans-serif; " +
'padding: 5px 0px 5px 5px; background-color: #ddd; ' +
"text-align: left'>Yesterday</td>",
"<td style='font: 12pt verdana, sans-serif; " +
'padding: 5px 0px 5px 5px; background-color: #ddd; ' +
"text-align: left'>Two Days Ago</td>",
"<td style='font: 12pt verdana, sans-serif; " +
'padding: 5px 0px 5x 5px; background-color: #ddd; ' +
"text-align: left'>A week ago</td>",
'</tr>');
REPORT_FIELDS.forEach(function(field) {
html.push(emailRow(
field.displayName, field.columnName, yesterdayRow, twoDaysAgoRow,
weekAgoRow));
});
html.push('</table>', '</body>', '</html>');
MailApp.sendEmail(email, 'Google Ads Account ' +
AdsApp.currentAccount().getCustomerId() + ' Summary Report', '',
{htmlBody: html.join('\n')});
}
function emailRow(title, column, yesterdayRow, twoDaysAgoRow, weekAgoRow) {
var html = [];
html.push('<tr>',
"<td style='padding: 5px 10px'>" + title + '</td>',
"<td style='padding: 0px 10px'>" + yesterdayRow[column] + '</td>',
"<td style='padding: 0px 10px'>" + twoDaysAgoRow[column] +
formatChangeString(yesterdayRow[column], twoDaysAgoRow[column]) +
'</td>',
"<td style='padding: 0px 10px'>" + weekAgoRow[column] +
formatChangeString(yesterdayRow[column], weekAgoRow[column]) +
'</td>',
'</tr>');
return html.join('\n');
}
function getReportRowForDate(date) {
var timeZone = AdsApp.currentAccount().getTimeZone();
var dateString = Utilities.formatDate(date, timeZone, 'yyyyMMdd');
return getReportRowForDuring(dateString + ',' + dateString);
}
function getReportRowForDuring(during) {
var report = AdsApp.report(
'SELECT ' +
REPORT_FIELDS
.map(function(field) {
return field.columnName;
})
.join(',') +
' FROM ACCOUNT_PERFORMANCE_REPORT ' +
'DURING ' + during,
REPORTING_OPTIONS);
return report.rows().next();
}
function formatChangeString(newValue, oldValue) {
var x = newValue.indexOf('%');
if (x != -1) {
newValue = newValue.substring(0, x);
var y = oldValue.indexOf('%');
oldValue = oldValue.substring(0, y);
}
var change = parseFloat(newValue - oldValue).toFixed(2);
var changeString = change;
if (x != -1) {
changeString = change + '%';
}
if (change >= 0) {
return "<span style='color: #38761d; font-size: 8pt'> (+" +
changeString + ')</span>';
} else {
return "<span style='color: #cc0000; font-size: 8pt'> (" +
changeString + ')</span>';
}
}
function SpreadsheetAccess(spreadsheetUrl, sheetName) {
this.spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
this.sheet = this.spreadsheet.getSheetByName(sheetName);
// what column should we be looking at to check whether the row is empty?
this.findEmptyRow = function(minRow, column) {
var values = this.sheet.getRange(minRow, column,
this.sheet.getMaxRows(), 1).getValues();
for (var i = 0; i < values.length; i++) {
if (!values[i][0]) {
return i + minRow;
}
}
return -1;
};
this.addRows = function(howMany) {
this.sheet.insertRowsAfter(this.sheet.getMaxRows(), howMany);
};
this.writeRows = function(rows, startRow, startColumn) {
this.sheet.getRange(startRow, startColumn, rows.length, rows[0].length).
setValues(rows);
};
}
/**
* Gets a date object that is 00:00 yesterday.
*
* @return {Date} A date object that is equivalent to 00:00 yesterday in the
* account's time zone.
*/
function getYesterday() {
var yesterday = new Date(new Date().getTime() - 24 * 3600 * 1000);
return new Date(getDateStringInTimeZone('MMM dd, yyyy 00:00:00 Z',
yesterday));
}
/**
* Returned the last checked date + 1 day, or yesterday if there isn't
* a specified last checked date.
*
* @param {Spreadsheet} spreadsheet The export spreadsheet.
* @param {Date} yesterday The yesterday date.
*
* @return {Date} The date corresponding to the first day to check.
*/
function getFirstDayToCheck(spreadsheet, yesterday) {
var last_check = spreadsheet.getRangeByName('last_check').getValue();
var date;
if (last_check.length == 0) {
date = new Date(yesterday);
} else {
date = new Date(last_check);
date.setDate(date.getDate() + 1);
}
return date;
}
/**
* Produces a formatted string representing a given date in a given time zone.
*
* @param {string} format A format specifier for the string to be produced.
* @param {date} date A date object. Defaults to the current date.
* @param {string} timeZone A time zone. Defaults to the account's time zone.
* @return {string} A formatted string of the given date in the given time zone.
*/
function getDateStringInTimeZone(format, date, timeZone) {
date = date || new Date();
timeZone = timeZone || AdsApp.currentAccount().getTimeZone();
return Utilities.formatDate(date, timeZone, format);
}
/**
* Validates the provided spreadsheet URL to make sure that it's set up
* properly. Throws a descriptive error message if validation fails.
*
* @return {Spreadsheet} The spreadsheet object itself, fetched from the URL.
*/
function validateAndGetSpreadsheet() {
if ('YOUR_SPREADSHEET_URL' == SPREADSHEET_URL) {
throw new Error('Please specify a valid Spreadsheet URL. You can find' +
' a link to a template in the associated guide for this script.');
}
var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
var email = spreadsheet.getRangeByName('email').getValue();
if ('foo@example.com' == email) {
throw new Error('Please either set a custom email address in the' +
' spreadsheet, or set the email field in the spreadsheet to blank' +
' to send no email.');
}
return spreadsheet;
}
For some blogs and websites, even keywords with 0 monthly searches may be relevant.
My other blog – blackbeltwhitehat.com has built all of its traffic off KWs that Google KW planner says has 0 searches.
It all depends on how authoritative your website is and your competitors are. You can go after bigger, more popular KWs if you are a huge website with a DA of 90. It’s a different ball game if you are running a personal blog with a DA of 15
Try and include a number of the relevant searches in your articles etc.
Check Competitors & KWs Their Relevant Pages Rank for
If you have a tool like semrush.com,
Check what keywords competitors are ranking for.
If your head keyword is “football goals”, see who’s ranking top 5 for that term and see what other keywords the top URLs are ranking for.
If you don’t have an SEO Tool, you can just check the copy and meta title & description to see what keywords the top websites are trying to opimise for.
My friend has an interview on Tuesday for a marketing manager role, and has never done any online marketing, so here goes my introduction to it…
About the title-image, sorry it’s a bit sexist – studies suggest that faces looking at you are the best for Calls to Action (CTAs) and for thumbnails on Youtube videos.
The above image is used for my marketing video and thought it would double up to get people to click on my blog post. May as well embed the video now! Here you go:
Internet Marketing Jargon
Online marketing has so many abbreviations, that if you don’t know them, it sounds like another language
What is a “Browser”?
A browser is Internet Explorer, Google Chrome, Firefox, Safari on an Apple device or Opera. It’s a piece of software for navigating the internet and downloading/rendering websites.
DO NOT say that you use Internet Explorer in an online marketing interview. Say that you use Chrome.
The main reason that people use Chrome and Firefox is that you can get plugins/extensions for Google Chrome. The most popular in online marketing is probably the ‘Mozbar’ which helps you see the ‘Domain Authority’ of a website.
What is a CMS?
Content Management System. A typical CMS is WordPress. This site is made using the free version of wordpress that uses the WordPress hosting platform, a free design template. The wordpress software can also be used when hosted with a different company such as GoDaddy, and the paid WordPress software allows plugins.
What are “WordPress Plugins”?
They are add-ons to your site that allows you to add ‘functionality’. For example you might add a Paypal plugin that allows you to create a shopping cart and payment system on your site to make in an online shop/ecommerce site.
What does “SEO” Stand For?
Search Engine Optimisation. This is the process of ranking as high as possible on Google and other search engines such as Bing.com.
Some terms to be aware of in SEO: Meta Description – This is the description that you add the theof your website page’s code that shows in the Google Results. It just described what is on the page. Meta Descriptions should be 155 characters or less.
Meta Title .- this shows at the top of the tab in your browser and in the Google results pages.
Conversion Rate Optimisation. This is the process of getting people who visit your website to buy things or sign up for a newsletter or submit a form. If you have an online shop, a ‘conversion’ would normally be a purchase on your website.
What does “PPC” Stand for?
Pay Per Click advertising (not Payment Protection Cover as I thought in my interview at the bank I used to work at). The 2 most popular forms of this are Google Adwords and Facebook advertising. Facebook is usually more effective on a smaller budget.
HTML stands for hyper text markup language. It structures websites whilst something called CSS – Cascading Style Sheets.
The best place to start learning HTML is w3 Schools. It can be overwhelming at first, but it’s easy when you get the hang of it. It’s just a load of numbers and letters inside angle brackets <> to remember. There’s no working out or formulas to remember, just letters and numbers.
HTML is one of the ways a websites ‘talks’ to a browser, so that the browser can render the website and show you what’s on there.
CSS makes it looks nice, adding colours, styles etc. For example the CSS might tell the browser to make all the main headings red and all the list items italic.
What is DA?
DA stands for Domain Authority. DA is an indication of how ‘powerful’ or authoritative a website is. The higher the DA (score of 1-100), the more valuable a link is from that website.
What is a Link?
A link or a hyperlink is a bit of text or an image, that you click to go to another website. For example this red underlined text is a link to a fitness blog. When you click it, you should be taken to another blog.
The more links a website has, from high quality websites, the more likely it is to rank higher in Google. You can gain links by creating great content, you can create and run marketing campaigns that people will want to write about, or you can be naughty and pay for some links.
What is Guest Posting?
Guest posting is an old school tactic to gain links to your website and rank on Google. You create an article/blog post, send it to a blogger in an email and ask if they would like to use it on their website. The article will contain a link back to your own website. The typical response from a blogger is either “no thanks” or “okay, that will cost $50”.
Now, this is against Google guidelines and you can get penalised by Google for doing this. People still do though. In theory, if a blogger accepts a payment to link to another website, in any form, whether it is via a blog post or sidebar-link or banner, then it should be a ‘no-follow’ link.
What is a NoFollow Link?
A no follow link has the HTML code – rel=”nofollow” added to it.
This tells Google NOT to count this link and not factor it in to it’s ranking algorithm.
What is the Google Algorithm?
It’s the formula that Google uses to work out where to rank websites on their results pages. Apparently nobody knows all of it, but it looks at how many other websites link to yours, the quality of the websites linking to yours, the quality of your website and its content and how fast your website loads.
What are Keywords?
Keywords or KWs, are search terms used in Google. If I search for “Red apples” then the keyword is “red apples”.
Rather confusingly, search phrases are also called keywords. You want to find KWs with lots of monthly searches, that don’t have lots of competition and add them to your content and headings in a natural format. Don’t stuff them in everywhere.
Use the Keyword Planner Tool to find KWs with lots of monthly searches. And do a Google search to see which websites rank for those terms. If the top 10 websites for that KW are the likes of the BBC, Fox News and Amazon, you probably aren’t going to rank on the first page for that term.
Long Tail Keywords are less popular KWS, with less searches but often ‘convert’ to sales etc. better.
A Head Term might be “Tennis Balls”
A Long Tail Keyword might be “Buy Yellow Slazenger Tennis Balls UK”
“Tennis Balls” will have a much higher volume of monthly searches but will be very hard to rank on the first page of Google for. “Buy Yellow Slazenger Tennis Balls UK” will have less search volume each month, but will be easier to rank for and people searching for that term are more likely to buy/convert.
Tools for Internet Marketing
A CMS – such as WordPress so that you can create a website
A Keyword Tool such as the Google Keyword Planner. So that you can see what keywords to try and rank for or advertise with if you’re using PPC ads.
Google Analytics – to see who is coming to your site, where from and to what pages.
Google Chrome and some extensions such as the Moz Bar
Screaming Frog for Technical SEO. This gets all the information from a website and downloads it into an Excel Spreadsheet.
SEO Mofo – to make sure your meta titles & descriptions are the correct length. Add a CTA – Call To Action such as “Book Now!” or “Learn More” at the end of your descriptions.
Yoast SEO Plugin – This makes it easy to add meta titles and descriptions as you make your webpages and blog posts.
Great infographic from PPC Hero for those who are learning about and thinking about using Google Adwords for there business:
I’m personally a fan of using modified-broad-match type and creating one Ad Group for every single Keyword. Create 4 or 5 ads in each Ad Group and pause the 2 that perform least well in each group.
You can read more in my article on Business2Community