B2B Buying Signals: The LinkedIn Ones and How to Track Them
Most buying-signal advice starts with an intent-data contract. A good share of the signals worth acting on are already visible from your own LinkedIn account – if you know where to look and collect them consistently.
The short version. A buying signal is behaviour that suggests an account may be moving toward a purchase – visiting your pricing page, hiring for the role your product serves, engaging with your content, or asking a direct question about pricing or timing. Some come from vendor intent data; others you can observe on LinkedIn: who viewed your profile, who engaged with your posts or a competitor's, who is posting about the problem you solve, who is hiring for the role you sell to, and who just accepted your invitation or replied. You can collect those from your own account on a schedule, without an intent-data contract. Treat every one as a reason to look closer, not as proof someone is ready to buy.
What counts as a B2B buying signal
A buying signal is any observable behaviour that makes a purchase more likely than it was before. It falls into three kinds:
- Direct engagement with you – visits to your profile, reactions and comments on your posts, replies, accepted invitations, and the strongest of all: a direct request for a demo, pricing or timing.
- Public business and context observations – engagement on a competitor's post, public posts about the problem you solve, hiring for a role, a job change.
- Vendor intent datasets – topic research and website visits that intent-data vendors aggregate and sell.
LinkedIn's own marketing blog draws the line between first-party intent data you gather yourself and data bought from others. This guide covers the first two kinds together – the LinkedIn signals your account can observe.
No single signal proves intent. A profile view can be curiosity, a like can be politeness, and a hiring post can be a backfill. Signals earn attention in combination and in context – which is why the rest of this guide pairs every signal with a strength and a route.
Here is one morning's pass over those signals, run by an AI agent on your own LinkedIn account through Linked API:
Used Linked API: retrieve_profile_viewers, fetch_post, search_posts
- viewers seen since yesterday – 4 identified, 2 semi-private
- reactions and comments on each – 38 people
- "pipeline forecasting", past week, up to 30 – each post's text and date checked: 11 about the problem, 19 off-topic
- one viewer also commented – 52 people in all, each checked for role fit on the headline
52 people across the three sources, plus 2 semi-private viewers. Routed: 1 follow-up, 5 to the review queue, 9 logged, 37 suppressed for no role fit. The 2 semi-private viewers are logged as account-level observations, and the 19 off-topic posts are dropped. Nothing has been sent. The top rows:
| Person | Signal | Fit and evidence | Route |
|---|---|---|---|
| Jenna P. | Commented on your forecast-review post: "What would this cost for a 12-person team?" | Head of Sales Operations – fits; a direct pricing question | Follow-up – answer the question |
| Omar H. | Viewed your profile and commented on your forecasting post | RevOps Lead – fits; the comment is about the problem | Review queue – a view plus a relevant comment |
| Claire D. | Posted this week: "our pipeline forecast missed again this quarter" | VP Sales – fits; the post describes the problem | Review queue |
| Tom W. | Reacted to your hiring post | Head of Sales – fits, but the post is unrelated | Log only |
| Semi-private viewer | "Someone in Sales at a software company in Berlin" | No person identified | Log as an account-level observation |
nothing goes out – a person works the follow-up and the review queue
The LinkedIn buying signals you can see yourself
The strength grades below are editorial heuristics, not validated purchase probabilities – a starting point to tune against what actually turns into conversations for you.
| Signal | What it may suggest | Strength (heuristic) | How to pull it with Linked API |
|---|---|---|---|
| Someone viewed your profile | They looked you up after a post, comment or invitation | Weak alone; medium with ICP fit plus recent engagement | retrieveProfileViewers – identified viewers with name and profile. Semi-private viewers come back only as LinkedIn's description plus a search link, never a name; full-private viewers are not returned |
| Someone reacted to your post | The topic landed | Weak; medium with ICP fit when the post is about the problem | fetchPost with reactions (st.retrievePostReactions in the workflow API) – the response has no reaction time, so "first seen" is when your run noticed it |
| Someone commented on your post | Active interest in the topic | Medium; strong if they ask a problem, pricing or timing question | fetchPost with comments (st.retrievePostComments), with LinkedIn's relative time such as 3d |
| Someone engaged with a competitor's post | Interest in the category | Weak; medium with ICP fit and a category-relevant post | The same reactions and comments, on the competitor's post |
| Someone posted about the problem you solve | They are thinking about it in public | Medium when the author fits your ICP and the post describes the problem | searchPosts on a keyword – results can be loosely related, and each call is bounded (up to 100 posts) |
| A target account is hiring for the role you sell to | Budget and a team forming around the problem | Medium; weak outside your target accounts | searchJobs filtered by company |
| Someone accepted your invitation | Regular messaging is now open | Not a buying signal on its own | Network monitoring – connectionAccepted events, polled or by webhook |
| Someone replied | A conversation started | Strong if it is a positive question about the problem, pricing or timing; a negative reply means suppress | Inbox monitoring – inbox.messageReceived events |
| A champion changed jobs | Someone who knows your product lands somewhere new | Medium to strong when the new company fits your ICP | No native event: re-fetch saved profiles on a schedule and compare company and title |
A few boundaries worth knowing before you build on these:
- Profile views depend on what LinkedIn shows your account – Premium shows more of the list – and a semi-private viewer is an account-level observation at most: it names a company only when LinkedIn discloses one, and it never identifies a person or proves a repeat visit (viewing modes). The full picture is in who viewed my profile.
- Post engagement works on any public post URL, yours or a competitor's – see turning post engagers into warm leads.
- Keyword posts come from LinkedIn's content search – see searching posts by keyword.
- Hiring comes from jobs search – see monitoring new job postings.
How to identify buying signals that matter
Collecting everything produces noise. A short routine keeps it useful:
- Define the accounts and roles you sell to. Without an ICP check, every signal looks equally interesting.
- Pick the three or four signals that fit your motion, not all nine. A founder who posts weekly gets most from post engagement; a team selling to a named account list gets most from hiring and job changes.
- Watch them on a schedule – daily is enough for most of them.
- Score combinations above single events. A viewer from a target account who also engaged with a post beats either alone.
- Review weekly what turned into conversations, and adjust which signals you keep.
Then route each observation with one small rule set:
| Condition | Route |
|---|---|
| ICP and role fit and relevant content and recent | Research and review queue – a person checks before any outreach |
| A direct positive question about the problem, pricing or timing | Follow-up task – reply, offer a call |
| Negative reply, no fit, or unrelated content | Suppress |
| A single weak signal with no fit check yet | Log only |
How to respond to a buying signal
- Lead with relevance, not surveillance. Refer to the shared context – the post, the topic, the role – and never open with "I saw you viewed my profile".
- Answer direct questions directly. A comment asking about pricing or timing deserves a reply in the thread or a short message, not a sequence.
- Pick the right channel. Check the connection degree to choose between an invitation and a message.
- Keep the pace human. Stay inside LinkedIn's practical limits; more on first-touch tactics in cold outreach strategies.
Collecting LinkedIn signals automatically
The run near the top of this page is one pass of a daily routine: new profile viewers, engagement on your last three posts and recent posts on a keyword, each routed with the table above. Log every observation in the same shape, so a person can work the queue:
- who – name, profile URL and URN when known, or LinkedIn's description when that is all it shows;
- signal type and source – the post, the search term, the profile-viewers list;
- observed at – when the run first saw it, not when it happened;
- evidence – the comment text, the post excerpt, the viewer's relative time, and a comment's age as LinkedIn shows it;
- rule and action – which routing condition matched and what to do next.
What the routing can check, and what it leaves to you. It applies the table above as far as the data allows:
- Role fit – a pattern on the person's headline.
- Relevance – the problem terms in the post, or in the comment itself.
- Recency – keyword posts come from the past week; a comment older than a month goes to the log.
- Negative responses are suppressed before anything else.
- A profile view reaches the review queue only when the same person also has a qualifying engagement in the same run.
What it cannot check is left to the person working the queue: when a reaction happened (LinkedIn gives no time), whether a question is actually positive, and whether a headline match really is someone you sell to. That is why the strongest route is a review queue, not an automatic message.
Running it every day:
- A failed pull is missing data, not an empty source. If the viewer pull fails, cover the same window on the next run; a failed reactions or comments pull would otherwise look like no engagement.
- Reach a little further back than the last run. Viewer times are estimates from LinkedIn's relative ages, so overlap the window and drop what you have already seen.
- Deduplicate identified viewers by URN, falling back to the profile URL. Semi-private rows carry no identity – treat them as account-level observations, not counts.
- Reactions have no time. The first run logs every reaction already on your posts; after that, only new ones appear.
- Keyword search is loose. Check each post's text for the problem terms before routing it.
The other signals plug into the same log:
- Accepted invitations and replies. Turn on network monitoring and inbox monitoring once per account, then poll for events or receive them by webhook –
network.connectionAcceptedandinbox.messageReceived. Deduplicate by the eventid, since a retried delivery reuses it. Monitoring captures only changes after you enable it. - Job changes. There is no native job-change event. Save the people who championed you, re-fetch their profiles on a schedule – weekly is plenty – and compare the current company and title with what you stored. A change is an observation to confirm, not a fact to write back.
- Hiring at target accounts. Search jobs with your target companies in the filter and a role term, and log postings you have not seen before.
An AI agent runs the routine on your account through the MCP server, the agent-friendly CLI or a ready-made skill, as in the run above; schedule it with whatever runs your agent each morning.
Developers can build the same daily job into their own tools: retrieveProfileViewers with since, fetchPost with reactions and comments for your recent posts, and searchPosts with a datePosted filter, each routed by a plain function over the headline and text. Every call is asynchronous – execute starts the work and returns a workflow ID, result waits for it – and failures come back in errors, so check them on every result before moving the window forward. Run it from cron or any scheduler; SDK setup: Node and Python SDKs; the same actions also run from the CLI.
What this does not cover
- No third-party intent data – no "account X is researching your category" topic surges.
- No website-visitor identification.
- No personal emails or phone numbers.
If you need those, they come from intent-data and enrichment vendors; LinkedIn signals complement them rather than replace them. Everything here runs on your own account, in a dedicated cloud browser, at a human pace, within per-action limits you can configure.
Frequently Asked Questions (FAQ)
Behaviour that suggests an account may be moving toward a purchase – engaging with your content, hiring for the role your product serves, or asking a direct question about pricing or timing. Each one is a reason to look closer, not proof of intent.
Profile views, reactions and comments on your posts, engagement on a competitor's post, posts about the problem you solve, hiring for a relevant role, a champion changing jobs, accepted invitations, replies, and pricing-page visits or topic research from intent-data vendors.
A weak one on its own; it gets stronger combined with ICP fit and recent engagement. Semi-private viewers show only LinkedIn's description, so they can point to an account at most, never a person.
Yes, by re-fetching saved profiles on a schedule and comparing company and title. LinkedIn offers no job-change event to subscribe to.
No. The LinkedIn signals your account can observe work on their own; vendor intent data adds topic research and website visits that you cannot see on LinkedIn.
Wrapping up
The signals worth acting on are often already in your own account: who looked, who engaged, who is posting about the problem and who is hiring. Collect them on a schedule, route them with a few rules, and spend your time on the combinations.
Build it into your own tools with the REST API, the Node and Python SDKs or the CLI. Or have an AI agent run it out of the box through the MCP server, the agent-friendly CLI or a ready-made skill. Plans start at $49 a seat a month billed annually – see pricing.