Monthly Salesforce contact refresh on open pipeline with Clay

By General Input

On the first Monday of each month, refresh the contacts on your open deals with Clay, fill the gaps in Salesforce, and flag the buyers who have quietly moved on.

Integrations

  • Clay
  • Salesforce
  • Slack Bot

Type

Agentic Task

Categories

  • Sales
  • Operations

On the first Monday of every month at 7am, run a data hygiene pass over the contacts attached to my open Salesforce pipeline.

Start in Salesforce. Use Get Many Opportunities (or a SOQL Query) to pull every opportunity that is still open, meaning IsClosed is false, and gather the contacts linked to those deals. Use Get Many Contacts (or a SOQL Query) to load the full contact records. From that set, select the contacts that need attention: any record where a key field such as title, phone, or company size is missing or empty, and any record whose LastModifiedDate is more than 90 days ago. Keep track of which opportunity each contact belongs to, along with the opportunity name, amount, owner, and created date, because I need those later for the summary.

Send the selected contacts into Clay for enrichment using Run a Routine, in batches of up to 100 items per run. I will give you the Clay routine ID. Clay does not expose routine IDs through its public API, so I will paste it in from my Clay workspace UI. Run a Routine is asynchronous and returns a routine_run_id, so for each batch poll Get Routine Run Results with that id until the run reaches a terminal status (complete, failed, or validation_failed), then collect the enriched rows. Space the polls out sensibly rather than hammering the API, and if one batch fails, note it and carry on with the remaining batches instead of aborting the whole run.

Write the verified values back to Salesforce with Update Contact. Be conservative about this. Only overwrite a field when Clay returns a confident value, and never blank out data that already exists. If Clay returns nothing, or a low confidence result for a field, leave the existing Salesforce value untouched. Filling an empty field is always fine. Replacing a field that already has a value should only happen when Clay is confident the current value is wrong.

Separately, flag any contact whose title or employer changed relative to what Salesforce had on record, where the deal was created before that change. A main contact who has moved on is a real risk to an open opportunity, so treat these as findings to report rather than quiet updates.

Finish by posting a summary to my revenue operations channel in Slack with Send a Message. Cover how many contact records were refreshed, which fields changed most often, and a short list of at-risk opportunities where the primary contact appears to have left, including the opportunity name, amount, and owner so the team can act on it. Keep it skimmable, and call out any batches that failed so I know the pass was incomplete.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them