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.

Agentic Task
ClaySalesforceSlack BotSalesOperationsData SyncLead EnrichmentNotifications & Alerts
PromptCreate

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?
No. It fills empty fields, and it only replaces a value that is already there when Clay returns a confident result showing the old one is wrong. It never blanks out a field that already has data. Anything uncertain is left alone and mentioned in the recap instead.
Do I need to set anything up in Clay first?
Yes. You need one enrichment routine built in your Clay workspace, and you paste its ID into the workflow once. Clay does not expose routine IDs through its API, so you copy it from the Clay interface.
How many contacts can it handle?
Contacts go to Clay in batches of up to 100, and the workflow works through as many batches as your open pipeline needs, waiting for each one to finish before writing anything back.
Why run it monthly instead of every day?
Business contact data goes stale at roughly 3 to 5 percent per month, so a monthly pass keeps live deals accurate without spending enrichment credits on records that have not had time to change. You can change the schedule to whatever suits your team.
What counts as an at-risk opportunity?
An open deal where the main contact's job title or employer changed since the deal was created. If your champion has moved on, that deal may have lost the person who was going to sign, which is worth knowing before forecast review.

Related templates

Review desk for portal forms your team still fills in by hand

Stage a batch of filings overnight, then approve each completed form from a screenshot before anything is ever submitted.

Kernel
Google Sheets
Slack Bot
App
Client-by-client cold email pipeline review for agencies

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.

Instantly
HubSpot
Slack Bot
App
Audit what Intercom's Fin AI actually resolved before you pay

Review every conversation Fin closed as resolved, judge which ones actually stuck, and see what the gap is worth against your bill.

Intercom
Google Sheets
Slack Bot
App
One triage console for every Jira service desk queue

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.

Jira Service Management
Jira
Slack Bot
App
Run your Webflow site translations from one review desk

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.

Webflow
JigsawStack
Slack Bot
+1
App
Legal contract intake desk your teams use instead of email

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.

Ironclad
Slack Bot
General Input Database
App

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.