Using Social-Post Engagement as a Hiring Signal for Subject-Matter Experts

Use who reacted to and engaged with a company's or topic's social posts as a hiring signal to find subject-matter experts, with a real working API call.

Published

Jun 12, 2026

Written by

Manmohit Grewal

Reviewed by

Nithish

Read time

7

minutes

Using Social-Post Engagement as a Hiring Signal for Subject-Matter Experts

The people who react to and comment on a company's posts usually know that company's work. They follow the product, they argue with the launch, they correct the engineer who got a detail wrong. That engagement list is a ranked pile of people who already understand a narrow problem, and most sourcing workflows throw it away. This guide is about reading it instead, using who engaged with a company's or a topic's professional social posts as a hiring signal to find subject-matter experts you would never reach by job title alone.

A recruiting team at an AI-hardware company told us why this matters. They were building their own sourcing engine and wanted to find the smartest, most motivated, most interested people for very narrow roles, the kind where maybe two thousand people in the world can do the job. Their lead made the point plainly: someone might put nothing useful on their profile, and yet they may have posted about the product they are working on, or reacted to a launch in their field. The profile is the lagging record. The post and the reaction are the live one. You can run this whole workflow on a free Crustdata account, which starts with 100 credits.

This is a discovery method. If you already have a candidate and want to pull their papers, talks, and posts, that is a different job, covered in our guide to using a web search API to enrich candidates. Here we start from a post and work outward to the people who cared about it.

Why is post engagement a hiring signal at all?

A profile tells you where someone has worked and what title they hold. It rarely tells you what they are good at right now, and it almost never tells you what they are interested in. The team we spoke with kept running into this. Their sourcing funnel could match a title and a skill keyword, but the strongest people for a frontier hardware role were not the ones with the cleanest profiles. They were the ones paying attention to a specific, narrow problem, and that attention shows up first as engagement.

Think about who reacts to a deep technical post about inference hardware. It is rarely a random feed scroller. It is people who build adjacent things, people who used to work on it, people evaluating whether to. When someone leaves a substantive comment correcting a benchmark or adding a constraint the author missed, they have just demonstrated domain knowledge in public. That comment is a stronger signal of expertise than a line on a résumé, because nobody writes it to impress a recruiter.

So the move is to treat a company's own posts, or the posts about a topic you hire for, as bait that the right people have already taken. The reaction and comment lists are a pre-qualified pool. Your job is to read them, rank them, and reach the few who match.

How do you find the posts worth mining?

You start with the posts, because the posts decide which people you get. There are two useful ways in, and they answer different questions.

The first is by topic. You search public posts for a keyword tied to the work you hire for, optionally narrowed to authors in a given industry or with a given title. This is how you find conversations you were not already watching. The Search Social Posts endpoint takes a keyword plus filters and returns matching posts in real time, with each post's engagement totals and author details attached.

curl --request POST \
  --url https://api.crustdata.com/social_post/professional_network/search/live \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "keyword": "inference hardware OR custom silicon",
    "date_posted": "past-month",
    "limit": 25,
    "filters": [
      {"field": "AUTHOR_INDUSTRY", "value": ["Semiconductors", "Computer Hardware"]}
    ]
  }'
curl --request POST \
  --url https://api.crustdata.com/social_post/professional_network/search/live \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "keyword": "inference hardware OR custom silicon",
    "date_posted": "past-month",
    "limit": 25,
    "filters": [
      {"field": "AUTHOR_INDUSTRY", "value": ["Semiconductors", "Computer Hardware"]}
    ]
  }'
curl --request POST \
  --url https://api.crustdata.com/social_post/professional_network/search/live \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "keyword": "inference hardware OR custom silicon",
    "date_posted": "past-month",
    "limit": 25,
    "filters": [
      {"field": "AUTHOR_INDUSTRY", "value": ["Semiconductors", "Computer Hardware"]}
    ]
  }'

Each result comes back with the post text, the author, and engagement counts in total_reactions, total_comments, and num_shares. The keyword supports Boolean OR and AND up to six terms, so you can widen or tighten the net in one call. Filters AND together, and multiple values inside one filter OR together, which is how you scope to a few adjacent industries at once.

The second way in is by company. If you hire people who know a specific product, you want the posts that mention that product's company page, including the ones the company did not publish itself. The MENTIONING_COMPANY filter finds the conversation happening around a company, including posts by people who do not work there.

curl --request POST \
  --url https://api.crustdata.com/social_post/professional_network/search/live \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "date_posted": "past-quarter",
    "limit": 50,
    "filters": [
      {"field": "MENTIONING_COMPANY", "value": ["<company-page-url>"]}
    ]
  }'
curl --request POST \
  --url https://api.crustdata.com/social_post/professional_network/search/live \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "date_posted": "past-quarter",
    "limit": 50,
    "filters": [
      {"field": "MENTIONING_COMPANY", "value": ["<company-page-url>"]}
    ]
  }'
curl --request POST \
  --url https://api.crustdata.com/social_post/professional_network/search/live \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "date_posted": "past-quarter",
    "limit": 50,
    "filters": [
      {"field": "MENTIONING_COMPANY", "value": ["<company-page-url>"]}
    ]
  }'

The keyword field is optional here, so you can rely on the filter alone and pull every recent post that mentioned the company. Pass COMPANY instead of MENTIONING_COMPANY when you want only the posts a company authored itself, which are the ones most likely to draw a crowd of people who know the product. The same approach maps a competitor's bench. Watching who reacts to and comments on a rival's posts reads which of its people and partners are most engaged, and that same query points you to your next hire.

A note on cost so you can plan the run. The search endpoint bills one credit per post returned, and three credits per post when you switch on exact_keyword_match for a literal phrase. The search response gives you post-level engagement totals, but it does not include the actual people who reacted or commented. That second step is a separate call, which is the next section.

How do you turn engagement into a list of people?

The search gives you posts and their reaction counts. To get the names behind those counts, you take each post's share_url and feed it to the Enrich Social Posts endpoint, asking for reactors, comments, or both. This is the call that converts a number like "212 reactions" into 212 profiles you can read.

curl --request POST \
  --url https://api.crustdata.com/social_post/professional_network/enrich/live \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "social_post_url": "<post-url>",
    "fields": "reactors,comments",
    "max_reactors": 100,
    "max_comments": 50
  }'
curl --request POST \
  --url https://api.crustdata.com/social_post/professional_network/enrich/live \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "social_post_url": "<post-url>",
    "fields": "reactors,comments",
    "max_reactors": 100,
    "max_comments": 50
  }'
curl --request POST \
  --url https://api.crustdata.com/social_post/professional_network/enrich/live \
  --header 'authorization: Bearer YOUR_API_KEY' \
  --header 'content-type: application/json' \
  --header 'x-api-version: 2025-11-01' \
  --data '{
    "social_post_url": "<post-url>",
    "fields": "reactors,comments",
    "max_reactors": 100,
    "max_comments": 50
  }'

Each reactor comes back with their name, profile URL, the reaction type they used, their title, headline, location, employer, and education. Each comment comes back with the comment text and the commenter's profile, so you can read what they actually said before you decide they belong on your list. That comment text is the part that separates a real expert from a polite "congrats", and it is why the comment list often outranks the reaction list for sourcing.

Cost matters more here, so size the call deliberately. Pulling reactors or comments costs five credits per post, and pulling both costs ten. With max_reactors set to 100 or fewer, every reactor includes full profile enrichment, the headline, employer, and education you need to judge fit. Set it above 100 and you get only the basic engagement fields, which is fine when you only want the profile URLs. The documented pattern for a high-traffic post is to capture the URLs cheaply at a high cap, then batch those URLs through the Person Enrich API to get full profiles only on the people who survive a first filter.

A short Python loop ties the two endpoints together. Search for the posts, then enrich the ones with enough engagement to be worth the credits.

import requests

BASE = "https://api.crustdata.com/social_post/professional_network"
HEADERS = {
    "authorization": "Bearer YOUR_API_KEY",
    "content-type": "application/json",
    "x-api-version": "2025-11-01",
}

# 1. Find posts about the work you hire for
search = requests.post(
    f"{BASE}/search/live",
    headers=HEADERS,
    json={
        "keyword": "inference hardware OR custom silicon",
        "date_posted": "past-month",
        "limit": 25,
    },
).json()

# 2. Enrich only the posts that drew a real crowd
people = []
for post in search:
    if (post.get("total_reactions") or 0) + (post.get("total_comments") or 0) < 15:
        continue
    enriched = requests.post(
        f"{BASE}/enrich/live",
        headers=HEADERS,
        json={
            "social_post_url": post["share_url"],
            "fields": "reactors,comments",
            "max_reactors": 100,
            "max_comments": 50,
        },
        timeout=90,
    ).json()
    for item in enriched.get("posts", []):
        people.extend(item.get("reactors", []))
        people.extend(item.get("comments", []))

# 'people' is now a pool of pre-qualified profiles to score and de-dupe

import requests

BASE = "https://api.crustdata.com/social_post/professional_network"
HEADERS = {
    "authorization": "Bearer YOUR_API_KEY",
    "content-type": "application/json",
    "x-api-version": "2025-11-01",
}

# 1. Find posts about the work you hire for
search = requests.post(
    f"{BASE}/search/live",
    headers=HEADERS,
    json={
        "keyword": "inference hardware OR custom silicon",
        "date_posted": "past-month",
        "limit": 25,
    },
).json()

# 2. Enrich only the posts that drew a real crowd
people = []
for post in search:
    if (post.get("total_reactions") or 0) + (post.get("total_comments") or 0) < 15:
        continue
    enriched = requests.post(
        f"{BASE}/enrich/live",
        headers=HEADERS,
        json={
            "social_post_url": post["share_url"],
            "fields": "reactors,comments",
            "max_reactors": 100,
            "max_comments": 50,
        },
        timeout=90,
    ).json()
    for item in enriched.get("posts", []):
        people.extend(item.get("reactors", []))
        people.extend(item.get("comments", []))

# 'people' is now a pool of pre-qualified profiles to score and de-dupe

import requests

BASE = "https://api.crustdata.com/social_post/professional_network"
HEADERS = {
    "authorization": "Bearer YOUR_API_KEY",
    "content-type": "application/json",
    "x-api-version": "2025-11-01",
}

# 1. Find posts about the work you hire for
search = requests.post(
    f"{BASE}/search/live",
    headers=HEADERS,
    json={
        "keyword": "inference hardware OR custom silicon",
        "date_posted": "past-month",
        "limit": 25,
    },
).json()

# 2. Enrich only the posts that drew a real crowd
people = []
for post in search:
    if (post.get("total_reactions") or 0) + (post.get("total_comments") or 0) < 15:
        continue
    enriched = requests.post(
        f"{BASE}/enrich/live",
        headers=HEADERS,
        json={
            "social_post_url": post["share_url"],
            "fields": "reactors,comments",
            "max_reactors": 100,
            "max_comments": 50,
        },
        timeout=90,
    ).json()
    for item in enriched.get("posts", []):
        people.extend(item.get("reactors", []))
        people.extend(item.get("comments", []))

# 'people' is now a pool of pre-qualified profiles to score and de-dupe

The timeout is there on purpose. Reactor and comment enrichment can take 30 to 60 seconds for a full page, so a short client timeout will cut the call off before it returns. If you would rather drive this from a chat window than a script, a Claude Code agent with Crustdata's MCP server configured can run the same search-then-enrich sequence in plain language and hand you back the assembled list, which is the fastest way to test the idea before you write any code.

How do you tell an expert from a tourist?

A reaction list is noisy. Plenty of people like a post because a friend wrote it, or because the topic is adjacent to a hundred other things they follow. The chip-company team we spoke with were explicit that they wanted motivation and interest beyond a title match, so the filtering is where this method earns its place. A few signals in the enriched data do most of the work.

The first is what the person actually wrote. A comment with technical substance outweighs a bare LIKE every time, because writing it takes knowledge that a reaction does not. You have the full comment text, so you can read for that substance or pass it to a model and score it.

The second is the reaction type. The endpoint returns reactions broken out as LIKE, PRAISE, CURIOUS, INTEREST, and a few others. CURIOUS and INTEREST on a deep technical post carry more signal than a reflex LIKE, because they mark someone leaning in.

The third is who they are. Every enriched reactor carries their current employer, title, and education, so you can keep the people whose background fits the role and drop the recruiters, students, and pure spectators in one pass. Combine the three and you go from a few hundred reactions to a short list of people who both know the topic and plausibly fit the seat.

None of these is decisive on its own. A substantive comment from someone at a relevant company, who used a leaning-in reaction, is a strong lead, while a bare LIKE from a stranger barely registers. You stack the signals and trust the people who clear more than one of them.

How does this fit the rest of a sourcing workflow?

This is a discovery step, and it sits early. It hands you a pool of people you would not have found by querying titles and skills, which is exactly the gap the team we spoke with had. Their funnel was good at matching a known shape of candidate and weak at finding the motivated outliers. Post engagement fills that second gap, because it finds people by what they paid attention to rather than how they described themselves.

Once you have the pool, the work looks like any other sourcing pipeline. You de-duplicate against people you have already seen, you enrich the survivors into full profiles, and you rank them against the role. The ranking belongs to a scoring model with your own variables rather than this article, and we cover it in our guide to building a candidate scoring model. The point of the engagement pass is only to feed that model a better top of funnel than a title search ever could.

It also pairs with the enrichment direction that runs the other way. Once a name from a reaction list looks promising, you can pull that one person's own recent posts, their papers, and their talks to confirm the expertise before you reach out. Discovery from a post finds the person, and enrichment of the person confirms the fit, and the two together are a far shorter path than reading profiles one at a time.

What this method does not do

Post engagement is a discovery signal, and like every signal it has blind spots. The strongest experts sometimes never post and never react, especially the ones who keep their best work in private repositories and treat their profile as an afterthought. So a sourcing process that leans only on engagement will miss them, the same way a process that leans only on titles misses the people in this article. The honest answer is the same in both directions: this is one input among several, strongest when you combine it with work history, public code, and a direct read of the person.

There is also a practical ceiling on how much engagement is worth enriching. A post with five thousand reactions is not five thousand leads, and pulling them all at ten credits a post is a poor trade. Cap the enrichment, filter hard on comment substance and reaction type first, and only spend the credits on the people who clear that bar.

What Crustdata gives you here is the raw, structured data layer this method runs on. The search endpoint returns the posts and their engagement totals, and the enrich endpoint returns the actual people who reacted and commented, resolved to real profiles with employer and education attached. The judgment about who counts as a subject-matter expert is yours to define, and the data to act on that judgment is what you can now pull on demand. Crustdata is the data layer for recruiting teams building their own sourcing, so come and see who your own posts, and the posts about the problems you hire for, pull in across your market. Book a demo, or start free with 100 credits at crustdata.com.

Frequently asked questions

Why use social-post engagement instead of a title search to find experts? A title search finds people who describe themselves a certain way. Engagement finds people by what they paid attention to. Someone who comments with real substance on a deep technical post has shown domain knowledge in public, which a profile rarely captures, and that is the gap engagement fills.

How do you get the list of people who reacted to or commented on a post? Search public posts to get each post's share_url, then call the Enrich Social Posts endpoint with that URL and fields: "reactors,comments". The search endpoint returns engagement totals but not the people behind them, so the enrich call is what turns a reaction count into named profiles.

What does pulling reactors and comments cost? Searching posts costs one credit per post returned. Pulling reactors or comments on a post costs five credits, and pulling both costs ten. Keep max_reactors at 100 or fewer to get full profile enrichment per person, or set it higher to capture only URLs and enrich the shortlist later.

Can you find people engaging with a competitor's posts as well as your own? Yes. Use the COMPANY filter for posts a company authored, or MENTIONING_COMPANY for posts that mention it, then enrich those posts for reactors and comments. The same query that maps who engages with a rival finds people who know that product well enough to hire.

How do you separate real experts from people who just liked a post? Weigh three things in the enriched data: the substance of any comment, the reaction type (CURIOUS or INTEREST over a reflex LIKE), and the person's employer and background. A substantive comment from someone at a relevant company is a strong lead. Stack the signals rather than trusting any one.

Does this replace profile-based sourcing? No. It is one input. The strongest experts sometimes never post, so engagement should sit alongside work history, public code, and direct review. Use it to find the motivated outliers a title search misses, then confirm fit with a person's own posts, papers, and talks.

Data

Delivery Methods

Use Cases

Solutions