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.

Agentic Task
AirtopHubSpotSlackSalesData SyncLead Enrichment
PromptCreate

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.

What does this prompt do?

  • 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 do I need to use this?

  • 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

How can I customize it?

  • 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

FAQs

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.

Related templates

Auto-fix your calendar when a flight slips, and flag what's at risk

When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.

Google Calendar
AviationStack
Slack
Agentic Task
Trace phishing emails to the sending IP and report abuse

Every 15 minutes, forwarded phishing reports get traced back to the server that really sent them, with a verdict in Slack and the worst senders reported.

AbuseIPDB
Gmail
Slack
Agentic Task
Log Agorapulse social conversations to HubSpot contacts

Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.

Agorapulse
HubSpot
Slack Bot
Agentic Task
Turn procurement portal tenders into CRM deals each morning

Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Clean up HubSpot contacts from your Amazon SES suppression list

Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.

Amazon SES
HubSpot
Slack Bot
Agentic Task
Provision customer entitlements in DynamoDB when a deal is won

When a HubSpot deal hits Closed Won, the customer's plan, seats and renewal dates land in your DynamoDB accounts table, with a Slack note showing what changed.

HubSpot
Amazon DynamoDB
Slack Bot
Agentic Task

Stop losing deals because your CRM is out of date.

This workflow keeps HubSpot in sync with reality, so your team stops emailing people at jobs they left.