Skip to main content
Thirdwatchthirdwatch
Social & news

Monitor Community Notes on Your Brand's X Posts

Watch for Community Notes appearing on your brand's posts — the fact-check text, reasons, and showing status as JSON, checked on a schedule.

Editorial illustration for social & news
Sep 21, 2026 · 2 min read · 458 words
View the Apify scraper →

TL;DR — The X Community Notes Scraper checks whether Community Notes exist on posts you care about — your brand's, your competitors', viral claims in your niche — with the note's text, reasons, and showing status as JSON.

Why a note on your post is a comms event

A Community Note showing under a brand post is a public correction — "this claim is misleading" — that sits under your content permanently. Comms teams that learn about it from a screenshot are already behind.

The job-to-be-done: a periodic check — did any of our posts get noted, and is that note visible yet?

How does this compare to the alternatives?

Manual post review Social listening suites Thirdwatch actor
Cost Free, sporadic Subscriptions Pay per result
Reliability Misses late notes Notes rarely covered Direct dataset check
Setup time Zero Procurement Minutes
Maintenance Per post Vendor Scheduled runs

How to monitor in 4 steps

How do I watch my post list?

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
MY_POSTS = ["1834560000000000000", "1835000000000000001"]
run = client.actor("thirdwatch/x-community-notes-scraper").call(
    run_input={"tweetIds": MY_POSTS, "includeStatus": True, "maxResults": 100}
)
notes = list(client.dataset(run["defaultDatasetId"]).iterate_items())

How do I flag visible corrections?

showing = [n for n in notes if n.get("isShowingOnX")]
proposed = [n for n in notes if not n.get("isShowingOnX")]
for n in showing:
    print("VISIBLE NOTE on", n["tweetUrl"], "—", n["summary"][:100])

Showing notes = comms-worthy now; proposed ones = watch list.

How do I read the charge?

summary is the claim against your post; reasons say why (factualError, missingContext, outdatedInformation). trustworthySources tells you whether the note cites links — the correction's credibility signal.

How do I run it on a cadence?

Save the input as a Task, schedule daily, and alert when the returned count changes — a new note record is the trigger, not a threshold.

Sample output

{"noteId": "1834567890123456789", "tweetId": "1834560000000000000",
 "tweetUrl": "https://x.com/i/status/1834560000000000000",
 "summary": "The photo shows a competitor's product, not the advertised item…",
 "classification": "MISINFORMED_OR_POTENTIALLY_MISLEADING",
 "isMisleading": true, "reasons": ["misleadingFactualError"],
 "trustworthySources": true,
 "createdAt": "2026-09-20T22:10:00Z",
 "status": "CURRENTLY_RATED_HELPFUL", "isShowingOnX": true,
 "statusLabel": "Currently rated helpful"}

Common pitfalls

The public dataset lags — a note proposed minutes ago may not appear yet; daily cadence is the right grain. Notes on deleted posts persist — records outlive posts. A note "proposed" is not a verdict — statusLabel distinguishes showing from contested. The actor surfaces the correction; the response is a comms decision.

Related use cases

Frequently asked questions

Why monitor notes on my own posts?

A Community Note under your post is a public correction label — comms needs to know the moment a note is proposed or starts showing, not after a screenshot circulates.

How does the actor watch my posts?

Pass your post IDs in tweetIds with includeStatus on. Each run returns which posts carry notes and whether those notes are currently displayed.

Can I see notes before they show publicly?

The status fields distinguish proposed/contested notes from CURRENTLY_RATED_HELPFUL ones — early warning before the correction is visible.

Does it work for competitor posts too?

Any post IDs — your posts, competitors', or a claims list — the lookup is the same.

Related