№27

27 сентября 2026

контент · данные · инструменты · агенты

Крючки чужого аккаунта в таблицу: скрапер даёт просмотры, Jev ставит ярлыки по тексту

Если коротко

Что даёт
таблицу по каждому рилсу конкурента: тема, тип крючка, структура, просмотры и лайки. По ней видно, какие начала у этого автора собирают больше всего.
Зачем
500 роликов глазами не пересмотришь, а ярлыки по заранее заданным категориям превращают их в строки, которые сортируются и сверяются с просмотрами.
Как сделать
проще всего взять бесплатный Creator Lab автора ролика (github.com/artemnovitckii/creator-lab, MIT): Apify собирает ролики, Groq или Fireworks расшифровывают речь, Jev ставит ярлыки, дашборд открывается у вас в браузере. Своя сборка: Apify Instagram Reel Scraper на профиль, расшифровка речи, по одному запросу в Jev (POST https://api.typesafe.ai/v1/systemone), дальше таблица или график.
Профит
сам инструмент бесплатный, платите провайдерам за ключи. По их расценкам 500 роликов выходят примерно в $2: Apify около $1.3, расшифровка 30-45 центов (при минуте на ролик), Jev около 20 центов (у автора $0.17 на 447 роликов). Платить временем придётся за установку и пилот на 20 роликах.
Где подвох
«17 центов» посчитаны без скрапинга и расшифровки (это написано в кадре мелким шрифтом), а «в секундах» это повтор сохранённого результата. Встроенный транскрипт Apify платный, $0.048 за минуту ролика, поэтому речь лучше расшифровывать отдельно. Jev в раннем доступе со списком ожидания и читает только речь, а не надпись поверх видео. Ролик это приманка под услуги автора («AI Automations | Systems», Book a call), но «система», которую он раздаёт за комментарий JEV, по всем признакам лежит на GitHub открыто и работает без него.

Что показано

Речи в ролике нет: whisper вернул одну точку. Всё держится на записи экрана с дашбордом «creator lab x jev» под заголовком «Decode @hormozi». Счётчик разобранных сценариев бежит от 14 до 447, счётчик ярлыков от 112 до 3 576, оценка стоимости от $0.0004 до $0.1713. Справа для каждого рилса карточка с тремя ярлыками (тема, крючок, структура), цитатой из речи и цифрами просмотров, под ней три типа крючка со счётчиками: Curiosity 133, Recognition 107, Result 63. Ниже человек за ноутбуком, поверх подписи и призыв написать в комментариях JEV. Этот дашборд не живой прогон, а режим записи «Recording studio» из Creator Lab: он проигрывает сохранённый результат для съёмки экрана (так сказано в README репозитория).

Почему это работает

Тут три части, и они делают разное. Скрапер отдаёт по каждому рилсу цифры и адреса: просмотры, лайки, ссылку на видео и отдельную ссылку на звук. Транскрипт актор Apify тоже умеет отдавать, но это платная опция (includeTranscript, $0.048 за начатую минуту ролика), и по умолчанию рассчитывать на неё не стоит. Автор её не берёт: в его инструменте речь расшифровывает Whisper v3 Turbo у Groq или Fireworks, и в описании ролика тоже сказано про Whisper. Третья часть это Jev, и он не чат-модель. Это «System One»-модель компании TypeSafe AI: вы присылаете текст и список типизированных вопросов, а назад получаете не абзац, а значения (выбор из вашего списка, оценка по вашей шкале или вероятность «да») с вероятностями и уверенностью. Все вопросы считаются параллельно по одному и тому же тексту. Поэтому «ярлык» приходит в формате, который код сразу кладёт в таблицу, без разбора строки.

Цифры автора сходятся по арифметике: 3 576 ярлыков на 447 сценариев это ровно 8 на ролик, а показаны в кадре только три. В исходниках инструмента все восемь названы: тема, первый ход, механизм крючка, структура, доказательства, эмоция, конкретность совета и призыв к действию в конце. Цена в кадре это сумма usage.input_tokens по ответам Jev, умноженная на $0.042 за миллион. $0.17 даёт около 4 млн токенов, то есть около 9 тыс. на ролик: инструмент посылает текст отдельно в каждый из восьми вопросов и ещё в вопросы про роль каждого куска речи (до 40 кусков на ролик). В вашей сборке с тремя вопросами выйдет заметно дешевле.

Ценность в стыке двух таблиц: ярлыки крючков, которые модель ставит по тексту, и просмотры, которые отдаёт скрапер, вместе показывают, какой тип начала работает именно у этого автора.

Кстати, ярлыки такого сорта (тема, тип начала, структура) наверняка поставит и обычная дешёвая LLM со структурированным выводом (это моё замечание, автор про это не говорит, и сравнения на своих данных у меня нет). Что добавляет Jev: бесплатные выходные токены, миллисекундные ответы (по заявлению вендора 70-500 мс) и вероятность по каждому варианту, по которой легко отсечь неуверенные ярлыки.

Как повторить

Ни один шаг я не гонял на живом ключе и реальном профиле, а код Creator Lab только прочитал, не запуская. Путь 1 сверен с README и docs/SETUP.md репозитория и с его исходниками (расценки, вызовы API, вопросы к Jev). В пути 2 шаги 1 и 2 сверены со страницей и публичным описанием актора Apify и локальным whisper-cli, шаги 3-5 с документацией TypeSafe и сигнатурой SDK, шаг 6 (таблица и график) восстановлен по подписи автора.

Путь 1. Готовый Creator Lab

  1. Поставьте Node.js (рекомендуют 24, минимум 22.9) и FFmpeg, ffmpeg и ffprobe должны быть в PATH. На Mac: brew install ffmpeg, на Windows: winget install --id Gyan.FFmpeg --exact.
  2. Скачайте инструмент и создайте конфиг (можно и «Code → Download ZIP» на странице репозитория):
   git clone https://github.com/artemnovitckii/creator-lab.git
   cd creator-lab
   npm run setup

Последняя команда копирует .env.example в .env, существующий .env она не трогает. Файл с точкой в Finder скрыт, откройте папку в редакторе кода.

  1. Заведите три ключа и впишите их в .env: APIFY_TOKEN (Apify Console, настройки аккаунта, API и интеграции), TYPESAFE_API_KEY (ключ Jev на https://console.typesafe.ai/keys, если вас уже пустили из списка ожидания) и ключ одного сервиса расшифровки: GROQ_API_KEY с https://console.groq.com/keys или FIREWORKS_API_KEY с https://app.fireworks.ai/. Значение TRANSCRIPTION_PROVIDER должно совпадать с выбранным (groq или fireworks, по умолчанию в файле стоит fireworks), ключ второго сервиса оставьте пустым. Платёжные данные и лимиты в каждом из трёх кабинетов включаете сами.
  2. Проверьте и запустите:
   npm run doctor
   npm start
  1. Нажмите «New analysis», впишите username без @, поставьте 20 роликов, concurrency 2 и лимит Apify $1 (так советует инструкция репозитория). Это пилот. Откройте несколько роликов и сверьте ярлыки со скриптом. Если всё сходится, гоняйте больше: за один запуск инструмент берёт до 1 000 роликов одного аккаунта. Запуск можно поставить на паузу и продолжить, готовые расшифровки не оплачиваются второй раз.

Путь 2. Своя сборка на Python

  1. Откройте https://apify.com/apify/instagram-reel-scraper, войдите в аккаунт Apify, в поле username добавьте аккаунт конкурента, в лимит (resultsLimit) поставьте около 500. Опции «включить транскрипт» и «скачать видео» выключите: обе платные ($0.048 за начатую минуту ролика и $0.02 за мегабайт на бесплатном тарифе). Нажмите Start. На бесплатном тарифе дают $5 кредита, по странице это почти 2 000 роликов. Скачайте результат в JSON: у каждого ролика там есть url, shortCode, videoPlayCount, likesCount, videoDuration, caption и адреса audioUrl и videoUrl.
  2. Расшифруйте речь. Ссылки audioUrl и videoUrl ведут на CDN Instagram, живут недолго (в самой ссылке зашит параметр с датой окончания, а в описании актора сказано, что срок непредсказуем), поэтому скачайте звук сразу. Берите audioUrl, а если его нет, videoUrl: у части роликов звук лежит отдельно от видео. Дальше два варианта. Как в инструменте автора: отправить звук в Groq (whisper-large-v3-turbo, $0.04 за час звука, минимум 10 секунд на запрос, файл до 25 МБ на бесплатном тарифе). Или бесплатно и локально:
   ffmpeg -i reel.mp4 -ar 16000 -ac 1 reel.wav
   curl -L -o ggml-small.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin
   mkdir -p transcripts
   whisper-cli -m ggml-small.bin -f reel.wav -l auto -otxt -of transcripts/SHORTCODE

Вместо SHORTCODE подставляйте значение shortCode ролика, тогда скрипт ниже сам найдёт текст. Программа ставится через brew install whisper-cpp, модель весит около 490 МБ. Нужна многоязычная модель (не .en): по умолчанию whisper-cli берёт английскую ggml-base.en.bin, и русскую речь она не разберёт. Формат входа у whisper-cli только flac, mp3, ogg и wav, поэтому mp4 сначала гоните через ffmpeg.

  1. Опишите вопросы. Категории ниже я взял из кадров ролика, определения к ним придумал сам. Настоящие определения автора (все восемь вопросов) лежат в файле lib/schema.mjs репозитория Creator Lab, их можно взять оттуда. Вариант «other» нужен, чтобы модель не натягивала ролик на ближайшую категорию:
import csv, json
from pathlib import Path
from typesafe_sdk import Choice, TypeSafeClient

client = TypeSafeClient()  # ключ берёт из TYPESAFE_API_KEY

QUESTIONS = {
    "topic": Choice(
        instructions="What is the main topic of this reel script?",
        criteria={
            "business": "Running or growing a company",
            "marketing": "Ads, leads, offers, funnels",
            "mindset": "Habits, discipline, motivation",
            "technology": "Tools, AI, software",
            "other": "None of the above",
        },
    ),
    "hook": Choice(
        instructions="What kind of hook does the opening of this script use?",
        criteria={
            "curiosity": "Opens a question or gap the viewer wants closed",
            "recognition": "Describes a situation the viewer sees themselves in",
            "result": "Opens with a concrete outcome or number",
            "direct": "Addresses the viewer or states the offer at once",
            "mistake": "Opens with an error or a warning",
            "contradiction": "Attacks a common belief",
            "other": "None of the above",
        },
    ),
    "structure": Choice(
        instructions="How is this script structured?",
        criteria={
            "problem_solution": "A problem, then the fix",
            "steps": "A numbered or sequential how-to",
            "comparison": "Two things set against each other",
            "opinion": "A stated position with support",
            "explanation": "Explains how something works",
            "qa": "A question and its answer",
            "other": "None of the above",
        },
    ),
}

reels = json.load(open("reels.json"))
rows = []
for r in reels:
    f = Path("transcripts") / f"{r.get('shortCode')}.txt"  # текст от whisper из шага 2
    text = f.read_text().strip() if f.exists() else (r.get("transcript") or "").strip()
    if not text:
        continue
    a = client.system_one(state=text, questions=QUESTIONS, model="jev-1.13.0").answers
    rows.append({
        "url": r.get("url"),
        "plays": r.get("videoPlayCount"),
        "likes": r.get("likesCount"),
        "topic": a["topic"].choice,
        "hook": a["hook"].choice,
        "structure": a["structure"].choice,
    })

with open("labeled.csv", "w", newline="") as f:
    w = csv.DictWriter(f, fieldnames=rows[0].keys())
    w.writeheader()
    w.writerows(rows)
  1. Сначала прогоните 20 роликов, а не 500: откройте каждый и сравните ярлык со своим глазом. Если промахов больше одного из пяти, правьте описания в criteria (граничные случаи и примеры кладите прямо в них, так советует документация), потом гоняйте всё. SDK по умолчанию повторяет запросы при 429 и 529.
  2. Соберите таблицу: по каждому типу крючка число роликов и медиана просмотров, например через pandas (groupby("hook")["plays"].median()). График «дата против просмотров, цвет по крючку», о котором говорит подпись автора, в кадрах не показан, поэтому это моя реконструкция. Выигрышный тип крючка даёт вам список 3-5 роликов, которые стоит разобрать руками. Вердикта скрипт не выдаёт.

Проверочный прогон

В Creator Lab пилот из 20 роликов должен закончиться без красных ошибок, а стоить примерно 5 центов у Apify (20 × $0.0026), около цента у Jev и центы за расшифровку. Откройте пять роликов через «Original Reel» и сверьте ярлыки со своим ощущением. Ролики без слов или с очень короткой речью инструмент исключает сам, это не сбой. Ярлыки с уверенностью ниже 0.65 или unclear он сам помечает на проверку (так в его коде).

В своей сборке: возьмите 20 роликов одного аккаунта и получите labeled.csv с непустыми topic, hook и structure на каждой строке. Откройте пять роликов и сверьте ярлык со своим: вы должны в основном соглашаться. Ещё два признака, что всё собрано правильно: доля «other» не выше пары десятков процентов, и ярлыки не слиплись в один. В кадре автора самый частый тип забрал 133 из 447, то есть около 30 %, остальные разошлись по другим. Если «curiosity» набрал 80-90 %, определения слишком широкие. Если ответ не приходит совсем, смотрите код: 401 значит неверный ключ, 429 и 529 значит лимит или перегрузка. Плюс стоимость: у ответа есть usage.input_tokens, на 20 роликов должны выйти доли цента.

Где это пригодится

Если вы ведёте канал или рилсы в нише, где у трёх-пяти конкурентов накопились сотни роликов, а решать, с чего начинать ролик, приходится на глаз, этот приём даёт вам данные вместо ощущения. То же работает на вашем собственном аккаунте: автор предлагает узнать, какие ваши крючки заходят вашей аудитории. И шире: любая связка «текст плюс метрика» (отзывы и оценки, тикеты поддержки и время закрытия, транскрипты звонков и результат сделки) ложится в ту же схему. Для русскоязычного аккаунта сначала проверьте на двух десятках роликов: документация честно пишет, что английский у Jev лучше остальных языков, а вопросы в Creator Lab написаны по-английски. Язык речи в его форме запуска можно указать двухбуквенным кодом (ru). Полный прогон я сам не собирал: проверил документацию, цены и формат ответа, а на живом ключе Jev не запускал.

Больше подобного

Разбираю по находке в день и складываю сюда. Свежее и то, что до сайта не доехало, выходит в канале «Евдокимов как обычно».