<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: forlazin-debug</title>
    <description>The latest articles on DEV Community by forlazin-debug (@forlazindebug).</description>
    <link>https://dev.to/forlazindebug</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4209260%2F9167a43c-fa71-49cf-bc59-bf08ba27cc0f.png</url>
      <title>DEV Community: forlazin-debug</title>
      <link>https://dev.to/forlazindebug</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/forlazindebug"/>
    <language>en</language>
    <item>
      <title>Client leads from Telegram, MAX and VK: where requests live in each messenger</title>
      <dc:creator>forlazin-debug</dc:creator>
      <pubDate>Tue, 27 Oct 2026 05:54:34 +0000</pubDate>
      <link>https://dev.to/forlazindebug/client-leads-from-telegram-max-and-vk-where-requests-live-in-each-messenger-1koo</link>
      <guid>https://dev.to/forlazindebug/client-leads-from-telegram-max-and-vk-where-requests-live-in-each-messenger-1koo</guid>
      <description>&lt;p&gt;I run Lidolovets (mpleads.ru), a service that finds people asking for a contractor in open chats and channels. We catch leads for businesses, private contractors, freelancers, sole proprietors and sales teams, and we work both as a subscription service and as a lead generation agency. Here is how requests are distributed across three messengers.&lt;/p&gt;

&lt;p&gt;Telegram&lt;/p&gt;

&lt;p&gt;Requests live in open chats and channels: city chats, residential complex chats, topic groups. A person writes "need a plumber, any recommendations" and everyone in the group sees it. This is the main source and it works in the self-service dashboard.&lt;/p&gt;

&lt;p&gt;MAX&lt;/p&gt;

&lt;p&gt;MAX is different. In our testing there are no open group chats in public search, group chats are available by invitation. Requests live in announcement channels by city and niche and in comments under channel posts. The history of a public channel can be read without joining, but there is no global search by message text, so channels are found by name and read one by one.&lt;/p&gt;

&lt;p&gt;VK&lt;/p&gt;

&lt;p&gt;Requests live in city communities, residential complex communities and in discussions and comments under posts of topic groups. We read public content only and do not message group members from a list.&lt;/p&gt;

&lt;p&gt;How it connects&lt;/p&gt;

&lt;p&gt;Telegram connects in the dashboard. MAX and VK we connect per client request, together with the team, as part of the managed plan or the setup with an expert.&lt;/p&gt;

&lt;p&gt;The key number&lt;/p&gt;

&lt;p&gt;Across all sources, 542,795 messages matched keywords and only 14,774 were real requests, that is 2.7%. The remaining 97.3% was ads, vacancies and chatter, so the filter matters more than the search.&lt;/p&gt;

&lt;p&gt;5 days free, no card. We do not promise a number of leads.&lt;/p&gt;

&lt;p&gt;More (in Russian): mpleads.ru/poisk-klientov-v-telegram-max-i-vk/&lt;/p&gt;

</description>
      <category>telegram</category>
      <category>startup</category>
      <category>marketing</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Where Telegram chats actually produce client leads: data by city from 14,000 detected requests</title>
      <dc:creator>forlazin-debug</dc:creator>
      <pubDate>Tue, 27 Oct 2026 05:27:48 +0000</pubDate>
      <link>https://dev.to/forlazindebug/where-telegram-chats-actually-produce-client-leads-data-by-city-from-14000-detected-requests-4j4o</link>
      <guid>https://dev.to/forlazindebug/where-telegram-chats-actually-produce-client-leads-data-by-city-from-14000-detected-requests-4j4o</guid>
      <description>&lt;p&gt;I run Lidolovets (mpleads.ru), a service that reads open Telegram chats and finds messages from people looking for a contractor. Here is what our database shows as of October 27, 2026, split by city. It is a good reality check if you plan to find clients in Telegram chats, monitor Telegram groups for keywords or build a Telegram lead generation tool.&lt;/p&gt;

&lt;p&gt;Moscow: 655 leads. Nizhny Novgorod: 0. Same service, same database.&lt;/p&gt;

&lt;p&gt;The numbers&lt;/p&gt;

&lt;p&gt;We counted chats that clients of the service connected and that have the city name in the title, plus leads from them (demo data excluded). A hot lead is a message where the person asks to do the task right now.&lt;/p&gt;

&lt;p&gt;Moscow and region: 1,177 chats, 104 of them produced leads, 655 leads, 285 hot (43%).&lt;/p&gt;

&lt;p&gt;Kazan: 105 chats, 37 leads, 14 hot.&lt;/p&gt;

&lt;p&gt;Saint Petersburg: 185 chats, 30 leads, 10 hot.&lt;/p&gt;

&lt;p&gt;Novosibirsk: 55 chats, 26 leads, 11 hot.&lt;/p&gt;

&lt;p&gt;Krasnodar: 77 chats, 23 leads, 4 hot.&lt;/p&gt;

&lt;p&gt;Smaller cities (Perm, Krasnoyarsk, Voronezh, Rostov, Yekaterinburg): 8 to 16 leads each.&lt;/p&gt;

&lt;p&gt;How to read it&lt;/p&gt;

&lt;p&gt;It is a lower bound, because many city chats do not have the city in the title. Samples under 30 leads are small samples. No leads does not mean no demand, it means few chats of that city were connected.&lt;/p&gt;

&lt;p&gt;Why keyword matching alone fails&lt;/p&gt;

&lt;p&gt;Across all cities, 542,795 messages matched keywords and only 14,774 were real requests. That is 2.7%, and 97.3% was noise: ads from competitors, job posts, reposts. Roughly 37 irrelevant messages per real lead. A keyword bot forwards all of them, an AI filter reads the message and decides if the author is looking for a contractor.&lt;/p&gt;

&lt;p&gt;What to take away&lt;/p&gt;

&lt;p&gt;Data from one big market does not transfer to a small one. Test on your own city and your own service before you trust an average.&lt;/p&gt;

&lt;p&gt;Full table for 20 cities (in Russian): mpleads.ru/telegram-chaty-po-gorodam/&lt;/p&gt;

&lt;p&gt;Comparison of Telegram chat monitoring services and prices: mpleads.ru/servisy-dlya-poiska-zakazov-v-telegram-chatah/&lt;/p&gt;

&lt;p&gt;The trial is 5 days with no card, because nobody can promise you a number of leads in advance.&lt;/p&gt;

&lt;p&gt;Do you have a market where the numbers look very different from the capital? I would like to compare.&lt;/p&gt;

</description>
      <category>telegram</category>
      <category>startup</category>
      <category>marketing</category>
      <category>ai</category>
    </item>
    <item>
      <title>97.3% of keyword matches are junk: lessons from 542,795 Telegram messages</title>
      <dc:creator>forlazin-debug</dc:creator>
      <pubDate>Mon, 26 Oct 2026 17:11:43 +0000</pubDate>
      <link>https://dev.to/forlazindebug/973-of-keyword-matches-are-junk-lessons-from-542795-telegram-messages-16mn</link>
      <guid>https://dev.to/forlazindebug/973-of-keyword-matches-are-junk-lessons-from-542795-telegram-messages-16mn</guid>
      <description>&lt;p&gt;We built a service that watches open Telegram chats and surfaces people who are actively looking&lt;br&gt;
to buy something. After processing &lt;strong&gt;542,795 keyword-matched messages&lt;/strong&gt; in production, here is the&lt;br&gt;
number that defines the whole problem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;97.3% of them were junk.&lt;/strong&gt; Only 14,774 were real purchase requests.&lt;/p&gt;

&lt;p&gt;That is roughly &lt;strong&gt;36 useless messages per 1 real lead&lt;/strong&gt;. Last 30 days alone: 7,945 real requests&lt;br&gt;
against 363,508 rejected.&lt;/p&gt;

&lt;p&gt;If you are thinking about building keyword monitoring for lead generation, this post is the thing&lt;br&gt;
I wish someone had told me before we started.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why keyword matching fails so badly
&lt;/h2&gt;

&lt;p&gt;The naive approach is obvious: pick keywords, match messages, get leads. It works for about a week.&lt;/p&gt;

&lt;p&gt;The noise is not random garbage. It is specifically the stuff that looks exactly like a lead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Competitor ads.&lt;/strong&gt; They use the same words a buyer would. "Ищу клининг" (looking for cleaning)
and a cleaning company's ad both contain "клининг".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job postings.&lt;/strong&gt; "Требуется мастер" (master needed) matches every keyword a repair service has.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reposts and cross-promotion.&lt;/strong&gt; Same text, many chats, multiplied by the number of chats you watch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discussion without intent.&lt;/strong&gt; People talk about renovation constantly. Almost none of them are
hiring a contractor right now.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A keyword is a &lt;strong&gt;subject&lt;/strong&gt; signal. It carries no &lt;strong&gt;intent&lt;/strong&gt; signal at all. &lt;code&gt;"ищу риелтора"&lt;/code&gt;&lt;br&gt;
(looking for a realtor) and &lt;code&gt;"ищу приключений"&lt;/code&gt; (looking for adventure) share a token and mean&lt;br&gt;
nothing alike.&lt;/p&gt;
&lt;h2&gt;
  
  
  The architecture that actually works
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Telegram open chats
        │
        ▼
 [1] keyword / stop-word prefilter   ← cheap, high recall, ~97% false positives
        │
        ▼
 [2] LLM intent classifier           ← "is this a real request to buy?"
        │
        ├─ rejected → log
        └─ passed   → lead (hot / warm / cold) + draft reply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Stage 1 must stay &lt;strong&gt;broad&lt;/strong&gt;. Every attempt we made to encode intent into the keyword list itself&lt;br&gt;
made recall collapse: you start losing real requests because people phrase them in ways you did&lt;br&gt;
not predict. Keep it dumb and permissive, let stage 2 do the thinking.&lt;/p&gt;

&lt;p&gt;Stage 2 is where the product lives. Our classifier returns three classes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;hot&lt;/strong&gt; — explicit, ready now: &lt;em&gt;"ищу клининг после ремонта, когда можете подъехать?"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;warm&lt;/strong&gt; — asking for advice, no deadline or budget yet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cold&lt;/strong&gt; — topic-adjacent, low intent&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Noise rate varies wildly by niche
&lt;/h2&gt;

&lt;p&gt;This surprised us. Real data from client accounts, 60-day window, anonymised to niche + region:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Niche&lt;/th&gt;
&lt;th&gt;Region&lt;/th&gt;
&lt;th&gt;Chats&lt;/th&gt;
&lt;th&gt;Leads&lt;/th&gt;
&lt;th&gt;Days&lt;/th&gt;
&lt;th&gt;Hot&lt;/th&gt;
&lt;th&gt;Noise&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Price monitoring SaaS&lt;/td&gt;
&lt;td&gt;Russia&lt;/td&gt;
&lt;td&gt;448&lt;/td&gt;
&lt;td&gt;402&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;67.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;White imports from China&lt;/td&gt;
&lt;td&gt;Russia&lt;/td&gt;
&lt;td&gt;482&lt;/td&gt;
&lt;td&gt;1,174&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;525&lt;/td&gt;
&lt;td&gt;80.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product certification&lt;/td&gt;
&lt;td&gt;Russia&lt;/td&gt;
&lt;td&gt;165&lt;/td&gt;
&lt;td&gt;751&lt;/td&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;td&gt;262&lt;/td&gt;
&lt;td&gt;87.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apartment renovation&lt;/td&gt;
&lt;td&gt;Moscow reg.&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;161&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;td&gt;88.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debt relief lawyers&lt;/td&gt;
&lt;td&gt;Moscow reg.&lt;/td&gt;
&lt;td&gt;811&lt;/td&gt;
&lt;td&gt;174&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td&gt;92.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marketplace fulfilment&lt;/td&gt;
&lt;td&gt;Russia&lt;/td&gt;
&lt;td&gt;190&lt;/td&gt;
&lt;td&gt;415&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;93.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Realtor&lt;/td&gt;
&lt;td&gt;Blagoveshchensk&lt;/td&gt;
&lt;td&gt;189&lt;/td&gt;
&lt;td&gt;166&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;95.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cleaning company&lt;/td&gt;
&lt;td&gt;Moscow&lt;/td&gt;
&lt;td&gt;272&lt;/td&gt;
&lt;td&gt;201&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;159&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;97.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern: &lt;strong&gt;the more common the vocabulary, the worse the noise.&lt;/strong&gt; "Уборка" (cleaning) appears&lt;br&gt;
in chats constantly and almost never means "I want to order cleaning". Meanwhile a narrow B2B term&lt;br&gt;
like "репрайсер" (repricer) is almost self-filtering.&lt;/p&gt;

&lt;p&gt;Practical consequence: niche determines your infrastructure cost. A cleaning client needs ~36x more&lt;br&gt;
classifier calls per delivered lead than a narrow B2B client.&lt;/p&gt;
&lt;h2&gt;
  
  
  A measurement trap that will fool you
&lt;/h2&gt;

&lt;p&gt;When a new account connects, the system scans chat &lt;strong&gt;history&lt;/strong&gt;. That first day produces a huge&lt;br&gt;
batch of leads at once.&lt;/p&gt;

&lt;p&gt;In one account, &lt;strong&gt;417 of 1,174 leads arrived on day one.&lt;/strong&gt; If you compute "leads per day" naively,&lt;br&gt;
you report 34.5/day when the real steady-state is much lower. Two of our accounts had &lt;em&gt;all&lt;/em&gt; their&lt;br&gt;
leads on a single day — pure backfill, zero ongoing flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Always exclude the first active day&lt;/strong&gt; before computing rate, and drop accounts with a single&lt;br&gt;
active day entirely. We nearly published inflated numbers because of this.&lt;/p&gt;
&lt;h2&gt;
  
  
  Stop-words carry more weight than keywords
&lt;/h2&gt;

&lt;p&gt;Generic set that applies to nearly any niche (Russian, but the categories translate):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# hiring, not buying
вакансия, ищем сотрудника, требуется, резюме, зарплата, оклад, на работу

# someone selling, not buying
предлагаю услуги, оказываю услуги, наша компания, обращайтесь, прайс,
портфолио, скидка, акция, подписывайтесь, реклама, промокод

# channel noise
переслано, репост, кто знает чат, админ, правила группы
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Niche-specific additions matter more. For cleaning: &lt;code&gt;уборщица&lt;/code&gt;, &lt;code&gt;пылесос купить&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;генеральная уборка сама&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Speed beats price
&lt;/h2&gt;

&lt;p&gt;Lead temperature decays fast. In a 500-flat residential chat, a cleaning request collects several&lt;br&gt;
competing replies within the hour. The first clear answer with a price and a time slot wins far&lt;br&gt;
more often than the cheapest one sent next morning.&lt;/p&gt;

&lt;p&gt;This changes the product requirement: it is not enough to &lt;em&gt;find&lt;/em&gt; the lead, you have to deliver it&lt;br&gt;
while it is still warm, and ideally hand over a draft reply.&lt;/p&gt;




&lt;p&gt;Full dataset and per-niche breakdown:&lt;br&gt;
&lt;a href="https://mpleads.ru/kejsy-po-nisham/" rel="noopener noreferrer"&gt;mpleads.ru/kejsy-po-nisham&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The service itself is &lt;a href="https://mpleads.ru" rel="noopener noreferrer"&gt;Lidolovets&lt;/a&gt; — commercial, Russian market, 5-day free&lt;br&gt;
trial. The documentation and stop-word recipes are public on&lt;br&gt;
&lt;a href="https://github.com/forlazin-debug/lidolovets-telegram-lead-monitoring" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the classifier setup in the comments.&lt;/p&gt;

</description>
      <category>aimachinelearningstartupapi</category>
    </item>
  </channel>
</rss>
