There are sometimes situations where you may want to download all the keywords (criteria) uploaded to Google Adwords and if you have substantial keyword basket (say, more than a million), then either downloading manually or checking through the tools provided by Google become prohibitive. Also, Google daily keyword performance report provides metrics for all the keywords that have had at least one impression.
Following application is a simple tool that downloads all keywords and dumps that data to different files. I have removed error handling code and hardcoded many values to simplify it and you can modify this your requirements and don’t forget to add your account and API details. I have been able to download few million keywords using multiple processes.
Environment:
Ubuntu karmic OS running Python 2.6.4 for Adwords API version 13 (V13) using Python SUDS SOAP module.
#-- Python application to pull all your campaign keywords.
#-- Uses suds SOAP module to connect to Google Services and writes to files (one for each client email).
#-- Get list of all client emails (typically multiple accounts created to handle large set of keywords)
#-- For each account get its campaigns
#-- For each campaign get its adgroups
#-- For each adgroup get all keywords
#-- print ids and keyword attributes
import sys
import time
import re
import traceback as tb
import suds.metrics as metrics
from suds import WebFault
from suds.client import Client
#-- A class to handle user details...
#--------------------------------------
class GoogleSoapUser:
def __init__(self):
self.user = {'email' : 'your_developer_api_email_addr',
'password' : 'your_developer_password',
'useragent' : 'Google Adwords KW pull V0.1',
'developerToken' : 'your_developer_token',
'applicationToken' : 'your_application_token'
}
#-- Note: connecting to production (adwords); for sandbox testing replace it.
self.wsdl = {'campaign' :'https://adwords.google.com/api/adwords/v13/CampaignService?wsdl',
'adGroup' :'https://adwords.google.com/api/adwords/v13/AdGroupService?wsdl',
'keyword' :'https://adwords.google.com/api/adwords/v13/CriterionService?wsdl'
}
def getUser(self):
return self.user
def getWSDL(self, k=None):
return self.wsdl[k]
def getClientEmails(self): #-- Client emails to pull data for
emails = ['your_campaign_ac_email_addr_1',
'your_campaign_ac_email_addr_2',
'your_campaign_ac_email_addr_3'
]
return emails
def setHeaderEmail(self, clientEmail=None):
self.user['clientEmail'] = clientEmail
#-- Main program
#------------------------------
if __name__ == '__main__':
gUser = GoogleSoapUser()
#-- For each client email...
for cEmail in gUser.getClientEmails():
#-- Open a output file to dump...
print "Checking account: ", cEmail, "\n"
file = 'google_' + re.split('@', cEmail)[0] + '.txt'
try:
f = open('/tmp/'+file, 'w')
except IOError as err:
print "Unable to open file", file, format(err)
#-- Set the SOAP header with client email
gUser.setHeaderEmail(cEmail)
#-- Get all campaigns...
campClient = Client(gUser.getWSDL('campaign'))
campClient.set_options(soapheaders=gUser.getUser())
campaigns = campClient.service.getAllAdWordsCampaigns(0) #-- Pass a dummy number...
#-- For each campaign ...
for campaign in campaigns:
campaignID = campaign['id']
print "Checking for campaign: ", campaignID, "\n"
adClient = Client(gUser.getWSDL('adGroup'))
adClient.set_options(soapheaders=gUser.getUser())
adGroups = adClient.service.getAllAdGroups(campaignID)
#-- For each AdGroup...
for adGroup in adGroups:
adGroupID = adGroup['id']
print "Checking for adGroup: ", adGroupID, "\n"
kwClient = Client(gUser.getWSDL('keyword'))
kwClient.set_options(soapheaders=gUser.getUser())
keywords = kwClient.service.getAllCriteria(adGroupID)
#-- For each keyword...
for kw in keywords:
f.write(str(campaignID) + '\t' +
str(adGroupID) + '\t' +
str(kw['id']) + '\t' +
kw['type'] + '\t' +
kw['text'] + '\t' +
str(kw['qualityScore']) + '\t' +
kw['destinationUrl'] + '\n'
)
# sys.exit()
#-- Close this account output file...
f.close()
print "Data pull complete for account ", cEmail, "\n"
Cheers,
Shiva