ActorStack.dev

Searching Telegram for `hiring` returns posts about hiring a cab

Telegram's search stems words rather than matching substrings, so it returns morphological relatives of your term. Filtering them out afterwards is free, and it has to happen before billing.

By Oswaldo Carabano5 min read

Short answer

Telegram's server-side search matches word stems rather than substrings, so a query for `hiring` also returns posts containing `hire`, including a post that says hire a cab. Those are genuine matches by Telegram's rule and false positives by yours. This Actor removes them before delivery with `exactMatch`, which is on by default, costs nothing, and — the part that matters commercially — means a discarded candidate is never charged. Stemming is also why searching for a technology name works far better than searching for an everyday English word.

Key points

  • Telegram's search matches stems, so `hiring` matches `hire`, and the results are correct by Telegram's rule and wrong by the user's.
  • `exactMatch` removes those candidates before delivery and they are never charged, so the false-positive rate does not reach the invoice.
  • Filtering happens after Telegram has already narrowed the set, so it costs no extra request — the candidates were in the response either way.
  • Stemming behaves very differently across languages, which is one reason a technology name searches better than an everyday word in a mostly non-English catalogue.
  • Turning exact match off is a legitimate choice when you want the morphological family — but then the family is what you pay for.
On this page5 sections

A search for hiring returned a post that says hire a cab. It is not a bug, and understanding why it happens is what tells you when Telegram's search will serve you and when it will not.

What stemming does to a query

Telegram's search indexes word stems rather than raw strings. hiring, hire, hired and hires reduce to the same stem, so a query for one of them matches all of them. Substring matching would behave completely differently: hire would match hireling and would not match hiring.

The example that named the problem

A job-channel search for hiring is meant to surface postings. It also surfaces anything using the verb in an unrelated sense, and the transport example is the one that made the behaviour obvious rather than the one that occurs most.

For a technology term this barely matters — react has few morphological relatives in a technical corpus. For an ordinary English verb it matters a lot.

Why filtering is free

The candidates arrive in Telegram's response either way. Checking each one against the exact term happens locally, on data already fetched, so exactMatch costs no additional request and no additional time worth measuring.

The billing consequence

This is the same principle behind pay-per-event pricing generally: the unit you charge for should be the unit the customer wanted.

Stemming across languages

Stemming rules are language-specific, and the curated catalogue is mostly not in English. A technical term stays in the Latin alphabet inside an Arabic or Persian post and behaves predictably; an English word competes with the stemming rules of whatever language surrounds it. That is the practical reason to search for the technology rather than the phrasing.

Frequently asked questions

Why does Telegram return posts that do not contain my term?
They do contain it, by Telegram's rule: its search matches word stems rather than substrings, so `hiring` and `hire` share a stem and both match. The mismatch is between Telegram's definition of a match and yours.
Am I charged for false positives?
No. With `exactMatch` on, which is the default, candidates that fail the exact check are discarded before delivery and are never billed. Charging for them would make the site's own filtering a revenue source, which is the wrong incentive to build in.
Should I ever turn exact match off?
Yes, when the morphological family is what you want — tracking every form of a verb, for instance. It costs nothing to leave on and nothing to turn off; what changes is which rows count as delivered.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Platform docschecked 9 Sept 2026
    Search — MTProto APITelegram
  2. Operator claimchecked 9 Sept 2026
    Telegram Channel Scraper — Actor README and input schemaActorStack / Apify Store
A person reading on a smartphone in a dark room, their face lit only by the screen.
TelegramMeasured

The attachment finding

Documents, voice notes, audio, stickers, locations and round videos never appeared once in the anonymous preview. Fields that would always be false were cut rather than shipped.

5 min
Racks of network equipment in a dimly lit server room, lit blue by their indicators.
TelegramMeasured

Search versus crawl

Reading a channel's history to find 20 posts about one term took 25 requests and 712 KB. Asking Telegram to filter took 1 request and 24 KB. Same 20 results.

6 min
A person reading on a smartphone in a dark room, their face lit only by the screen.
TelegramGuide

Scrape Telegram channels

A walkthrough of reading public Telegram channels anonymously: the four modes, when search beats reading a history, and what the anonymous preview does and does not render.

9 min