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
Stage a batch of filings overnight, then approve each completed form from a screenshot before anything is ever submitted.
Pick a client and a date range to see sent, replies, meetings booked and the real deal value your cold email produced, campaign by campaign.
Review every conversation Fin closed as resolved, judge which ones actually stuck, and see what the gap is worth against your bill.
Merge your IT, HR and Facilities queues into one list ranked by SLA time left, then reply, change status and escalate without ever opening Jira.
See every page's translation status at a glance, edit translations side by side with the English, and publish only what your team has actually approved.
One place for sales and ops to request an NDA or vendor agreement, watch its status, and let legal launch the contract in a single click.
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.