# Social profile and content signals

"Personalization" in outbound has degraded into a merge field with a company name in it. Everyone receiving cold email recognizes the pattern, which means the personalization now signals the opposite of what it intends.

Actual personalization needs a fact the sender could only have got by paying attention. Public social data is where those facts live: what someone posted, what they commented on, what their company published, what people said back.

## The four calls

```
social.profile   →  public profile for a handle
social.posts     →  recent public posts for a handle
social.search    →  posts matching a keyword, across platforms
social.comments  →  comments on one public post URL
```

Live across X, LinkedIn, Reddit, YouTube, TikTok, Instagram and Facebook, with LinkedIn people and company pages addressable as well.

## Start with search, not with the person

Most teams begin from a list of people and go looking for something to say. Reverse it. Start from the problem, find who is talking about it, and the personalization is the reason you found them.

```bash
curl -X POST https://api.jell.run/v1/run \
  -H "Authorization: Bearer $JELL_API_KEY" \
  -d '{
    "capability": "social.search",
    "input": {"platform": "reddit", "query": "enrichment api pricing", "limit": 50}
  }'
```

Reddit and X are where people complain in public, in their own words, without a vendor in the room. A post from three days ago describing the exact problem you solve is a better opening than any signal a database will sell you, and the first line writes itself: you are replying to something they said.

Run the same query across `x`, `linkedin` and `reddit`. The registers differ. LinkedIn is where people announce, X is where they think out loud, Reddit is where they say what is actually wrong.

## Comments are the underused surface

```bash
curl -X POST https://api.jell.run/v1/run \
  -H "Authorization: Bearer $JELL_API_KEY" \
  -d '{"capability": "social.comments",
       "input": {"url": "https://www.reddit.com/r/.../comments/...", "limit": 100}}'
```

A viral post in your category is a room full of your buyers, and the comments are the transcript. What people object to, what they compare, what they ask that nobody answered. That is objection-handling copy, product positioning and a content calendar, written by your market.

It is also the most quotable research you can do. "Half the thread under that post asked about X" is a sentence with evidence behind it.

## Then the person

```bash
curl -X POST https://api.jell.run/v1/run \
  -H "Authorization: Bearer $JELL_API_KEY" \
  -d '{"capability": "social.posts",
       "input": {"platform": "linkedin", "handle": "alexrivera", "limit": 20}}'
```

Recent posts tell you what someone is currently thinking about, which is a much better hook than where they work. `social.profile` gives the profile itself, and [`person.enrich`](/use-cases/contact-enrichment) adds the role history, where tenure in the current role is the signal: eight months in is someone still changing things.

The rule that keeps this from being creepy: reference something they published deliberately, in public, recently. A post is publication. Their movements are not.

## Company accounts are a signal too

Company pages announce launches, hires, partnerships and repositioning before the press does. Pulling `social.posts` for a competitor's or a target account's handle on a weekly cron and diffing it is a cheap early-warning system.

Paired with [`ads.search`](/use-cases/competitor-ad-intelligence), you get both halves: the message they pay to distribute and the message they publish for free.

## Wiring it into outreach

The pattern that produces replies:

1. Search the problem, not the person. Collect posts from the last 30 days.
2. Pull the comments on the ones with traction. That is your language bank.
3. Identify the people worth contacting from who posted and who commented.
4. Check their recent posts for a current, specific hook.
5. Enrich and verify the contact. See [contact enrichment](/use-cases/contact-enrichment).
6. Write the first line from the post. Not the company name. The post.

Step six is the whole thing. Everything before it exists to make that line possible.

## Where it breaks

- **Public means public, and that is the boundary.** These capabilities return what is publicly visible. Nothing behind a login, nothing private, and platform terms still apply to what you do with it afterwards.
- **Handles change and accounts go private.** Cache with a short TTL and expect misses.
- **Volume kills the effect.** A hook from a real post works because it is rare. The same technique across 5,000 sends, templated, becomes another pattern people learn to ignore.
- **Recency is the whole value.** A hook from a post six months old reads worse than no hook, because it says you researched once and sent late.

## Run it as an agent

```bash
jell run -c social.search -i '{"platform":"reddit","query":"enrichment api pricing","limit":50}'
jell run -c social.comments -i '{"url":"https://...","limit":100}'
jell run -c social.posts -i '{"platform":"linkedin","handle":"alexrivera"}'
```

An agent can run the search, read the comments, pick the people worth contacting and draft the first line from the actual post, which is the part that does not scale by hand.

## FAQ

### Which platform is worth pulling for B2B?

Reddit for the unvarnished problem statements, LinkedIn for professional context and announcements, X for what practitioners think out loud. Reddit is the one most B2B teams underuse and it consistently returns the most usable copy, because people describe their problem there without a vendor listening. Pull all three for the same query and compare: the same complaint is phrased three different ways, and the Reddit phrasing is the one to quote.

### Is scraping public social data allowed?

These capabilities return publicly visible data through providers who handle collection, and nothing behind a login. That covers the retrieval side. What you then do with it is a separate question governed by platform terms and by data protection law where your contact lives, which in the EU means having a lawful basis for processing before you send anything. Public availability is not consent.

### How recent does a hook need to be?

Under 30 days, and under 14 is better. The reason the technique works is that it proves you looked recently. A reference to something someone posted in March, sent in September, actively signals the opposite: that you ran a batch job once and are only now getting to them.

### Can I automate the whole thing including the first line?

You can generate the draft, and you should read it before it sends. The failure mode is specific and expensive: a model that confidently misreads a sarcastic post, or references a layoff announcement as if it were a product launch. A human pass on the first line, or at minimum a filter on post sentiment, is the difference between a clever opener and an apology.

### Why comments rather than the posts themselves?

Because posts are performances and comments are reactions. The post is what someone decided to say publicly with their name on it. The comments are what everybody else thought about it, including the objections nobody puts in a case study. For positioning and objection handling, the thread is worth more than the post that started it.

### What API lets an AI agent search Reddit, X and TikTok posts by keyword?

`social.search` with `platform` set to `reddit`, `x` or `tiktok` (also `linkedin`, `youtube`, `instagram` and `facebook`) and the keyword as the query. Posts come back with text, author, URL, engagement and time as JSON, priced per post at the limit you request, through providers rather than each platform's official API.

### Which API returns a social media profile's followers and recent posts as JSON?

`social.profile` returns the profile: name, followers, bio, verified flag, bio link and a public email when the profile exposes one. `social.posts` returns the handle's recent public posts. Both cover X, LinkedIn, Instagram, TikTok and YouTube and return the same JSON shape whichever provider served the call.

### How do I pull comments and engagement from a social post through an API?

`social.comments` takes one public post URL on YouTube, TikTok, Instagram, LinkedIn or Reddit and returns the comments with text, author, likes, replies and time. It is the underused call in this guide: the comments are where objections and buying questions get written in the buyer's own words.
