· 6 мин чтения

Акторы на Apify: пять задач и сколько стоит прогон

Актор — чужой готовый скрапер, который запускаешь по API: на входе JSON, на выходе датасет. Пять моих акторов в Store: какую задачу решает каждый, что кладёшь на вход, что получаешь в полях и сколько стоил живой прогон — $0,42 за все пять.

apifyscrapingtelegrammonetization

Актор — докер-образ, который платформа Apify запускает по API, по расписанию или кнопкой из браузера: на входе JSON по схеме, на выходе dataset (JSON, CSV, Excel, XML). Store — витрина таких акторов: чужой скрапер запускается без единой строки кода, платформа списывает деньги с покупателя и делит выручку с автором. За неделю у меня там оказалось пять. Ниже — по одной задаче на актор: что кладёшь на вход, что получаешь на выходе и сколько стоил живой прогон.

Все пять лежат в моём профиле в Store, карточки с полями и ценами — в каталоге на сайте.

Платишь за событие, а не за время работы

Rental — подписка на актор — отключается 01.10.2026. Публиковать теперь можно только pay-per-event: автор объявляет события («строка в датасете», «минута аудио», «канал обыскан») и цену за штуку, покупатель платит за результат, а не за минуты, которые крутился контейнер. Доля 80/20 в пользу автора, в API это поле apifyMarginPercentage: 0.2.

Следствие, которое определяет всю архитектуру: compute платит разработчик. RAM, трафик, резидентный прокси по $8/ГБ идут из моей маржи, а не из счёта покупателя. Поэтому ни в одном из пяти акторов нет headless-браузера — только HTTP: публичные веб-превью, гостевые эндпоинты, один запрос на сущность. Один Playwright на объявление съел бы событие целиком.

Что было в трендах X за сутки — x-trends-24h-timeline

Все остальные трендовые скраперы отдают один снапшот на момент нажатия Run. Здесь задача другая: увидеть, какие темы держались весь день, а какие прорвались только что.

Вход: локация (united-states; доступно 467 — worldwide, 62 страны, 402 города), окно 24 часа, сколько трендов брать из снапшота (топ-10).

Выход: три формы строк в одном датасете, различаются полем kind. snapshot — тренд в момент времени: location, captured_at, rank, trend_name, почасово за сутки. drift — жизнь темы за окно: status (breaking / sustained / fading), first_seen, best_rank, rank_change, rank_series; то есть видно не «было в трендах», а «держалось в топ-10 шесть часов и умерло в три ночи». Плюс top-period — строка агрегированного лидерборда. Источник — trends24.in одним GET с фолбэком на гостевой эндпоинт X, и каждая строка несёт поле source: деградация видна в данных, а не молча.

Прогон: 19 секунд, 260 строк (200 снапшотов + 60 drift), $0,240 по цене строки, действовавшей на момент проверки. Это оказалось дороже всех остальных четырёх вместе, поэтому trend-row в тот же день снижен вдвое, до $0,00015 — тот же прогон теперь стоит $0,21.

Карточка актора на сайте: X Trends Scraper — 24 Hour Timeline.

Расшифровать голосовые и кружки канала — telegram-voice-transcriber

Голосовые и кружки в Telegram-каналах не индексируются ничем: текстовым поиском их не берут ни площадки, ни конкуренты. Мониторинг бренда, OSINT, лидген по «ищу X, сказанному голосом» — всё это иначе не собрать.

Вход: список публичных каналов (@durov, t.me/durov или полная ссылка), какие типы медиа брать (голосовые, кружки, видео), диапазон дат, глубина, потолок длительности.

Выход: строка = одно медиа. channel, message_id, date, message_url, media_type, duration_sec, text — сам транскрипт, language, views, post_text. Читается публичный веб-превью t.me/s/<channel> — та же страница, что видит разлогиненный браузер: без аккаунта, без телефона, без Telegram API. ffmpeg выкидывает видеодорожку (кружок 6 МБ → ~130 КБ аудио), длинное режется на 15-минутные куски, распознаёт Whisper Large v3 Turbo.

Цена: $0,008 за минуту аудио плюс $0,001 за сообщение. Прогон: 14 секунд, 3 строки, $0,027 (сейчас за тот же вход — $0,019).

Карточка актора на сайте: Telegram Voice Transcriber.

Объявления по району со схлопнутыми дублями — serbia-real-estate-scraper

Одна и та же квартира висит на обоих порталах, у трёх агентств и ещё раз с другим фото. Платить за такую выгрузку построчно — платить за дубли.

Вход: город или община (Vračar, Beograd, Novi Sad, диакритика необязательна), порталы, продажа или аренда, тип, диапазоны цены и площади, maxItems.

Выход: строка = одна уникальная квартира. price_eur, area_m2, price_per_m2, rooms, floor, municipality, address, lat/lon, seller (собственник или агентство), photos, плюс duplicate_count и duplicates[] — где ещё висит и по какой цене. Схлопнутый дубль стоит $0,0002 вместо $0,0015 за уникальную. Дедуп — граф-кластеризация по метаданным (в пределах 70 м, тот же этаж, цена ±35%, площадь ±4 м²) и перцептивный хеш обложки с порогом ≤10 бит; пороги настраивались на 18 404 живых белградских объявлениях. На более раннем прогоне по Врачару 47 сырых объявлений схлопнулись в 37 уникальных.

Прогон: 36 секунд, 20 уникальных, 3 дубля схлопнуто, $0,031. Поля смотрел глазами: 4zida — 225 000 € за 66 м² на Врачаре, halooglasi — 769 000 € за 236 м²; цены реальные, кросс-портальный дедуп сработал.

Карточка актора на сайте: Serbia Real Estate Scraper.

История канала и поиск по слову — telegram-channel-scraper

Собрать посты канала за период или найти во всех отслеживаемых каналах всё по ключевому слову — с реакциями, просмотрами и без репостов-клонов.

Вход: список каналов, опциональный query, фильтры since / until / minViews / minReactions / maxPostsPerChannel / maxResults, тумблер дедупа репостов.

Выход: строка = пост. text, views числом (1.38M превращается в 1380000), reactions итого и reactions_by_emoji поштучно — включая платные звёздные, media[], is_repost, duplicate_of и relevance_score (BM25, когда задан запрос). Поиск по слову идёт через собственный поиск Telegram t.me/s/<ch>?q=<term> с пагинацией, а не «скачать всё и грепнуть». Репосты бесплатны, мёртвый или приватный канал не тарифицируется, отфильтрованные посты — тоже.

Прогон: два канала (telegram и durov) со словом update, 7 секунд, 40 постов, $0,102. В выдаче t.me/durov/504 — 16 800 000 просмотров, 220 523 реакции, relevance_score 0.38.

Карточка актора на сайте: Telegram Channel Scraper.

Транскрипт лекции с готовыми субтитрами — audio-video-transcriber

Хостед speech-to-text шагом в пайплайне: доклад, лекция, подкаст — сразу с субтитрами и без возни с API распознавания.

Вход: три двери, все без логина — прямая ссылка на аудио или видео (mp3, m4a, wav, mp4, webm), загруженный файл, ссылка на публичный пост Telegram. Плюс язык, потолок длительности (5400 с), потолок размера (200 МБ), тумблеры SRT и VTT.

Выход: source, title, duration_seconds, language, transcript, srt, vtt. Цена $0,005 за минуту с округлением вверх пофайлово: трёхминутный клип — $0,015, час аудио — $0,30.

Прогон: речь Дж. Буша с Wikimedia, .ogg на 198 секунд, 11 секунд работы, 1 строка, $0,020. Язык определён как English, текст распознан верно.

Карточка актора на сайте: Audio & Video Transcriber.

Пять прогонов, $0,42

Каждый из пяти запущен 9 сентября через публичный POST /v2/acts/<id>/runs с боевым входом, а не с prefill-примером из карточки. Все пять SUCCEEDED, ошибок и варнингов в логах ноль, самый долгий прогон — 36 секунд. Покупателю за все пять списано $0,42, мой platform-usage за те же раны — $0,0155.

Проверка вскрыла и цену, и перекос в округлении минут: telegram-voice считал их вверх пофайлово, три коротких голосовых превращались в три оплаченных минуты. Теперь минуты считаются по итогу рана (RunMinutes, билд 0.1.13) — тот же вход, пять голосовых BuroBobkova, раньше давал «3 messages, 3 audio minutes ($0,027)», а сейчас «3 messages, 2 audio minutes ($0,019)», то есть покупателю примерно на 30% дешевле. Из технических граблей упомяну одну: engine/ лежал в репо-широком .gitignore, apify push унёс актор без движка, и первый ран лёг с ModuleNotFoundError.

Три тупика

Instagram без логина мёртв: это auth-wall, а не репутация IP — резидентный прокси не помогает, и платные apify/instagram-* живут ровно потому, что гоняют пулы залогиненных сессий — эта возня и есть их продукт. YouTube в транскрайбере не поддержан осознанно, и написано это прямо в README: yt-dlp с датацентровых IP блокируется, нужны резидентные прокси и куки. Тариф Creator, на котором я сижу, блокирует запуск чужих публичных акторов из Store — проверено живьём, HTTP 403 public-actor-disabled; грант $500 и потребление чужого Store на одном аккаунте — или-или.

Где сейчас

Actor quality — балл 0–100, которым площадка мерит надёжность, простоту входа и популярность, — после недели правок: 70 → 72 у voice-транскрайбера, 78 → 79 у x-trends, 78 без изменений у serbia (README там и так был в плюсах).

Главное не в баллах. Порог органики в Store — около 10 пользователей, у моих акторов по stats сейчас 1–2, отзывов ноль, закладок ноль. KYC на сербское ИП пройден 08.09, выплаты открыты, порог выплаты $20 — выплачивать нечего. Средний актор в Store делает около $22 в месяц, и до этой средней ещё дойти: пять работающих акторов, честная маржа, ноль продаж. Cold start не пробит, и ни одна закрытая техническая задача его не пробивает — первые десять пользователей приходят не из кода. Рабочей гипотезы, откуда они возьмутся, у меня пока нет.