X (Twitter) Real-Time Monitor: Posts, Follows & Profile Changes
Pricing
$20.00 / 1,000 monitoring package credits
X (Twitter) Real-Time Monitor: Posts, Follows & Profile Changes
Monitor X posts and account changes via WebSocket or webhook. Solo: 10 accounts for $20 per 30 days. Free demo: @Reuters only, delayed, no history.
Pricing
$20.00 / 1,000 monitoring package credits
Rating
0.0
(0)
Developer
Feedd Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
20 days ago
Last modified
Categories
Share
Receive collected posts, follows, unfollows, and profile changes from the public X accounts you choose in your app, bot, or dashboard. Delivery time varies by event type, account coverage, and destination.
No X API keys, no scraper to run, and no fee per post.
$20 for 10 accounts for 30 days. The Free demo monitors @Reuters only, about a minute behind, with no history.
Why use it
- Continuous monitoring. Receive collected events over a WebSocket or webhook, without scheduling a separate run for each check.
- Straight to Discord, Slack, or Telegram. Posts show up in your channel. Zapier, Make, and n8n work the same way.
- Replay on paid plans. Resume from a saved cursor to retrieve retained events after a disconnect, within the 30-day retention window.
- Flat price. $20 covers 10 accounts for 30 days, however much they post.
Quick start
- Run the Actor with your accounts. For a paid plan, first set Maximum
cost per run to at least $20.02 for Solo (the package charge is $20;
the limit needs $0.02 of headroom). On Apify's Free plan,
use
"users": ["Reuters"]and leave outplan.
{ "action": "track", "users": ["@elonmusk", "@nasa"], "plan": "solo" }
- Choose where events go:
- Discord, Slack, Telegram, Zapier, Make, or n8n: run
webhook(see below). - Your own app: copy your stream
keyfrom the run's OUTPUT (it's shown only once) and connect towss://ws.feeddlabs.com/stream.
- Discord, Slack, Telegram, Zapier, Make, or n8n: run
Some accounts take a few minutes to set up. They start on their own.
Send events to Discord, Slack, Telegram, Zapier, Make, or n8n
Run the Actor once with your webhook URL. Collected posts, follows, unfollows, and profile changes are then sent to that destination:
{ "action": "webhook", "webhookUrl": "https://discord.com/api/webhooks/...", "webhookFormat": "discord" }
- Discord: channel settings, Integrations, Webhooks, New
Webhook, Copy Webhook URL. Format
discord. - Slack: create an incoming webhook for the channel. Format
slack. - Telegram: create a bot with @BotFather and add it to your channel or
group. Pick format
telegramand fill in Telegram bot token and Telegram channel or group instead of the URL. - Zapier, Make, n8n, or your own app: use their webhook trigger URL.
Format
json.
Failed webhook deliveries are retried. On paid plans, retained events can
be replayed within 30 days. To stop, run webhook with Webhook URL left
empty.
Send new posts to Google Sheets or email
You can also use Apify's own integrations, such as Google Sheets or email:
- Set Action to
fetchand tick Only new since my last run. - Save it as a task and schedule it every few minutes.
- Add the integration you want to the task.
Each run sends only what's new since the previous run. Posts arrive only as often as the schedule runs. For delivery without scheduled fetch runs, use a webhook instead.
Later runs
| Action | What it does |
|---|---|
track | Add accounts to your plan. Add "renew": true for the next 30 days, or a new plan to switch. |
fetch | Export your 100 newest posts and 30 days of follows, unfollows, and profile changes (paid plans). Tick Only new since my last run to get only what's new. |
webhook | Send every event to a URL. Leave the URL empty to stop. |
status | See your accounts and when your plan ends. |
stop | Pause an account. Run track to resume it. |
remove | Remove an account added by mistake and free its spot: { "action": "remove", "user": "@wrong" }. Two per 30 days. |
key | Get a new stream key: { "action": "key", "rotateKey": true }. |
For developers: the stream
Connect with your key and read: each message is one event. Save each
event's cursor. If you disconnect, reconnect with ?after= and your last
saved cursor. On paid plans, this resumes retained events after that cursor
within the 30-day retention window. Replay covers events we collected; it
is not a guarantee that every source event was observed.
JavaScript (Node.js, npm install ws):
import WebSocket from "ws";let last = null; // keep this somewhere that survives a restartfunction connect() {const url = "wss://ws.feeddlabs.com/stream" + (last ? `?after=${last}` : "");const ws = new WebSocket(url, {headers: { authorization: `Bearer ${process.env.FEED_KEY}` },});ws.on("message", (raw) => {const event = JSON.parse(raw);if (event.type === "error") return console.error(event.code);if (event.type === "ready") return;console.log(event.type, event.account.username);last = event.cursor;});ws.on("close", () => setTimeout(connect, 2000));}connect();
Python (pip install websockets):
import asyncio, json, os, websocketslast = None # keep this somewhere that survives a restartasync def main():global lastwhile True:url = "wss://ws.feeddlabs.com/stream" + (f"?after={last}" if last else "")try:async with websockets.connect(url,additional_headers={"Authorization": f"Bearer {os.environ['FEED_KEY']}"},) as ws:async for raw in ws:event = json.loads(raw)if event["type"] in ("ready", "error"):continueprint(event["type"], event["account"]["username"])last = event["cursor"]except websockets.ConnectionClosed:passawait asyncio.sleep(2)asyncio.run(main())
Reconnecting without ?after= continues after the last event we sent you.
Checking webhook requests
JSON webhook requests carry x-feedd-signature: sha256=..., an HMAC-SHA256
of x-feedd-timestamp + "." + body with the secret from the webhook run's
OUTPUT (shown once).
What you get
Every event has the same top part:
| Field | Meaning |
|---|---|
id | Unique event ID. If you ever see the same id twice (after a reconnect), keep one. |
cursor | Position in your stream. Reconnect with ?after= and the last one you saved to continue right after it. |
time | When we saw it (UTC). |
type | post, follow, unfollow, or profile |
account | The tracked account: id, username, and name |
A new post
{"id": "K9yTVRR90AAQ4-99tF3_3w","cursor": "1978296","time": "2026-10-09T23:39:24.992Z","type": "post","account": { "id": "17469289", "username": "nypost", "name": "New York Post" },"post": {"id": "2108703910336565304","url": "https://x.com/nypost/status/2108703910336565304","kind": "post","text": "Steph Curry drops truth bomb on Warriors' front office failure https://trib.al/AsPoEod","links": [],"images": ["https://pbs.twimg.com/media/HUOfBvVXYAAepm_.jpg"],"videos": [],"created_at": "2026-10-09T23:39:24.705Z","complete": true,"reference": null}}
kind is post, reply, quote, or repost. For replies, quotes, and
reposts, reference holds the other post:
"reference": {"type": "replied_to","id": "2108703611391979810","username": "holdenhalford","text": "@bot claim holden@mail.grokbot.com for me","images": [],"videos": []}
A follow or unfollow
{"id": "x5ON5dXuUJIzRZozDEjVS2","cursor": "1978239","time": "2026-10-09T23:38:35.079Z","type": "follow","account": { "id": "1101117625738899458", "username": "skyiszen", "name": "Sky" },"target": {"id": "180107694","username": "kaitlancollins","name": "Kaitlan Collins","bio": "Chief White House Correspondent and Anchor of The Source at 9 p.m., @CNN"}}
A profile change
{"id": "S6txBPC-9ga010La948bnq","cursor": "1978236","time": "2026-10-09T23:38:27.514Z","type": "profile","account": { "id": "17454769", "username": "glennbeck", "name": "Glenn Beck" },"changes": [{ "field": "pinned_post", "before": null, "after": "2108355025483583891" }]}
field is one of username, name, bio, location, website, avatar,
banner, or pinned_post.
If something goes wrong
The stream sends {"type": "error", "code": "..."} and closes:
| Code | What to do |
|---|---|
NO_ACTIVE_ENTITLEMENT | Your plan ended. Run track with "renew": true. |
CURSOR_EXPIRED | You were away over 30 days. Reconnect to wss://ws.feeddlabs.com/stream?reset=1. |
INVALID_CURSOR | That cursor isn't from your stream. Reconnect without ?after=. |
STREAM_KEY_DENIED | Wrong or old key. Run key with "rotateKey": true. |
| HTTP 429 or 503 | Wait a few seconds and reconnect. |
Pricing
| Plan | Accounts | Price for 30 days |
|---|---|---|
| Free demo | @Reuters only | $0, about a minute behind, no history |
| Solo | 10 | $20 |
| Team | 50 | $80 |
| Desk | 150 | $200 |
| Fleet | 500 | $500 |
- Free: if you have a free Apify account, run
trackwith"users": ["Reuters"]and leave outplan. Other accounts require a paid monitoring package. - Paid plans need a paid Apify subscription. The price is the same whichever one you have.
FAQ
Do I need X (Twitter) API keys? No. Everything runs on our side.
What if my server goes down? Reconnect with the same key and your last
saved cursor. Paid plans can replay collected events retained for up to
30 days. The Free plan has no history replay.
Can I add or swap accounts? You can add accounts any time until you
reach your plan's number (10 on Solo). An account you stop still counts
until your next 30 days start. Added the wrong one by mistake? remove
frees its spot right away, twice per 30 days.
Can I track private accounts? No, only public ones.
Can AI agents use it? Yes. Add
https://mcp.apify.com?tools=feeddlabs/x-twitter-user-tracker to Claude,
ChatGPT, or Cursor and ask, for example, "Which accounts am I tracking, and
when does my plan end?"
Something not right? Write it in Report a problem and run the Actor. The run is free and does nothing else. AI agents can report problems too.
More from Feedd Labs
| Actor | What it does |
|---|---|
| X (Twitter) Real-Time Monitor | Posts and account changes delivered by WebSocket or webhook |
| X (Twitter) Search Scraper | Tweets and replies by keyword, account and date |
| X (Twitter) Followers Scraper | Followers, following and profiles of public accounts |
| X (Twitter) Account Watch | Who an account follows or unfollows, and its profile changes |
| X (Twitter) Ads Library | Collected promoted ads and brand creative |
| Mainstream News Live & Archive | Collected news articles from major outlets |
| US Stock Market Data | 1-minute stock history since 2016, futures and financial statements |
| Crypto Derivatives Data | Open interest, funding and liquidations on 4 exchanges |
| Crypto OHLCV & Trades | Candles from 1 second to 1 day and individual trades |
| Polymarket Data | Available odds history, volume and open interest by event |