Это не баг и не про лимит 3 rps. Для поисковых методов (в первую очередь users.search, но также groups.search и т.п.) у ВК есть отдельные антискрейпинг‑ограничения. При их превышении платформа «тихо» режет поиск: метод начинает возвращать пустую выдачу (count: 0, items: []), и то же самое вы видите в веб‑поиске из того же аккаунта. Ошибки flood control (code 6) при этом может не быть.
Что известно про эти ограничения
- Они завязаны на аккаунт (access token) и часто на IP. execute не помогает: внутренние вызовы учитываются так же.
- Лимиты недокументированы, динамические и зависят от частоты и объёма однотипных запросов. Широкие/повторяющиеся запросы (вроде «Иванов Иван») банятся быстрее.
- Блокировка обычно краткосрочная при первом срабатывании (несколько минут, часто 10–15), при повторных — дольше (десятки минут, часы, вплоть до суток). Фиксированного времени «X минут — и всегда заработает» нет.
Практические рекомендации
- Считать «пустую» выдачу на явно популярный запрос (где точно должны быть результаты) признаком срабатывания антифлуда. В этом случае делайте паузу не менее 10–15 минут и используйте экспоненциальный бэкофф (каждое последующее срабатывание — увеличить паузу в 2 раза).
- Сильно разрежайте частоту именно users.search. 3 rps — общий потолок API, но для поиска этого слишком много. Делайте 1 запрос раз в несколько секунд или реже, распределяйте поиск во времени.
- Максимально сужайте запросы фильтрами (город, возраст, пол, школа/вуз и т.п.), чтобы уменьшить число обращений и «ширину» выдачи. Повтор одних и тех же широких запросов — частая причина бана.
- Кешируйте результаты и избегайте повторов одних и тех же q.
- Не пытайтесь обойти защиту простым распределением по execute/параллелизмом — эффект будет обратный.
- Если критично и законно: разделяйте нагрузку по разным аккаунтам и/или IP, но учитывайте правила ВК — массовый сбор данных может привести к санкциям.
- Под задачу «найти клиентов» подумайте о легальных механизмах сопоставления, которые ВК поддерживает для рекламодателей (импорт телефонов/почт в аудитории). Это надежнее и не упирается в поисковые лимиты.
Итого: «отрубание» поиска — временное, но время восстановления плавающее (обычно от минут до часов). Жесткого порога нет, поэтому стройте обработку с бэкоффом и снижайте частоту/ширину именно users.search.