Skip to main content
Time to complete: 15–25 minutesDifficulty: Beginner to IntermediatePrerequisites: Google Sheets connectionYou’ll build: Agents that log data to spreadsheets, act on lists, and enrich rows with external information

Why Automate With Google Sheets?

The Problem: Spreadsheets sit at the center of most business workflows, but keeping them up to date is manual work. Teams copy data from emails, forms, and CRM systems into Sheets by hand. Lists in Sheets sit idle when they should be driving outreach or operations. Rows with incomplete data stay incomplete because enrichment requires too many lookups. The Solution: Duvo agents can read from and write to Google Sheets on your behalf — logging data as it arrives, executing operations against every row in a list, and filling in missing information from external sources. What you can achieve:
  • Keep a tracking spreadsheet current without manual data entry
  • Turn a spreadsheet list into a work queue your agent processes automatically
  • Enrich rows with data from external systems so your team works with complete records
  • Generate structured reports by pulling from multiple sources and writing results into a formatted sheet
  • Audit every action in a log spreadsheet for transparency and review

Before You Start

Make sure you have these ready:
Google Sheets connection — Click Enable on the Connections page and authorize with your Google account
Gmail or Outlook connection (optional) — if your workflow involves incoming emails
Slack connection (optional) — for notifications when rows are processed or anomalies are found
CRM connection (optional) — HubSpot, Salesforce, or Pipedrive for enrichment and logging

Use Case 1: Building a Live Data Tracker

Outcome: A shared spreadsheet stays current automatically. When something happens — an email arrives, a form is submitted, a CRM record changes — a new row appears in your Sheet. No manual copying, no batch imports. This is the most common Google Sheets pattern in Duvo. Logging into Sheets from any trigger gives your team a single place to track what is happening across systems.

Create the Destination Sheet

Before building the agent, set up the spreadsheet you want to log into:
  1. Create a new Google Sheet (or use an existing one)
  2. Add column headers in row 1 matching the data you want to capture — for example: Date, From, Company, Subject, Amount, Status
  3. Copy the spreadsheet URL — you will include it in your AOP

Create Your Agent

  1. Click ”+ Create Agent” from your dashboard
  2. Select “Use Agent Builder”

Paste This AOP

Adapt this example to your specific data source:

Enable the Trigger

To log data automatically as emails arrive:
  1. Open your agent settings
  2. Go to Triggers
  3. Select Gmail as the trigger source
  4. Enter the sender address to filter (for example, orders@supplier.com)
See Event-Driven Triggers for full setup details.

Connect Required Connections

Under Connections, enable:
  • Gmail — required for the trigger
  • Google Sheets — for logging rows
  • Slack — for high-value alerts (optional)

Expected Results

  • A new row appears in your spreadsheet each time a matching email arrives
  • High-value orders trigger an immediate Slack notification
  • The Status column is pre-filled, ready for your team to update as the order progresses
  • No manual copying required — the spreadsheet becomes a live record

Use Case 2: Driving Bulk Actions from a Spreadsheet List

Outcome: A list in your spreadsheet becomes a work queue. Your agent reads each row, takes the appropriate action (sending an email, updating a record, calling an API), and marks the row as processed. You handle exceptions; the routine work runs automatically. This pattern works for outreach lists, follow-up queues, batch record updates, and any situation where a spreadsheet drives operations.

Prepare Your Spreadsheet

Set up a sheet with one row per item to process. Add a Status column so the agent can track progress:Leave the Status column as “Pending” for rows that need processing.

Create Your Agent

  1. Click ”+ Create Agent” from your dashboard
  2. Select “Use Agent Builder”

Paste This AOP

Connect Required Connections

Under Connections, enable:
  • Google Sheets — for reading the queue and updating status
  • Gmail or Outlook — for sending emails
  • Slack — for the completion summary (optional)

Schedule or Trigger

You can run this agent:
  • On demand — click Start Work when you want to process the queue
  • On a schedule — set it to run daily or weekly in Agent Settings > Schedule
  • When the sheet changes — use Event-Driven Triggers if your trigger source can notify Duvo on update

Expected Results

  • All “Pending” rows are processed in sequence
  • Each row is marked “Sent” or “Failed” immediately after the action is taken
  • You receive a Slack summary with the final counts
  • Rows that fail are clearly marked so you can investigate and retry
  • The sheet doubles as an audit trail — every action is timestamped

Use Case 3: Enriching and Cleaning Spreadsheet Data

Outcome: Rows with incomplete or raw data are updated in place with information pulled from external sources. What took hours of manual lookup — filling in company sizes, verifying addresses, resolving duplicate entries — runs automatically. This pattern works for lead enrichment, data validation, deduplication, and standardizing fields imported from other systems.

Identify What Needs Enriching

Decide which columns are missing data or need cleanup. Common examples:
  • A list of email addresses that needs company name, industry, and headcount added
  • A list of addresses that needs to be standardized and geocoded
  • A product list that needs current pricing pulled from a supplier portal
  • A contact list with duplicate rows that need to be merged

Create Your Agent

  1. Click ”+ Create Agent” from your dashboard
  2. Select “Use Agent Builder”

Paste This AOP

Adapt this example to your enrichment task:

Connect Required Connections

Under Connections, enable:
  • Google Sheets — for reading and updating rows
  • Browser — for looking up information on external sites
  • Slack — for the completion summary (optional)
For enrichment from specific systems, also enable:
  • HubSpot or Salesforce — if enriching from your CRM
  • Exa — for company and contact research via AI-powered web search

Expected Results

  • Blank fields are filled in automatically for each row
  • “Not found” is written where data genuinely does not exist, so gaps are visible rather than hidden
  • You receive a summary telling you how complete the enrichment was
  • The sheet is ready for segmentation, outreach, or import into another system

Tips for Better Results

Reference the spreadsheet by URL, not by name: When writing your AOP, paste the full Google Sheets URL rather than the spreadsheet name. This removes ambiguity if multiple sheets share a similar name and makes it easy to update the target later. Use a Status column for any queue-based workflow: Marking rows as “Pending”, “In Progress”, “Done”, or “Failed” lets your agent resume safely if interrupted. It also gives your team an at-a-glance view of queue health. Keep headers in row 1 and data starting in row 2: Agents expect standard spreadsheet layout. If your sheet has merged headers, grouped columns, or data starting in a different row, include that detail in your AOP. Process in batches for large sheets: If you have thousands of rows, tell the agent to process a fixed number per Run (for example, “process the first 100 Pending rows”). This keeps each Run fast and lets you monitor quality as you go. Convert .xlsx files before connecting: If you uploaded an Excel file to Google Drive, convert it to a native Google Sheet first. Go to File > Save as Google Sheets. Some Google Sheets operations are not supported on imported .xlsx files — see the Google Sheets connection page for details. Add Human-in-the-Loop for sends and updates: For any workflow that sends emails or modifies records in an external system, consider adding an approval step before the action is taken. See Human-in-the-Loop.

Troubleshooting

  • Confirm the Google Sheets connection is authorized on the Connections page
  • Make sure the Google account you authorized has access to the spreadsheet
  • Paste the full spreadsheet URL directly into your AOP rather than using the file name
  • Add a deduplication check to your AOP: “Before appending, check whether a row with the same [Order Number / Email / ID] already exists. If it does, skip it.”
  • Add a unique identifier column (such as Order Number or Email) and use it as the key for deduplication
  • Check whether the column header in your AOP exactly matches the header in the sheet — spelling and capitalization must match
  • If the sheet has multiple tabs, specify the tab name in your AOP: “Update the Status column in the ‘Queue’ tab”
  • Review the column order in your AOP and compare it to the actual headers in your sheet
  • If columns have been added or reordered since the agent was built, update the AOP to reflect the current layout
  • Confirm the Status filter in your AOP exactly matches the value you set when marking rows done (for example, “Done” vs “Completed” — these are different)
  • If rows were marked manually and formatting differs (extra spaces, different capitalization), standardize the values in the sheet
  • Provide more specific instructions in your AOP about where to find information — for example, “Look for the employee count on the company’s LinkedIn About page”
  • Upload a reference document via Files listing the sources your agent should prefer
  • Use the Learning Feature to correct outputs and improve accuracy over time

Google Sheets Connection

Connect and authorize Google Sheets

Event-Driven Triggers

Start Runs automatically on a trigger

Human-in-the-Loop

Add approval steps before sends and updates

Files

Upload reference documents

Learning Feature

Improve accuracy over time

Gmail Workflows

Triage inboxes and extract email data

Weekly Sales Report

Generate structured reports automatically