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.

Deterministic Code
SaleshandyGoogle SheetsSalesOperationsData SyncEmail AutomationLead Enrichment
PromptCreate

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?
The workflow only picks up rows where the Status column is blank or set to pending. Once a row has been imported, its status is updated, so the next run skips it automatically.
What happens if a lead is already in another Saleshandy sequence?
Saleshandy returns a duplicate result, and the workflow writes that outcome back to the row so your team can decide whether to move the lead manually.
Can I use this with more than one sequence?
Yes. You can duplicate this workflow for each sequence, or add a column in the sheet that specifies which sequence a row should go to and route based on that value.
Do I need to keep the spreadsheet open for it to work?
No. The workflow runs on a schedule in the background. You just need to make sure the sheet stays shared with the Google account you connected.
What if an email address is invalid?
Saleshandy flags it during import. The row gets marked as invalid email so you can fix or remove it, and the workflow moves on to the next lead.

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.