{ "name": "Email a Weekly Search Console Report", "tags": [], "nodes": [ { "id": "email-weekly-search-console-report-0", "name": "Weekly Trigger (Monday 7AM)", "type": "n8n-nodes-base.cron", "position": [ 80, 180 ], "parameters": { "triggerTimes": { "item": [ { "mode": "everyWeek", "weekday": 1, "hour": 7, "minute": 0 } ] } }, "typeVersion": 1 }, { "id": "email-weekly-search-console-report-1", "name": "Set the reporting dates", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "function window(){const p=new Intl.DateTimeFormat('en-CA-u-ca-iso8601',{timeZone:'America/Los_Angeles',year:'numeric',month:'2-digit',day:'2-digit'}).formatToParts(new Date()),v=Object.fromEntries(p.map(x=>[x.type,x.value])),today=Date.UTC(Number(v.year),Number(v.month)-1,Number(v.day)),date=n=>new Date(today-n*86400000).toISOString().slice(0,10);return {startDate:date(7),endDate:date(1)};}\n\nreturn [{json:{...window(),siteUrl:'https://example.com/'}}];" } }, { "id": "email-weekly-search-console-report-2", "name": "Read search performance", "type": "n8n-nodes-base.httpRequest", "position": [ 300, 180 ], "parameters": { "method": "POST", "url": "={{ 'https://www.googleapis.com/webmasters/v3/sites/' + encodeURIComponent($json.siteUrl) + '/searchAnalytics/query' }}", "authentication": "genericCredentialType", "genericAuthType": "oAuth2Api", "sendBody": true, "specifyBody": "json", "jsonBody": "={{ {startDate:$json.startDate,endDate:$json.endDate,dimensions:['query'],rowLimit:10,dataState:'final'} }}", "options": { "timeout": 30000, "response": { "response": { "responseFormat": "json" } } } }, "typeVersion": 4.2 }, { "id": "email-weekly-search-console-report-3", "name": "Prepare the report", "type": "n8n-nodes-base.code", "typeVersion": 2, "parameters": { "mode": "runOnceForAllItems", "jsCode": "function summarize({rows,startDate,endDate}){if(!Array.isArray(rows)||rows.length>10)throw Error('Invalid Search Console rows');let lines=[];for(const [i,r] of rows.entries()){if(!Array.isArray(r.keys)||r.keys.length!==1||typeof r.keys[0]!=='string'||!['clicks','impressions','ctr','position'].every(k=>typeof r[k]==='number'&&Number.isFinite(r[k])))throw Error('Invalid Search Console row');const query=r.keys[0].replace(/[\\r\\n]+/g,' ');lines.push(`${i+1}. ${query} - Clicks: ${r.clicks}, Impressions: ${r.impressions}, CTR: ${r.ctr.toFixed(2)}, Position: ${r.position.toFixed(2)}`)}return {text:`Top 10 Search Queries (${startDate} through ${endDate}, Pacific Time):\\n\\n${lines.length?lines.join('\\n'):'No data returned.'}`};}\n\nconst w=$('Set the reporting dates').first().json;return [{json:summarize({rows:$input.first().json.rows??[],startDate:w.startDate,endDate:w.endDate})}];" } }, { "id": "email-weekly-search-console-report-4", "name": "Send Weekly Report by Email", "type": "n8n-nodes-base.gmail", "position": [ 720, 180 ], "parameters": { "sendTo": "recipient@example.com", "subject": "Weekly Search Console Report", "message": "={{ $json.text }}", "emailType": "text", "options": { "appendAttribution": false } }, "typeVersion": 2.1 } ], "active": false, "pinData": {}, "settings": { "executionOrder": "v1", "timezone": "UTC" }, "connections": { "Weekly Trigger (Monday 7AM)": { "main": [ [ { "node": "Set the reporting dates", "type": "main", "index": 0 } ] ] }, "Set the reporting dates": { "main": [ [ { "node": "Read search performance", "type": "main", "index": 0 } ] ] }, "Read search performance": { "main": [ [ { "node": "Prepare the report", "type": "main", "index": 0 } ] ] }, "Prepare the report": { "main": [ [ { "node": "Send Weekly Report by Email", "type": "main", "index": 0 } ] ] } } }