Documentation Index
Fetch the complete documentation index at: https://docs.duvo.ai/llms.txt
Use this file to discover all available pages before exploring further.
| Time to complete | 15–25 minutes |
| Difficulty | Beginner to Intermediate |
| Prerequisites | Google Sheets connection |
| You’ll build | Assignments 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 assignments 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 assignment 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.Step 1: Create the Destination Sheet
Before building the assignment, set up the spreadsheet you want to log into:- Create a new Google Sheet (or use an existing one)
- Add column headers in row 1 matching the data you want to capture — for example:
Date,From,Company,Subject,Amount,Status - Copy the spreadsheet URL — you will include it in your SOP
Step 2: Create Your Assignment
- Click ”+ Create Assignment” from your dashboard
- Select “Use Assignment Builder”
Step 3: Paste This SOP
Adapt this example to your specific data source:Step 4: Enable the Trigger
To log data automatically as emails arrive:- Open your assignment settings
- Go to Triggers
- Select Gmail as the trigger source
- Enter the sender address to filter (for example,
orders@supplier.com)
Step 5: 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 assignment 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.Step 1: Prepare Your Spreadsheet
Set up a sheet with one row per item to process. Add a Status column so the assignment can track progress:| Name | Company | Message | Status | |
|---|---|---|---|---|
| Alex Chen | alex@example.com | Acme Co | Follow up on proposal | Pending |
| Sara Lee | sara@example.com | Buildco | Check invoice status | Pending |
Step 2: Create Your Assignment
- Click ”+ Create Assignment” from your dashboard
- Select “Use Assignment Builder”
Step 3: Paste This SOP
Step 4: 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)
Step 5: Schedule or Trigger
You can run this assignment:- On demand — click Start Work when you want to process the queue
- On a schedule — set it to run daily or weekly in Assignment 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.Step 1: 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
Step 2: Create Your Assignment
- Click ”+ Create Assignment” from your dashboard
- Select “Use Assignment Builder”
Step 3: Paste This SOP
Adapt this example to your enrichment task:Step 4: 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)
- 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 SOP, 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 assignment 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: Assignments expect standard spreadsheet layout. If your sheet has merged headers, grouped columns, or data starting in a different row, include that detail in your SOP. Process in batches for large sheets: If you have thousands of rows, tell the assignment to process a fixed number per Job (for example, “process the first 100 Pending rows”). This keeps each Job 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
Assignment cannot find the spreadsheet
- 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 SOP rather than using the file name
Rows are being duplicated
- Add a deduplication check to your SOP: “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
Status column is not being updated after processing
- Check whether the column header in your SOP exactly matches the header in the sheet — spelling and capitalization must match
- If the sheet has multiple tabs, specify the tab name in your SOP: “Update the Status column in the ‘Queue’ tab”
Data appears in the wrong columns
- Review the column order in your SOP and compare it to the actual headers in your sheet
- If columns have been added or reordered since the assignment was built, update the SOP to reflect the current layout
The assignment is processing rows that are already done
- Confirm the Status filter in your SOP 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
Enrichment quality is low or inconsistent
- Provide more specific instructions in your SOP 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 assignment should prefer
- Use the Learning Feature to correct outputs and improve accuracy over time