Monthly Salesforce contact refresh on open pipeline with Clay
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.
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.
What does this prompt do?
- Finds the contacts on your open deals that are missing a title, phone, or company size, or that have not been updated in more than 90 days.
- Sends them to Clay in batches for enrichment, then waits for every batch to finish before touching your CRM.
- Writes verified values back to Salesforce, filling in blanks and correcting stale fields without ever wiping data you already have.
- Flags open deals where the main contact changed job title or employer, and posts a monthly recap to your revenue operations channel in Slack.
What do I need to use this?
- A Salesforce login with permission to view opportunities and edit contacts
- A Clay account with an enrichment routine already built, plus that routine's ID copied from your Clay workspace
- A Slack workspace and the channel where the revenue operations recap should land
How can I customize it?
- Change the timing or the staleness window: run it weekly or quarterly, and treat records as stale after 30, 60, or 180 days instead of 90.
- Change which fields count as gaps. Title, phone, and company size are the defaults, but you can add industry, headcount, or LinkedIn profile.
- Narrow the scope to one sales team, region, or deal size, and choose which channel gets the monthly recap.
FAQs
Will this overwrite good data in my CRM?
Do I need to set anything up in Clay first?
How many contacts can it handle?
Why run it monthly instead of every day?
What counts as an at-risk opportunity?
Related templates
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Open one board each morning, see which voice calls went badly, replay the exact moment the caller got frustrated, and file the fix.
A personal queue of every overdue Guru card, sorted by how late it is, with one-click verify, reassign, comment, and an agent that drafts the refresh for you.
Stop letting your open pipeline go stale.
Run a monthly hygiene pass that refreshes the contacts on live deals and tells you which champions have already moved on.