Written by Nick Swan. Updated on 30, May 2022
This is the first article in a whole series that will show you how to write code and use the Google Search Console API to help you with your day to day SEO tasks. We’ll be replicating some of the reports in SEOTesting.com so you can run them yourself, and improve or add to them as you wish.
This article makes up part of our Google Search Console tutorials and training section, make sure to check the others out.
This introduction article will take you through how to set up access to the Google Search Console API via the Google Cloud Platform, and build your first request to get some query data from Google Search Console.
Python is currently the language of choice for lots of SEOs looking to get into programming and data science, but it’s not the only choice.
I’ve been programming with C# since 2004 and so it’s my go to choice when needing to code something. All of SEOTesting.com is developed using C#, ASP.NET MVC as the web app, and Microsoft SQL Server for data storage.
While Visual Studio and the tools needed to write code in C# used to be expensive and only usable on Windows, Microsoft has released VSCode for free which enables cross platform development for Windows, Mac and Linux.
There are three main benefits of using C# that keep me coming back to it:
These three things help me be more productive, and learn new libraries and APIs more quickly.
Register (or log in) to Google Cloud Platform.
GCP is the mechanism for managing authentication and authorization to the various APIs that Google supports.
Once you are in GCP we are going to want to create a new Project.
Give it a sensible name such as GSCAccess.
Once the project is created, click into it, and from the left hand menu click on ‘IAM & Admin’, and then ‘Service Accounts‘.
Click on ‘+ Create Service Account’
Give the service account a meaningful name. You’ll notice GCP adds a generated section so the service account has an email address. This is the ‘email address’ of the service account that you’ll add to GSC to get access. Copy the email address for use later
Ignore the two ‘Optional’ steps (2 and 3) they’re not needed, click ‘Done’.
It’s really important to be careful who you share the name of this account with, or the JSON credentials file. Whoever has access to these two things will potentially be able to access the same GSC data that you will be accessing.
Once you create the service account, and you are back on the service account screen, click on the service account itself and you’ll see a menu item along the top for ‘Keys’.
Click ‘Add Key’ and then ‘Create new key’.
Leave the type selected as JSON and click CREATE.
Upon the creation of the Key file, it’ll automatically be downloaded to your computer (to the Downloads folder if you are on Windows). We’ll need this file shortly so keep it safe!
From the side menu, click into APIs & Services -> Library.
Search for ‘search console’, click the result
Click ‘Enable’ button
Go into Google Search Console and select the GSC property you wish to work with.
Go Settings -> Users
Give the service account created in GCP Restricted Permission to the GSC property you want to get data from.
Download VSCode – it’s free! Runs on Mac or Windows.
Open VSCode
Using the terminal, make a directory to work from within by typing the following code and pressing enter
mkdir gsc
Then move into the directory with the following command:
cd mkdir
Create a new dot net core console app:
dotnet new console
Add the Google Search Console library to your project:
dotnet add package google.apis.webmasters.v3
open the gsc folder in the Explorer by typing:
code . -r
into the terminal window and pressing enter.
You’ll get a pop up in the bottom right corner asking you to add assets required to build a C# project, click Yes for this:
Drag the service account key json file from Windows Explorer or Finder into the VS code Explorer to add it to the project.
In the Explorer, open Program.cs – this is the main file where you will do your coding today.
At the top of the file, below “using System;”, paste the following:
using System.Collections.Generic;
using System.IO;
using System.Text;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Webmasters.v3;
using Google.Apis.Webmasters.v3.Data;
Copy the following code below, and paste it in to replace the line Console.WriteLine(“Hello World!”);
using System.Collections.Generic;
var credentialsPath = "./service-key-filename.json";
var searchConsoleUrl = "sc-domain:yourdomain.com";
var stream = new FileStream(credentialsPath, FileMode.Open);
var credentials = GoogleCredential.FromStream(stream);
if (credentials.IsCreateScopedRequired)
{
credentials = credentials.CreateScoped(new string[] { WebmastersService.Scope.Webmasters });
}
var service = new WebmastersService(new BaseClientService.Initializer()
{
HttpClientInitializer = credentials,
ApplicationName = "Console App"
});
DateTime startDate = DateTime.Now.AddDays(-501);
DateTime endDate = DateTime.Now;
List dimensionList = new List();
dimensionList.Add("query");
var request = new SearchAnalyticsQueryRequest();
request.StartDate = startDate.ToString("yyyy-MM-dd");
request.EndDate = endDate.ToString("yyyy-MM-dd");
request.Dimensions = dimensionList;
var response = service.Searchanalytics.Query(request, searchConsoleUrl).Execute();
StringBuilder sb = new StringBuilder();
sb.AppendLine("Query,Clicks,Impressions,CTR,AvgPosition");
if(response.Rows != null)
{
foreach(var row in response.Rows)
{
sb.Append(row.Keys[0]);
sb.Append(",");
sb.Append(row.Clicks);
sb.Append(",");
sb.Append(row.Impressions);
sb.Append(",");
sb.Append(row.Ctr);
sb.Append(",");
sb.Append(row.Position);
sb.AppendLine();
}
}
File.WriteAllText("queries.csv", sb.ToString());
You will need to replace the two variable at the top with your own values. Firstly the name of the JSON key file you downloaded from Google Cloud Platform, and secondly the Search Console property name you want to query.
When you are ready to run the code, press F5 and VS Code will compile and run it for you.
Once it has completed running you’ll see a new file called queries.csv, which will contain all the queries from the past (roughly) 16 months from Google Search Console.
Pretty cool huh!
Getting access to Google Discover data for urls was just released this week, so if you want to be able to export that data:
1, Change dimensionList.Add(“query”) to dimensionList.Add(“page”).
2, Add in the following code once the request object has been created:
request.AggregationType = "byPage";
request.SearchType = "discover";
3, You may also want to change Query to Url in the line sb.AppendLine(“Query,Clicks,Impressions,CTR,AvgPosition”); so your CSV file has the correct header.
4, Finally, change the name of the CSV file to DiscoverUrls.csv
Run the code again by pressing F5, and you’ll now have an export of the discover urls and respective data.
Hopefully you have that running and a CSV file full of Google Search Console data! In the next blog post we’ll look at doing something more interesting with it. If you have any issues getting the above steps to work, feel free to reach out on Twitter.