Pressfront API · Common questions

Is there a social listening API for pile-ons?

Yes. Give it a name, get back who is posting, on which side, and how fast.

The Pressfront Trace API’s instant check (GET /v1/instant/{handle}) answers for any X or Bluesky name: how many accounts are posting about it, how many are critical, supportive or neutral, a quote from each side, the biggest accounts, how it started and who carried it. About a second if the name was traced in the last 24 hours, about a minute if not. Built for a person being piled on, not a brand dashboard.

Read the API docsA key comes with Trace, $149 a month.

Of 187 accounts posting at @quillandclaw.bsky.social, 135 were critical and 17 supportive.

135 critical 24 neutral 17 supportive 11 not read

“This is the person who lectured all of us about honesty. Read the replies and decide for yourself.”@gravelmouth.bsky.social · 40,200 followers · after this quote, 54 accounts arrived in 40 minutes (4 in the 40 before)

The demo trace: invented accounts, the real response. Try it below.

  1. 1

    Check a name now

    The demo key answers the instant check for its one invented name. Copy, paste, run:

    curl https://pressfront.co/api/v1/instant/quillandclaw.bsky.social \
      -H "Authorization: Bearer pf_live_DemoKeyForPressfrontTraceSample1"
    200 OK (abridged){
      "handle": "@quillandclaw.bsky.social",
      "platform": "bluesky",
      "headline": "Of 187 accounts: 135 critical and 17 supportive of @quillandclaw.bsky.social.",
      "subline": "24 stayed neutral, 11 were not read.",
      "counts": { "critical": 135, "supportive": 17, "neutral": 24, "notRead": 11 },
      "sides": [
        { "side": "against", "label": "critical", "count": 135, "share": 0.767,
          "quote": { "text": "This is the person who lectured all of us about honesty. ...",
                     "account": "@gravelmouth.bsky.social", "followers": 40200,
                     "url": "https://bsky.app/profile/gravelmouth.bsky.social/post/3fakesf3bn2" } },
        { "side": "neutral", "label": "neutral", "count": 24, "share": 0.136, "quote": null },
        { "side": "with", "label": "supportive", "count": 17, "share": 0.097, "quote": null }
      ],
      "started": { "kind": "their_post", "at": "2026-10-21T20:12:00.000Z", "replies": 388, "quotes": 97 },
      "trigger": { "handle": "@gravelmouth.bsky.social", "type": "quote", "arrivedAfter": 54, "arrivedBefore": 4, "minutes": 40 },
      "claims": [ { "text": "the dates don't line up", "accounts": 20 }, ... ],
      "pace": { "state": "slowing", "line": "0 accounts arrived in the last hour." },
      "brief": "# ... the whole situation as Markdown"
    }

    With your own key it works for any X @handle or Bluesky handle. A name we have not traced in the last day is searched on the spot; if that takes longer than wait you get 202 "searching", which costs nothing, and calling again picks up the same search.

  2. 2

    Trace it in full

    POST /v1/traces with {"name": "@handle"} reads every account it can reach, in a few minutes. Then read it in parts:

    /accounts every account with its side, followers, account age and first post · /posts every post, filter by side, time, words or account · /timeline arrivals over time and the busiest stretch · /who where X says they are based and what their bios say · /sites posts on Reddit, forums and archives.

    curl "https://pressfront.co/api/v1/traces/01JDEM0SAMP1E000000000000T/posts?side=critical&sort=followers&limit=2" \
      -H "Authorization: Bearer pf_live_DemoKeyForPressfrontTraceSample1"
  3. 3

    See who moved together

    GET /v1/traces/{id}/groups lists accounts that posted within minutes of each other, posted the same words, or look alike (created together, same posting hours), and accounts that posted at the name before. These are measured matches, not proof anyone coordinated, and accounts are never labeled bots.

    200 OK (abridged, demo trace){
      "sameMinutes": [ { "size": 14, "minutes": 4, "accounts": [ "@ferrousbucket81.bsky.social", ... ] } ],
      "sameWords": [ { "size": 9, "text": "so this is what you've been doing all along. everyone screenshot this before it goes" } ],
      "lookAlikes": [ { "size": 3, "facts": [ "created within 26 hours of each other", "same 3 posting hours" ] } ],
      "repeat": [ { "handle": "@mothbucket88.bsky.social", "priorTouches": 7 }, ... ]
    }
  4. 4

    Get told when it moves

    POST /v1/names watches a name (10 at a time on Trace). When posts at it hit 3 times its usual 15 minutes (at least 12), we email you and post to your Slack, Discord or webhook link. GET /v1/alerts lists every alert sent. Set the link up in Settings; the payloads are on /developers.

~1 s

for an instant check of a name traced in the last 24 hours. A name nobody has traced yet takes about a minute, and you never get an empty answer.

FAQ

How is this different from brand social listening tools?

Tools like Brandwatch and Meltwater are built for brands, are faster and go back further. Pressfront is built for one name being piled on: who started it, who carried it, every account and what each one said, and it costs far less.

Which sites does it read?

X and Bluesky first, plus Reddit, forums, archives and other sites we read. Public posts only. Private accounts, group chats and posts deleted before we looked are out of reach.

How are sides decided?

A language model reads each post’s text and calls it critical, supportive or neutral, and every answer says so. It is a reading, not a finding: read the posts before acting on one. Accounts are never labeled bots or paid.

Does it say who someone is in real life?

No. It shows public accounts, their posts and timing. It never tries to unmask anyone.

What does it cost?

A key comes with Trace at $149 a month, with alerts on 10 names. Pay per call on the Apify Store (Monid listing on the way): $0.49 an instant check, $4.99 a full trace, $0.05 a read.