Who's Piling On? X/Bluesky Pile-on & Rumor Tracker
Pricing
Pay per event
Who's Piling On? X/Bluesky Pile-on & Rumor Tracker
Who is piling on an X or Bluesky account, and who started a rumor? We read X, Bluesky, Instagram comments, Reddit, forums and the news: every account and post, sides read by a model. Instant check, full trace with a 4-stop answer card, watch names on a schedule, account lookup, evidence pack.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Pressfront
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Security
Limited permissionsShare
Who's piling on? X and Bluesky pile-on and rumor tracker
Type an X or Bluesky name: get who is piling on, on which side, who set it off and what they claim. Type a story going around: get who said it first and who spread it. Not a feed of posts, the picture behind them, with a link to every post.
Sample result (invented example)
An instant check of @quillandclaw.bsky.social, a made-up account from our demo trace. Every name, post and number below is fiction.
| Headline | Of 187 accounts: 135 critical and 17 supportive of @quillandclaw.bsky.social. 24 stayed neutral, 11 were not read. |
| Started | Their own post, Oct 21, 8:12 PM: "I wrote up what actually happened with the review, dates and all. It's long. Read it before you decide what you think." 388 replies, 97 quotes. |
| Set off by | @gravelmouth.bsky.social (40,200 followers) quote-posted it 5 hours later: "This is the person who lectured all of us about honesty. Read the replies and decide for yourself." 54 accounts arrived in the 40 minutes after, 4 before. |
| First critical post | @tinfoilteapot.bsky.social, 11 minutes after the post: "you deleted the thread last time too. we remember." |
| What they claim | "the dates don't line up" (20 accounts), "changed the story three times" (16), "deleted the thread last time" (16), "took money for the review" (15), "blocked people asking questions" (12) |
| Before? | 3 of 187 had posted about @quillandclaw before. |
| Pace | slowing: 0 accounts arrived in the last hour. |
Try it yourself with the public demo key on the Pressfront API; the same answer comes back here as one dataset row.
Modes and prices
| Mode | What you get | Speed | Price |
|---|---|---|---|
| ⚡ instant | Who is posting about a name, on which side, who set it off, what they claim, the pace | ~1 second if traced today, ~1 minute if not | $0.49 |
| 🔍 trace | A fresh trace of a name, a story or a situation, start to finish, with the four-stop answer card | ~4 to 7 minutes | $4.99 |
| 📖 read | One part of a finished trace (answer card, accounts, posts, timeline, groups, who, sites, saved posts) | ~1 second | $0.05 |
| 🧭 understand | What Pressfront would trace from your words (a name or a story, and what it would look into). Starts nothing | a few seconds | $0.05 |
| 👀 watch | Up to 25 names checked against your last run, spikes flagged, optional webhook. Schedule it | ~1 to 4 minutes | $0.15 per name, per run |
| 🔎 account | Which traces this account showed up in before, how it took part, its profile then | ~1 second | $0.05 |
| 🗂 evidence | The sealed evidence pack of a finished trace: every post captured, hashed and time-stamped | ~1 second once built | $9.99 once per trace |
Never an empty charge. A search still running, a pack still building, a failed trace or an error costs nothing. The run ends with a row that says what to do (usually: run again in a few minutes).
Where we look
X, Bluesky, Instagram comments, Reddit, Hacker News, forums and boards, the news, plus Know Your Meme, Community Notes and archived copies of posts. You type an X or Bluesky name (or plain words); we find who is talking about it in all of those places. Pressfront reads thousands of accounts per name (5,764 in one trace) so your agent, dashboard or report does not have to.
What can I use it for?
- 🚨 Pile-on and crisis monitoring: is it growing or fading, and who set it off? Put the names on watch.
- 📰 Journalism and research: where a story started, the earliest public post we could find, how it spread.
- 💬 "Everyone is saying X about me": type the rumor in a few words; see who posted it first and who passed it on.
- 🏢 PR, talent and brand teams: who is critical, who is supportive, which big accounts are in it.
- ⚖️ Legal and trust & safety: the evidence pack, a sealed zip with hashes and an RFC 3161 time-stamp.
- 🤖 AI agents: one call returns a Markdown brief with numbered sources, ready for an LLM to explain.
How to use it
- Pick a mode.
- instant or account: a Name (
@elonmusk,x.com/someone, orname.bsky.social). watch: the Names to watch list. trace: fill in one of Name, Story going around, or Situation in your own words; the one you change is the one traced. read or evidence: the Trace id from a trace run. - Press Start. Read the result in the Output tab, or download it as JSON, CSV or Excel.
Call it from code, Make, Zapier, n8n or an AI agent with Apify's API like any other Actor.
Watch names on a schedule
What it does. Every run checks each name (the same instant check) and compares it with your last run. The last look is kept in your own Apify key-value store named pressfront-watch, one record per name, so nothing of yours sits on Pressfront.
Schedule it. In Apify Console open Schedules, Create new, pick this Actor, set the input to mode watch with your names (and a webhookUrl if you want one), and choose hourly (0 * * * *) or daily (0 9 * * *). Each run asks for a look no older than an hour, so runs closer than an hour apart get the same look back (status quiet) and are still charged: hourly is the shortest schedule that makes sense.
The spike rule (facts only, never a word about why they came):
| Status | When |
|---|---|
| first look | the first time you watch this name: the baseline, no alert |
| spike | accounts at least doubled AND grew by at least 25 since the last look, or critical accounts did |
| quiet | anything else, including the same look as last time, or a one-minute search after a full trace (not the same yardstick: the baseline resets) |
| searching | the search was still running when the run had to end (about 4.5 minutes); the next run picks it up. Not charged |
| not found / error | not a name, or Pressfront could not answer. Not charged |
One row per name: handle, status, alert (true on a spike), counts (accounts, critical, supportive, neutral, notRead), previous (the last look), change (accounts and critical: from, to, by, x), why (one sentence), headline, pace, link, checkedAt.
Webhook. With webhookUrl (https), the run POSTs the spike rows (only spikes) as JSON: { event: "pressfront.watch.spike", at, spikes: [...], text, content }. text and content are one line per spike, so a Slack or Discord incoming-webhook URL shows them as is. 10 second timeout, best effort, never fails the run.
Cost. $0.15 per name answered, per run. 10 names hourly is about $36 a day; 10 names daily is $1.50 a day.
The evidence pack
Every full trace of a name builds a sealed pack a few minutes after it finishes. Run mode evidence with the traceId:
- One capture record per post: the text as it stood, ids, times, the raw source record and, on Bluesky, the signed repo proof.
- Screenshots of the public pages, Internet Archive copies where the Archive took one.
- A SHA-256 manifest and an RFC 3161 time-stamp on it, so anyone can check nothing changed after the fact.
- A one-hour download link for the zip, plus
counts(posts, screenshots, archive copies, verified records) and the hashes.
$9.99 once per trace. The run that gets the pack handed over ready is the one charged; reading the same pack again later (for a fresh link) is free, remembered in your own store pressfront-evidence. Still building? The run waits up to 4 minutes, then ends cleanly with "run again in a few minutes", nothing charged. Story traces have no pack.
Account lookup
Mode account with a Name: which traces run through this Actor the account showed up in (as the name each trace was about, with dates), how it took part each time (reply, quote, mention, liker, reposter), its profile then (name, followers, bio: renames and changes show as history), and where X says it is based. $0.05. A cheap first look before paying for a trace.
What comes back
For instant, watch and trace of a name:
| Field | What it is |
|---|---|
headline | e.g. "Of 187 accounts: 135 critical and 17 supportive of @quillandclaw.bsky.social." |
counts | accounts by side and tone: critical (strongly critical, mocking, disagreeing when read), supportive, neutral, not read |
sides | the biggest voice on each side, with their words and the link |
started | the post it started from, or the first critical post |
trigger | the account whose post set off the jump, and how many arrived after it |
carriers | the accounts others came through (who spread it) |
claims | what the critical posts claim, summarized |
pace | growing, steady, slowing or quiet now |
brief | the whole situation as plain Markdown facts with numbered sources, for an LLM |
{"mode": "instant","found": true,"handle": "@quillandclaw.bsky.social","headline": "Of 187 accounts: 135 critical and 17 supportive of @quillandclaw.bsky.social.","counts": { "critical": 135, "supportive": 17, "neutral": 24, "notRead": 11 },"trigger": { "handle": "@gravelmouth.bsky.social", "followers": 40200, "type": "quote", "arrivedAfter": 54, "minutes": 40 },"pace": { "state": "slowing", "line": "0 accounts arrived in the last hour." },"brief": "# Trace: @quillandclaw.bsky.social\n\n## What happened\nOf 187 accounts: ... [1]\n\n## Sources\n[1] https://bsky.app/..."}
The answer card (every trace, its own item with "type": "case")
| Field | What it is |
|---|---|
headline | the answer in one sentence |
stops | four stops in order: Started (the earliest public post we could find, with its link), Spread (how many accounts; for a story, how many repeated it, asked if it was real, or said it was not), Who (what the accounts have in common, like a word in their bios), Before? (whether the same accounts or the same story came round before) |
huh | one fact worth knowing, like how many accounts posted the exact same sentence |
data | the numbers under each stop, for your own charts |
note | how to read it: a language model read whether each post repeated, questioned or denied the story |
{"type": "case","kind": "origin","headline": "The \"Lara went partying after the concert was cancelled\" story started with one post with no photo or link, and that post is now gone.","stops": [{ "n": 1, "label": "Started", "text": "@gossipdesk · Nov 3, 9:14 PM · no photo, no link · now gone · a Community Note says: misleading", "url": "https://x.com/..." },{ "n": 2, "label": "Spread", "text": "190 accounts · 120 repeated it, 40 asked if it was real, 3 said it was not" },{ "n": 3, "label": "Who", "text": "7 in 10 have \"manon\" in their name or bio" },{ "n": 4, "label": "Before?", "text": "31 of 140 were in earlier waves (Jul 2, Sep 18)" }],"huh": { "big": "14", "line": "14 accounts posted the exact same sentence." }}
"Started" is the earliest public post we could find, not proof that nothing came before it. A post that is "now gone" was deleted, edited away or made private: from outside these look the same.
A trace run also returns a traceId. Use it with read to get every account (part: accounts), every post (part: posts), who moved together (part: groups), the timeline (part: timeline), where X says accounts are based (part: who), posts on other sites (part: sites) and the saved posts (part: evidence), filtered by side and paged; and with evidence for the sealed pack.
Examples
{ "mode": "instant", "handle": "@elonmusk" }
{ "mode": "watch", "names": ["@elonmusk", "name.bsky.social"], "webhookUrl": "https://hooks.slack.com/services/..." }
{ "mode": "trace", "handle": "name.bsky.social" }
{ "mode": "trace", "claim": "Lara went partying after concert cancelled" }
{ "mode": "understand", "text": "people keep saying Lara went partying after the concert was cancelled" }
{ "mode": "read", "traceId": "01M6...", "part": "posts", "side": "critical", "sort": "followers", "limit": 200 }
{ "mode": "evidence", "traceId": "01M6..." }
{ "mode": "account", "handle": "@gravelmouth" }
(Lara, Manon, @gossipdesk, @quillandclaw and @gravelmouth are made-up examples.)
FAQ
Where does it look? X and Bluesky first, plus Instagram comments, Reddit, forums, archives and the open web.
How are sides decided? A language model reads each post's text, and every answer says so. Groups ("posted within 5 minutes of each other", "same words") are measured timing and wording matches, not proof anyone coordinated.
Is it private data? No. Public posts only, and it never says who anyone is in real life. The words you type for a story or a situation are read once and never stored. Your watch baselines live in your own Apify storage.
Does it tell me if a story is true? No. It shows who posted it first (the earliest public post we could find), how it spread and who carried it. Whether it is true is for you to judge from the posts.
Why did instant take a minute? Nobody traced that name in the last day, so it searched it fresh. The answer's depth says quick (that minute search) or full (a full trace). After that, instant answers in about a second for a day.
What if the search is not done in time? The run ends with a row saying "still searching, run again", nothing charged. The next run answers from the finished search.
How fresh is a watch check? Each run asks for a look no older than an hour, so an hourly or daily schedule gets a fresh one-minute search each time; a run less than an hour after the last one gets the same look back (status quiet).
What does understand do? It reads your words and says back what a trace would look for: a name or a story, and two or three "looking into" lines. Use it to check before paying for a trace.
What can I read from a story trace? The answer card (part: case) and the brief. The account-by-account parts and the evidence pack are for name traces.
Want it inside Claude, ChatGPT or your own app? See the Pressfront API: REST, MCP and OpenAPI, with a public demo key.
Questions or a custom need: support@pressfront.co