# Weekly HubSpot champion job change alerts, powered by Clay

> Every Monday at 8am ET, we scan your HubSpot champions for job changes with Clay, refresh their record, and DM the account owner in Slack.

- Workflow type: agent
- Services: Clay, HubSpot, Slack
- Categories: Sales, Operations
- Published: 2026-07-11

## What it does

- Every Monday morning, sweeps your Champions and Closed Won Buyers in HubSpot for contacts who quietly changed jobs.
- Runs each contact through your existing Clay job change detection routine, so it uses the enrichment logic you already trust.
- Updates HubSpot with the new company, title, and a job change timestamp so your CRM stops going stale on your best relationships.
- Sends the account owner a Slack DM with the old vs new role, a two line blurb on the new company, and a draft reactivation opener they can copy and send.

## What you'll need

- A Clay workspace with an API key and a job change detection routine already built in the Clay UI.
- A HubSpot account with access to your Champions and Closed Won Buyers lists and permission to edit contact properties.
- A Slack workspace where account owners can receive direct messages, connected to the same email addresses used in HubSpot.

## Prompt

Build me an agent workflow that runs every Monday at 8am America/New_York on a cron trigger. Its job is to detect job changes among my HubSpot champions and kick off a per-owner reactivation motion in Slack.

Step 1. Pull the source list from HubSpot. Use HubSpot's Search Contacts to fetch every contact who is a member of the "Champions" list or the "Closed Won Buyers" list. For each contact I need the contact id, first name, last name, primary email, LinkedIn URL, current company, current job title, the do-not-contact flag, and the HubSpot owner id. Skip anyone with do-not-contact set to true before doing anything else.

Step 2. Detect job changes with Clay. I have already built a "detect job change" routine in the Clay UI. Take the surviving contacts, batch them in chunks of up to 100, and call Clay's Run a Routine with each batch, passing email and LinkedIn URL as inputs. The routine id should be a parameter I configure at setup time. Run a Routine returns a routine_run_id with status in_progress, so poll Get Routine Run Results on a reasonable interval (start around 15 seconds, back off exponentially, cap at a few minutes total) until status is complete or failed. Honor 429 responses using the Retry-After header. If any batch fails, log it and continue with the rest.

Step 3. Identify real changes. For each Clay result, compare the current_company Clay returns to the company HubSpot had on file. Consider it a change only when the new company clearly differs (ignore casing, trailing Inc/LLC/Ltd noise, and whitespace). Ignore results Clay marks as low confidence.

Step 4. Refresh HubSpot for each real change. Call HubSpot Update Contact to set the new company, new job title, and a custom property called job_change_detected_at with today's date in ISO 8601. If job_change_detected_at does not exist yet, tell me at setup time so I can create it as a datetime property in HubSpot first.

Step 5. Alert the account owner in Slack. For each changed contact, look up the HubSpot owner via Get Owner to get the owner's email. In Slack, find the matching user by email (List Users if needed, then match on profile.email), then call Slack Open a Conversation to get a DM channel id, and Send a Message with a short DM that includes: the contact's name, the old role at the old company, the new role at the new company, a two-line context blurb summarizing the new company (industry, size, why it matters) using the enrichment fields Clay returned, and a three to four sentence draft reactivation opener the rep can copy and paste. Keep the tone warm and human, not markety.

At the end of the run, log a compact summary: how many contacts were scanned, how many job changes were detected, how many HubSpot updates succeeded, how many Slack DMs were sent, and any errors per step. Make the HubSpot list names, the Clay routine id, and the schedule easy to change without editing the workflow instructions.

## How to customize

- Change the schedule from Monday at 8am ET to a different day, time, or cadence that matches your outbound rhythm.
- Swap the HubSpot lists to any segment you care about, such as product advocates, power users, or top ARR accounts.
- Route the alerts to a shared #champion-moves channel instead of a per owner DM, or add a manager as a second recipient.

## FAQ

### Do I have to build the Clay routine first?

Yes. This workflow assumes you already have a job change detection routine built in Clay that takes an email or LinkedIn URL and returns the person's current company and title. If you have not built one yet, Clay has a template for exactly this use case in their Use Case Templates library.

### What happens to contacts flagged as do-not-contact?

They are skipped. The workflow reads the do-not-contact flag on the HubSpot contact and quietly excludes those people from both the update and the Slack DM, so your data hygiene rules are respected.

### Can I run this more often than weekly?

Yes. The schedule is a knob you can change during setup or later. Some teams run it daily on a smaller list, others prefer monthly on a larger one. Clay usage costs and rep bandwidth are the practical limits.

### Where do the Slack alerts land?

By default, each alert opens a direct message with the HubSpot contact owner, so only that rep sees the moves for their book. You can change this at setup to post in a shared channel instead.

### What if a contact has no LinkedIn URL in HubSpot?

The workflow sends whichever identifier is available, usually work email, to your Clay routine. Clay handles the enrichment lookup from there. Contacts with no usable identifier are skipped and reported in the run summary.

Use this prompt in General Input: https://www.generalinput.com/prompts/weekly-hubspot-champion-job-change-alerts-powered-by-clay