ForwardCheck

← Back to the checker

// Beyond the browser tab

Check it where it arrives.

A forward lands on WhatsApp. Opening a website to check it is a step most people skip. So ForwardCheck travels to the chat app instead: share the message to it, open a prefilled link, or forward it to a bot and get the verdict back in the same thread.

Checking which channels are live…

Share a message to ForwardCheck

Android — from the share sheet (no typing)

This is the closest thing to being inside WhatsApp, and it needs no server, no account and no bot:

  1. Open this site in Chrome and choose Install app (or Add to Home screen).
  2. In WhatsApp, long-press the forwarded message and tap Share.
  3. Pick ForwardCheck from the share sheet. It opens with the message already filled in and the check already running.

The message is handed to the page, not to a server. If this deployment has no API keys configured, nothing about it leaves the phone.

iPhone & iPad

Safari does not yet let a website register itself in the share sheet, so use a Shortcut once and it appears there forever:

  1. Open Shortcuts → New Shortcut.
  2. Enable Show in Share Sheet and set it to accept Text.
  3. Add URL → Open URLs and build it as https://YOUR-SITE/?text=[Shortcut Input]
  4. Name it ForwardCheck. It now shows up when you tap Share on a message.

A link that arrives preloaded

Any link of this shape opens the checker with the message already in the box — useful for a poster, a QR code at a desk, or a link someone can forward:

https://YOUR-SITE/?text=PASTE-THE-URL-ENCODED-MESSAGE-HERE

The message is stripped from the address bar as soon as the page opens, so a shared link does not leave someone's forward sitting in their browser history.

Forward it to a bot

A bot needs the hosted deployment — it answers with the same engine, so it works with no provider keys at all and gets fact-check matches when the server has them. Bots handle text; images, voice notes and video are not analysed.

Telegram — the quick one

Anyone with the bot's @username can use it. Setting it up is a token and one command:

  1. Message @BotFather, send /newbot, keep the token.
  2. Set the Worker secrets: npx wrangler secret put TELEGRAM_BOT_TOKEN npx wrangler secret put TELEGRAM_WEBHOOK_SECRET
  3. Point Telegram at the deployment (one command; it needs the two secrets above): npm run set-webhook -- https://YOUR-SITE

Then forward any message to the bot and the verdict comes back in the chat. Send /start for the instructions.

WhatsApp — where the forwards actually are

This needs a Meta app and a WhatsApp Business number. Create the app, add the WhatsApp product, and take note of four values: the access token, the phone number ID, the app secret, and a verify token you invent.

  1. Set the secrets: npx wrangler secret put WHATSAPP_TOKEN npx wrangler secret put WHATSAPP_PHONE_NUMBER_ID npx wrangler secret put WHATSAPP_APP_SECRET npx wrangler secret put WHATSAPP_VERIFY_TOKEN
  2. In the app's WhatsApp → Configuration page, set the callback URL to https://YOUR-SITE/whatsapp and enter the same verify token there.
  3. Subscribe to the messages webhook field.
  4. Forward a message to the business number and the verdict comes back.

Meta only allows free-form replies inside the 24-hour window a user's message opens, so the bot answers immediately rather than sending follow-ups. Every incoming call is checked against the X-Hub-Signature-256 HMAC before it is parsed.

Honest limits

Same engine, fewer pixels

The bots run the identical heuristics, claim ranking and verdict fusion as the web app, so they cannot disagree with it. They just cannot show you the dial, the highlighted evidence or the score ring.

Text in, text out

Forwarded images, voice notes and PDFs are the hardest cases in misinformation, and none of the channels inspect them yet. Paste or forward the accompanying text.

Nothing is stored

A check is made and answered. There is no message history, no database and no per-user record — which also means no way to look back at what you checked earlier.

Both bots are only as live as this deployment's secrets. If the status chips above say a channel is not configured, its webhook will refuse every request rather than answer.