This page shows how to build a Google Search Console dashboard in Tableau with your own data from Windsor.ai: the fields to load, the sheets to build, and the calculated fields that keep CTR and average position correct. We tested the data steps and the trend chart below in Tableau Public on 4 October 2026, with windsor.ai’s own Search Console data.
Our 2022 template workbook on Tableau Public was built for Windsor.ai’s Web Data Connector at tableau.windsor.ai, which no longer responds. You can still view the 2022 workbook for its layout, but it does not reconnect to new data. When we replaced its data source with a Windsor.ai file, most of its fields broke.

Above: clicks by day and device for windsor.ai, 23 to 29 September 2026, from the CSV file in step 2.
What the dashboard should show
- Clicks and impressions by day, split by device, to see when a change started and on which device.
- Totals for clicks, impressions, CTR and average position for the dates you pick.
- Top queries and top landing pages, with clicks, impressions and CTR.
- Clicks by country, as a map or a table.
- Search type as a filter, to look at web or image results on their own.
How to build it with your data
1. Connect Search Console to Windsor.ai
Sign in at onboard.windsor.ai, choose Google Search Console and select your property. Domain properties appear as sc-domain:example.com.
2. Get the data as a CSV file
Request the data from the Windsor.ai API with these fields and save the response as a .csv file. This is the code we ran:
import os
import requests
params = {
"api_key": os.environ["WINDSOR_API_KEY"],
"date_from": "2026-09-23",
"date_to": "2026-09-29",
"fields": "account_name,clicks,countryname,date,device,impressions,page,position,position_page,query,search_type",
"_renderer": "csv",
}
r = requests.get("https://connectors.windsor.ai/searchconsole", params=params, timeout=900)
open("gsc.csv", "wb").write(r.content)
For windsor.ai this returned 255,789 rows for seven days, a 36 MB file, in 55 seconds. Each row is one combination of date, query, page, country, device and search type. The Search Console to Python page explains the API key and the other fields.
You can also load the data into a Google Sheet with the Windsor.ai add-on and connect Tableau to the sheet. Check the row count if you do: in our test Tableau’s Google Drive connector read 123,356 of a sheet’s 136,565 rows. The Search Console to Tableau page has that test.
3. Open the file in Tableau
In Tableau, choose Connect, To a File, Text file, and open the CSV. Check that the row count next to the field count matches the file. Tableau renames the columns, for example date becomes Date; if it does not mark Countryname as a country, set its geographic role to Country.
4. Add the calculated fields
CTR and position have to be calculated from totals. Averaging the values of single rows gives wrong results:
-
CTR:
SUM([Clicks]) / SUM([Impressions]), formatted as a percentage. -
Average position:
SUM([Position] * [Impressions]) / SUM([Impressions]), so a query shown 40,000 times counts more than one shown once.
5. Build the sheets and the dashboard
- Trend: a continuous Day of Date on Columns, SUM(Clicks) on Rows, Device on Color.
- Totals: one text sheet each for SUM(Clicks), SUM(Impressions), CTR and Average position.
- Top queries: Query on Rows, sorted by SUM(Clicks), with Impressions and CTR next to it.
- Top pages: the same with Page.
- Countries: Countryname on Detail of a map, with SUM(Clicks) on Color.
Drag the sheets into a new dashboard and add Date and Search Type as filters that apply to all sheets. To publish it, choose File, Save to Tableau Public.
What we found in our test

- The CSV route read every row. 136,565 of 136,565 for date, query, page and device, with 13,813 clicks.
- The Google Sheet route did not. Tableau read 123,356 rows and 11,269 clicks, and the missing rows held the clicks for 23 September.
- CTR arrives as a ratio. Tableau shows it as 0.00 until you format it as a percentage, or use the calculated field above.
- The newest days arrive late. On 4 October the latest day in Search Console was 29 September.
Other Search Console templates
If you do not need Tableau, the Data Studio SEO report template and the Search Console Google Sheets template work with your data as they are. The Search Console dashboard templates page compares all of them, and our Tableau templates page lists templates for other sources.
FAQs
Is it free?
Yes. Tableau Public is free, and Windsor.ai has a free forever plan for one data source with no credit card. Paid Windsor.ai plans start at $19 a month; see pricing.
How do I refresh the dashboard?
A CSV file is a snapshot. Request the file again for newer days and refresh the data source in Tableau. If you use the Google Sheet route, the Windsor.ai add-on can refresh the sheet on a schedule, but check the row count Tableau reads.
Why do my totals differ from the Search Console Performance report?
Google does not report rare queries, so a table that includes the query field has fewer clicks than the site total. The newest 2 to 3 days are also still being filled in.


