Why I built a 30-day product launch dashboard
When I plan a product launch, I want a single pane of glass that shows performance, risks, and opportunities in real time. For one recent launch I combined Semrush for SEO and competitive intelligence, Google Sheets for lightweight ETL and visualization, and Slack for immediate team alerts. The result was a 30-day dashboard that kept stakeholders aligned, highlighted early wins, and flagged problems before they became critical.
What this dashboard tracks (and why)
I focus on a few core categories that directly impact awareness and conversion during launch week and the following four weeks:
How I structure the Google Sheet
I keep the sheet simple: a data tab for raw pulls, a metrics tab for calculations, and a dashboard tab for visualization. Here’s the layout I use:
| Tab | Purpose | Key columns |
|---|---|---|
| Data_Semrush | Raw pull from Semrush API (or CSV) | date, keyword, rank, volume, traffic_est, url, serp_features |
| Data_Backlinks | Raw backlink counts | date, referring_domain, target_url, link_type |
| Metrics | Aggregations and KPIs | date, total_est_traffic, avg_rank, new_links, paid_impr |
| Dashboard | Charts, conditional formatting, summary | visual widgets and alert triggers |
| Tasks | Content & ops tracking | task, owner, due_date, status |
Pulling data from Semrush into Google Sheets
There are two main ways I bring Semrush data into Sheets:
For the API route I use a small Apps Script function that calls Semrush and writes results to the Data_Semrush tab. Here’s a minimal Apps Script pattern:
function fetchSemrushPositions(){ var apiKey = 'YOUR_SEMRUSH_KEY'; var domain = 'yourproductdomain.com'; var url = 'https://api.semrush.com/?type=domain_ranks&key=' + apiKey + '&domain=' + domain + '&database=us'; var resp = UrlFetchApp.fetch(url); var csv = Utilities.parseCsv(resp.getContentText()); var sheet = SpreadsheetApp.getActive().getSheetByName('Data_Semrush'); sheet.clearContents(); sheet.getRange(1,1,csv.length,csv[0].length).setValues(csv);}You can run this once per day via a time-driven trigger (daily at 2am, for example).
Processing data inside Sheets
Once raw data is in place, I calculate the daily KPIs on the Metrics tab. Useful formulas I rely on:
I also use conditional formatting to highlight drops: if avg_rank increases by >5 positions day-over-day, color the cell red.
Creating Slack alerts from Google Sheets
Automated alerts are the part that saved my team the most time. I set up Apps Script to post to a Slack webhook when a KPI crosses a threshold. Example triggers I use:
Here’s a concise Apps Script snippet to send a Slack alert:
function postSlackAlert(message){ var webhook = 'https://hooks.slack.com/services/XXX/YYY/ZZZ'; var payload = JSON.stringify({text: message}); var options = { 'method': 'post', 'contentType': 'application/json', 'payload': payload }; UrlFetchApp.fetch(webhook, options);}function checkKpiAndAlert(){ var ss = SpreadsheetApp.getActive(); var metrics = ss.getSheetByName('Metrics'); var row = metrics.getRange('A2:E2').getValues()[0]; var avgRank = row[2]; // example var traffic = row[1]; var prevTraffic = metrics.getRange('A3').getValue(); // prior day if((prevTraffic - traffic)/prevTraffic > 0.2){ postSlackAlert('Alert: organic traffic dropped >20% today. Check top landing pages.'); } if(avgRank > 20){ postSlackAlert('Alert: average rank for tracked keywords >20. Review SEO actions.'); }}Schedule checkKpiAndAlert to run hourly during launch week and daily afterwards.
Visualizing the dashboard
I build a simple dashboard with these widgets:
Use Insert > Chart in Sheets and keep visuals minimal — stakeholders want to scan, not decode.
Operational tips and the 30-day playbook
From experience, these operational guidelines make the dashboard actionable:
Common pitfalls to avoid
I've learned a few things the hard way:
Next steps you can implement today
Start small: pick five priority keywords, export their positions from Semrush for the past 30 days, import into a new Google Sheet, and add a simple Apps Script that posts a Slack message when a keyword moves more than 3 positions. Iterate from there, adding traffic and backlinks as you grow comfortable.
If you’d like, I can share a starter Google Sheet template and the full Apps Script I use so you can plug in your Semrush API key and Slack webhook. It will cut the build time to under an hour and get your launch monitoring-ready fast.