Imported from claude-office-skills/skills (
sheets-automation/SKILL.md) via skills.sh. Install upstream withnpx skills add claude-office-skills/skills --skill sheets-automation. Copyright stays with the author (MIT).
Google Sheets Automation
Automate Google Sheets workflows for data synchronization, task management, reporting dashboards, and multi-platform integrations. Based on n8n's 7,800+ workflow templates.
Overview
This skill covers:
- Automated data sync from multiple sources
- Task management with Slack reminders
- Real-time reporting dashboards
- CRM/Marketing data aggregation
- Scheduled report generation
Core Workflows
1. Multi-Source Data Aggregation
āāāāāāāāāāāāāāā āāāāāāāāāāāāāāā āāāāāāāāāāāāāāā
ā HubSpot ā ā Stripe ā ā Google ā
ā (CRM) ā ā (Payments) ā ā Analytics ā
āāāāāāāā¬āāāāāāā āāāāāāāā¬āāāāāāā āāāāāāāā¬āāāāāāā
ā ā ā
āāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāā
ā
ā¼
āāāāāāāāāāāāāāāāāāāā
ā Google Sheets ā
ā (Master Dashboard)ā
āāāāāāāāāāāāāāāāāāāā
ā
ā¼
āāāāāāāāāāāāāāāāāāāā
ā Slack/Email ā
ā (Daily Report) ā
āāāāāāāāāāāāāāāāāāāā
n8n Configuration:
workflow: "Daily Business Metrics Sync"
schedule: "6:00 AM daily"
steps:
1. fetch_crm_data:
source: hubspot
data:
- new_leads_today
- deals_closed
- pipeline_value
2. fetch_revenue_data:
source: stripe
data:
- mrr
- new_subscriptions
- churn
3. fetch_traffic_data:
source: google_analytics
data:
- sessions
- conversions
- bounce_rate
4. update_sheets:
spreadsheet: "Business Dashboard"
sheet: "Daily Metrics"
action: append_row
data:
- date: today
- leads: "{hubspot.new_leads}"
- deals: "{hubspot.deals_closed}"
- mrr: "{stripe.mrr}"
- sessions: "{ga.sessions}"
5. update_charts:
refresh: automatic (Sheets built-in)
6. send_summary:
slack:
channel: "#daily-metrics"
message: |
š Daily Metrics - {date}
š° Revenue: ${mrr} MRR
š„ New Leads: {leads}
šÆ Deals Closed: {deals}
š Website Sessions: {sessions}
2. Task Management with Reminders
workflow: "Sheets Task Tracker"
trigger:
type: schedule
frequency: every_15_minutes
sheet_structure:
columns:
- A: Task
- B: Assignee
- C: Due Date
- D: Priority (High/Medium/Low)
- E: Status (Todo/In Progress/Done)
- F: Slack ID
steps:
1. read_tasks:
filter: |
Status != "Done" AND
Due Date <= TODAY() + 1
2. categorize_urgency:
overdue: Due Date < TODAY()
due_today: Due Date == TODAY()
due_tomorrow: Due Date == TODAY() + 1
3. send_reminders:
for_each: task
overdue:
slack_dm:
to: "{assignee_slack_id}"
message: |
šØ *OVERDUE*: {task_name}
Due: {due_date} ({days_overdue} days ago)
Priority: {priority}
due_today:
slack_dm:
to: "{assignee_slack_id}"
message: |
ā° *Due Today*: {task_name}
Priority: {priority}
4. daily_recap:
schedule: "6:00 PM"
slack_channel: "#team"
message: |
š *Daily Task Recap*
ā
Completed: {completed_count}
ā³ In Progress: {in_progress_count}
šØ Overdue: {overdue_count}
Top priorities for tomorrow:
{tomorrow_tasks}
3. Automated Report Generation
workflow: "Weekly Report Generator"
schedule: "Friday 5:00 PM"
steps:
1. collect_data:
sheets:
- "Sales Data"
- "Marketing Metrics"
- "Support Tickets"
2. calculate_metrics:
sales:
- total_revenue: SUM(revenue_column)
- deals_closed: COUNT(won_deals)
- avg_deal_size: AVG(deal_value)
- win_rate: won / (won + lost)
marketing:
- leads_generated: COUNT(new_leads)
- cost_per_lead: spend / leads
- conversion_rate: conversions / visitors
support:
- tickets_resolved: COUNT(resolved)
- avg_response_time: AVG(first_response)
- csat_score: AVG(satisfaction)
3. generate_report:
format: google_doc
template: "Weekly Report Template"
sections:
- executive_summary
- sales_performance
- marketing_metrics
- customer_support
- next_week_priorities
4. create_charts:
google_sheets:
- revenue_trend: line_chart
- deal_funnel: bar_chart
- lead_sources: pie_chart
5. distribute:
email:
to: leadership_team
subject: "Weekly Business Report - Week {week_number}"
attach: [report_doc, charts_pdf]
slack:
channel: "#leadership"
message: "š Weekly report ready: {doc_link}"
4. Inventory/Stock Tracker
workflow: "Inventory Alert System"
trigger:
type: sheets_change
sheet: "Inventory"
sheet_structure:
columns:
- Product
- SKU
- Current Stock
- Reorder Level
- Supplier
- Lead Time (days)
steps:
1. check_stock_levels:
condition: Current Stock <= Reorder Level
2. generate_alerts:
for_each: low_stock_item
actions:
- update_cell:
column: "Status"
value: "REORDER NEEDED"
format: red_background
- slack_alert:
channel: "#inventory"
message: |
ā ļø *Low Stock Alert*
Product: {product_name}
SKU: {sku}
Current: {current_stock}
Reorder Level: {reorder_level}
Supplier: {supplier}
- email_supplier:
if: auto_reorder == true
template: "reorder_request"
3. daily_summary:
schedule: "9:00 AM"
report:
- total_skus: count
- low_stock_items: count
- out_of_stock: count
- pending_orders: list
5. Form Responses ā CRM + Slack
workflow: "Google Form Lead Capture"
trigger:
type: google_forms
form: "Contact Us Form"
steps:
1. capture_response:
fields: [name, email, company, message, source]
2. append_to_sheet:
spreadsheet: "Lead Tracker"
data:
- timestamp: NOW()
- name: "{name}"
- email: "{email}"
- company: "{company}"
- message: "{message}"
- status: "New"
3. enrich_lead:
clearbit:
lookup_by: email
append: [company_size, industry, linkedin]
4. create_in_crm:
hubspot:
object: contact
properties:
email: "{email}"
firstname: "{name}"
company: "{company}"
lead_source: "Website Form"
5. notify_sales:
slack:
channel: "#new-leads"
message: |
š *New Lead!*
š¤ {name}
š¢ {company} ({company_size} employees)
š§ {email}
š¬ "{message}"
[View in HubSpot]({hubspot_link})
6. auto_respond:
email:
to: "{email}"
template: "thank_you_for_contacting"
Sheet Templates
Sales Dashboard
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā SALES DASHBOARD - {Month} ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤
ā ā
ā āāāāāāāāāāā āāāāāāāāāāā āāāāāāāāāāā āāāāāāāāāāā ā
ā ā Revenue ā ā Deals ā ā Avg Dealā ā Win Rateā ā
ā ā $125K ā ā 23 ā ā $5,400 ā ā 34% ā ā
ā ā ā² 15% ā ā ā² 8% ā ā ā² 12% ā ā ā¼ 2% ā ā
ā āāāāāāāāāāā āāāāāāāāāāā āāāāāāāāāāā āāāāāāāāāāā ā
ā ā
ā [Revenue Trend Chart - Line] ā
ā [Pipeline by Stage - Funnel] ā
ā [Top Sales Reps - Bar] ā
ā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤
ā Date ā Deal ā Value ā Rep ā Stage ā Prob ā
ā 1/30 ā Acme Corp ā $15,000 ā Alice ā Proposal ā 60% ā
ā 1/29 ā Tech Inc ā $8,500 ā Bob ā Demo ā 40% ā
ā ... ā ... ā ... ā ... ā ... ā ... ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Marketing Tracker
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā MARKETING METRICS ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤
ā Channel ā Spend ā Leads ā CPL ā Conv % ā Revenue ā
āāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāā¼āāāāāāāāā¼āāāāāāāāā¼āāāāāāāāāāāā¤
ā Google Ads ā $5,000 ā 150 ā $33 ā 3.2% ā $45,000 ā
ā Facebook ā $3,000 ā 200 ā $15 ā 1.8% ā $28,000 ā
ā LinkedIn ā $2,500 ā 50 ā $50 ā 5.5% ā $35,000 ā
ā Organic ā $0 ā 300 ā $0 ā 2.1% ā $52,000 ā
āāāāāāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāā¼āāāāāāāāā¼āāāāāāāāā¼āāāāāāāāāāāā¤
ā TOTAL ā $10,500 ā 700 ā $15 ā 2.8% ā $160,000 ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ROAS: 15.2x
Best Channel: LinkedIn (highest conversion)
Action: Increase LinkedIn budget by 20%
Formulas Reference
Common Automation Formulas
# Auto-status based on date
=IF(C2<TODAY(), "OVERDUE", IF(C2=TODAY(), "DUE TODAY", "UPCOMING"))
# Days until due
=DATEDIF(TODAY(), C2, "D")
# Auto-assign based on criteria
=IFS(B2="Enterprise", "Alice", B2="Mid-Market", "Bob", TRUE, "Carol")
# Calculate conversion rate
=IFERROR(D2/C2, 0)
# Running total
=SUMIF($A$2:A2, "<="&A2, $B$2:B2)
# Conditional formatting trigger
=AND($E2="High", $F2<TODAY())
# VLOOKUP from another sheet
=VLOOKUP(A2, 'Reference Data'!$A:$C, 3, FALSE)
# Query for dashboard
=QUERY(Data!A:F, "SELECT A, SUM(C) WHERE B='Closed Won' GROUP BY A")
Output Example
Request: "Set up automated task reminders from Google Sheets"
Output:
# Task Reminder System Setup
## Sheet Structure
Create a sheet named "Tasks" with these columns:
| A | B | C | D | E | F |
|---|---|---|---|---|---|
| Task | Assignee | Due Date | Priority | Status | Slack ID |
| Review proposal | Alice | 2026-01-31 | High | In Progress | U12345 |
| Update docs | Bob | 2026-02-01 | Medium | Todo | U67890 |
## Automation Workflow
```yaml
trigger: Every 15 minutes
actions:
1. Check for tasks due within 24 hours
2. Send Slack DM to assignee
3. Post daily summary at 6pm
Sample Reminders
Overdue Alert:
šØ *OVERDUE*: Review proposal
Due: Jan 29 (1 day ago)
Priority: High
Please update status or mark complete.
Due Today:
ā° *Due Today*: Update documentation
Priority: Medium
You've got this! šŖ
Daily Recap (6pm):
š *Daily Task Recap*
ā
Completed today: 5
ā³ In Progress: 3
šØ Overdue: 1
Tomorrow's priorities:
⢠Review proposal (High) - Alice
⢠Client call prep (High) - Bob
Setup Steps
- Create Google Sheet with structure above
- Set up n8n workflow with Schedule trigger
- Connect Google Sheets and Slack nodes
- Test with sample tasks
- Activate workflow
Would you like the complete n8n workflow JSON?
---
*Sheets Automation Skill - Part of Claude Office Skills*
