How to Log Linkedin and X Activity on HubSpot Contacts

An AE opens a HubSpot contact ten minutes before a renewal call. The record shows the last email, the last meeting, and a deal stage that hasn't moved in three weeks. What it doesn't show is that the buyer posted on Linkedin yesterday about cutting their tool stack for next year. The AE finds out on the call, which is the worst possible moment.

That gap is common. Most teams track email and meetings in the CRM and leave social activity in someone's feed, or in a Slack channel nobody scrolls back through. The signal exists, but it lives far from the place where people prepare.

I work on MultiFollow, an anonymous Linkedin and X activity watchlist. This post shows how to send our alerts into HubSpot with Zapier or n8n, so a prospect's post or comment lands on their contact record as a note or a task.

Why HubSpot doesn't see this on its own

HubSpot logs what happens between you and the contact, like replies, booked meetings, and calls. It doesn't know what that person says in public, because nothing connects their Linkedin or X account to the record.

We don't ship a native HubSpot app either. What we have is an API webhook. Every time a tracked account posts, comments, or likes (likes are Linkedin only), we send a small JSON message to a URL you choose. Zapier and n8n can both receive that message and turn it into a HubSpot action, so the webhook becomes the integration.

Here's the message for a Linkedin post, taken from our API webhooks page.

{
  "platform": "linkedin",
  "profile_url": "https://www.linkedin.com/in/erikatrautman/",
  "query": "URL: https://www.linkedin.com/in/erikatrautman/. Track posts. Track comments. Track likes.",
  "datetime": "2025-01-19T05:52:00Z",
  "link": "https://www.linkedin.com/posts/erikatrautman_vice-president-strategy-and-business-operations-activity-7272270503808000000-OxBb",
  "content": "I've got two more great leadership positions I'm filling! I am so inspired by the vision and the culture here at Sprout. So come join me to transform how companies leverage social media to connect with their customers.",
  "activity_type": "post"
}

The field that does the work is profile_url. It's the only thing that ties the alert to a person, so the whole setup comes down to finding the HubSpot contact with that same URL.

Get the matching right first

Think of it like a mail sorter reading an address label. If the label says "12 Main St" and the mailbox says "12 Main Street," the letter sits in a bin. HubSpot search works the same way on a property value, so https://www.linkedin.com/in/jane-doe/ and linkedin.com/in/jane-doe won't match.

HubSpot already has a default contact property called Linkedin URL. Fill it in for the contacts you want to watch, and use exactly the same format you used when you created the tracker. Our trackers take Linkedin people as https://www.linkedin.com/in/{username}/, so I'd store that form, trailing slash included.

X is a bit more work, since HubSpot has no default property for an X profile. Create a custom contact property, something like "X profile URL," and fill it with https://x.com/{username}, the format our X trackers use.

If you're building the watchlist from a HubSpot export, you can do both at once. Export the contacts with their Linkedin URL column, clean the URLs in the sheet, re-import them to HubSpot, and load the same file into MultiFollow. The bulk CSV import guide covers the MultiFollow side.

Setting it up in Zapier

Once the URLs line up, the Zap itself has four steps.

1. Catch the webhook

Create a Zap with Webhooks by Zapier as the trigger and pick Catch Hook. Zapier gives you a URL. In MultiFollow, paste it into the API webhook URL field of the trackers you want in HubSpot. You can also set it at the account level, but per-tracker URLs let you keep competitor trackers out of your CRM while prospects go in. Then trigger a test so Zapier sees a real payload.

2. Find the contact

Add a HubSpot step with the Find Contact action. Search on the Linkedin URL property for Linkedin alerts, or your custom X property for X alerts, and map profile_url into the value. If you track both networks, a Paths step on platform keeps the two searches apart.

Tell the step to stop when nothing is found. Otherwise one mistyped URL creates a run of failed Zaps, and you'll spend Friday reading error emails.

3. Decide what deserves a task

Not every alert should ping a rep. A Filter step works well here. I'd let comments and posts through and drop likes, because a like has no text to act on. If you want to be stricter, add include keywords on the tracker itself (pricing, hiring, a competitor's name) so only relevant posts reach Zapier. Our keyword filter guide explains how include and exclude lists combine.

4. Create the engagement

Finish with HubSpot's Create Engagement action, associated with the contact ID from step 2. A note works for a running log. A task works when you want the contact owner to do something today. Something like this reads well on the record:

New Linkedin post (via MultiFollow)
"I've got two more great leadership positions I'm filling!..."
https://www.linkedin.com/posts/erikatrautman_vice-president-strategy-...

There's one small detail I like. HubSpot's own docs say notes and completed tasks count toward Last activity date, but they don't count toward Number of times contacted. So logging a prospect's post won't make your outreach numbers look busier than they are.

The same flow in n8n

If you'd rather self-host, n8n follows the same shape. Start with a Webhook node set to POST and paste its production URL into MultiFollow. Add a HubSpot node with the Contact resource and the Search operation, filtered on the Linkedin URL property. Then put an IF node on activity_type and finish with a HubSpot node using the Engagement resource and the Create operation, set to a task.

n8n has one advantage here. You can tidy profile_url with an expression before the search (lowercase it, add the trailing slash), which forgives a few messy records that would break an exact match in Zapier. Our Zapier and n8n routing guide has the general webhook setup if you haven't wired one before.

Before you roll it out

A few things are worth knowing before you promise this to the sales team. This only works for people already on your watchlist and already in HubSpot. It won't create new contacts from strangers, and I'd keep it that way so the CRM doesn't fill with noise. It won't flag a job change either, so keep your enrichment tool for that. And Linkedin company pages send posts only, so a company tracker can log announcements on a company record but not comments or likes.

The plan matters too. API webhooks start on Business, so that's the floor for this setup. Here are the plan limits from our pricing page as of October 2026.

Plan Price Linkedin profiles X profiles API webhooks and Slack
Free $0 1 2 No
Essential $19/mo 5 10 No
Business $79/mo 25 50 Yes
Enterprise $199/mo 100 200 Yes

Business covers a focused list, like the buying committees on your top five open deals. If you want every champion across your book of business in HubSpot, Enterprise's 100 Linkedin profiles is the more realistic fit.

Try it on one contact

Before you build the Zap, add one prospect's Linkedin profile to the MultiFollow free plan, which covers 1 Linkedin and 2 X profiles with email alerts and needs no card. If their posts would have changed how you ran last month's calls, that's your case for wiring it into HubSpot.

Julien, Product Manager at MultiFollow