Send Google Sheets leads to Saleshandy sequences
Drain your leads spreadsheet into a Saleshandy sequence every 30 minutes, with the import result written back to each row.
Build a code workflow that continuously drains a Google Sheets tab of new leads into a specific Saleshandy sequence.
Trigger: cron, every 30 minutes.
Configuration inputs on the workflow: the Google Sheets spreadsheet ID, the tab (sheet) name and range that holds the leads, the Saleshandy sequence ID, and the Saleshandy step ID that new prospects should be added to.
Step 1: Call Google Sheets Get Values against the configured spreadsheet and range. Expect columns: first name, last name, email, company, LinkedIn URL, and Status. Skip the header row.
Step 2: Filter the returned rows down to ones where the Status column is blank or equals "pending" (case-insensitive). If there are no matching rows, exit the run cleanly.
Step 3: For each matching row, call the Saleshandy Import Prospects into Sequence operation, passing the configured sequence ID and step ID and mapping the sheet columns onto the prospect fields (first name, last name, email, company name, LinkedIn URL). Collect the returned requestId for each row.
Step 4: For each requestId, poll Saleshandy Get Prospect Import Status until the async import job reports completion. Back off between polls and cap the total wait so a stuck job cannot hang the run.
Step 5: Map each per-prospect status code returned by Saleshandy onto a human label: 10000 becomes "imported", 10600 becomes "duplicate", 10100 becomes "invalid email", 12000 becomes "already in another sequence", and anything else becomes "error".
Step 6: Write the labels back to the sheet using Google Sheets Batch Update Values, targeting the Status column for each processed row. Use USER_ENTERED as the value input option so the cells display as plain text.
The Status column doubles as the idempotency marker, so the next run naturally skips rows that were already processed. Do not delete or reorder rows in the sheet. Log a short per-run summary (rows scanned, rows imported, rows duplicate, rows invalid, rows error).
Additional information
What does this prompt do?
- Checks your leads spreadsheet every 30 minutes for new rows that have not been sent yet.
- Adds each new lead as a prospect in the Saleshandy sequence and step you choose.
- Waits for Saleshandy to finish processing the import, then writes the result back to the row.
- Marks each row as imported, duplicate, invalid email, or error so your team can see exactly what happened.
What do I need to use this?
- A Google account with access to the leads spreadsheet you want to drain.
- A Saleshandy account with an active sequence you want to load prospects into.
- A leads tab with columns for first name, last name, email, company, LinkedIn URL, and a Status column.
How can I customize it?
- Change how often it runs (every 15 minutes, hourly, once a day).
- Point it at a different sequence or a different step inside a sequence.
- Add or remove columns to match how your team tracks leads, or filter for a specific tag or owner before sending.
Frequently asked questions
How does it avoid sending the same lead twice?
What happens if a lead is already in another Saleshandy sequence?
Can I use this with more than one sequence?
Do I need to keep the spreadsheet open for it to work?
What if an email address is invalid?
Related templates
Stop uploading lead CSVs to Saleshandy by hand.
Connect Google Sheets and Saleshandy once, and Geni drains your leads sheet into the right sequence every 30 minutes.