# Weekly LinkedIn job-change sweep for HubSpot with Airtop

> Every Monday at 7am, a cloud browser checks each contact's LinkedIn profile, updates HubSpot when they've moved, and Slacks the movers to #sales.

- Workflow type: agent
- Services: Airtop, HubSpot, Slack
- Categories: Sales
- Published: 2026-07-17

## What it does

- Pulls your 100 most recently engaged HubSpot contacts every Monday morning
- Visits each person's LinkedIn profile in a real, logged-in cloud browser to read their current company and title
- Updates HubSpot only when someone has genuinely changed jobs (new company or role) and stamps the date it happened
- Posts a single Slack digest to your sales channel with every mover, old vs new, and a link to the HubSpot record

## What you'll need

- A HubSpot account with permission to read and update contacts
- An Airtop account with a saved browser profile that's already logged into LinkedIn
- A Slack workspace and a channel (like #sales) to receive the digest

## Prompt

Every Monday at 7am, refresh my HubSpot contacts for job changes by checking their LinkedIn profiles with an Airtop cloud browser. This is agent-shaped work: LinkedIn is DOM-heavy and login-gated, and each profile needs a small judgement call on whether the observed change is a real move or a cosmetic title tweak.

Start by using HubSpot Search Contacts to pull the 100 most recently engaged contacts (sort by notes_last_updated or lastmodifieddate descending, and request the properties firstname, lastname, email, company, jobtitle, hs_linkedin_url, and hs_object_id). Skip any contact whose LinkedIn URL is empty; do not try to guess one.

Set up Airtop once at the top of the run: call Create Session with a named profileName (for example "linkedin-session") so LinkedIn stays signed in across runs, poll GET session until status is running, and reuse this single session for every contact. Rate-limit strictly to one profile at a time by processing contacts serially, one after another; do not fan out in parallel. For each contact, call Create Window on their LinkedIn profile URL, then run Query Page with a JSON outputSchema whose properties are current_company (string), current_title (string), and start_date (string, ISO or blank). Close the window when done.

Compare each result against the HubSpot company and jobtitle fields on file. Only treat it as a real job change when the company has changed, or when the title has changed to a substantively different role (a new function or seniority, not just wording swaps like "Sr." versus "Senior" or reordered adjectives at the same company). When that's true, call HubSpot Update Contact by hs_object_id and write the new company and jobtitle plus a custom job_change_detected_at property set to the current ISO timestamp. If the property does not exist yet, note that in the run log so the operator knows to create it in HubSpot.

After the last contact, call Airtop Save Profile on Termination against the same profile name so the LinkedIn session persists, then Terminate Session to release credits.

Finish by posting one Slack digest to #sales with Send a Message. Group every mover into a single message: contact name, old company and role, new company and role, and a link to the HubSpot record (built from the portal ID and hs_object_id, i.e. https://app.hubspot.com/contacts/{portalId}/contact/{contactId}). If nobody moved this week, skip the Slack message entirely rather than sending an empty digest. Never post per-contact messages; one grouped digest only.

## How to customize

- Change the schedule (weekday, time, or how often it runs)
- Adjust how many contacts get checked each run, or filter to a specific list, segment, or owner
- Pick a different Slack channel, or tag specific reps when one of their contacts moves

## FAQ

### Do I need a paid LinkedIn account for this to work?

No. You just need to be signed in, and free LinkedIn works fine. The workflow reuses a saved Airtop browser profile that stays logged in between runs, so you don't have to keep signing in.

### What counts as a real job change?

A new company, or a role change substantial enough to matter (like a new title on a different team). Cosmetic tweaks such as rewording a title at the same company are ignored so the Slack digest stays useful.

### What happens to contacts without a LinkedIn URL on file?

They're skipped. Only HubSpot contacts that have a LinkedIn URL saved on the record get checked, so nothing gets flagged as a miss.

### Will this get my LinkedIn account flagged?

The workflow opens one profile at a time and moves at a human pace, which is what LinkedIn expects. Reusing the same saved browser profile every run (rather than logging in fresh) also looks more like normal usage.

### Can I check more than 100 contacts a week?

Yes. The 100 cap is a sensible default so runs stay cheap and finish fast. Bump it if you want deeper coverage, though longer runs will use more Airtop credits.

Use this prompt in General Input: https://www.generalinput.com/prompts/weekly-linkedin-job-change-sweep-for-hubspot-with-airtop