Опыт фриланса: Как бесплатный заказ на Авито превратился в задачу на 2,5 месяца

 Публичный пост
25 июля 2026  83

Всем привет!
В клуб вступил недавно, сразу захотелось выложить какой-нибудь пост. Идей особо не было, решил немного схитрить. Я люблю писать и уже выкладывал статьи на Хабр. Поэтому решил с небольшими изменениями перезалить свою последнюю работу сюда. На Хабре она не получила желанного фидбека в виде комментариев, интересно услышать ваше мнение. Оригинал статьи.

Предлагаю начать!

Полгода назад я узнал о крутом инструменте — Apps Script. Это расширение Google для их приложений, например, Таблицы, Документы, Презентации и т. д. Сначала при помощи этого инструмента мне удалось для спортивной школы автоматизировать выгрузку информации из CRM в Google таблицу и настроить отчеты для работы с этой информацией, а потом, когда распробовал инструмент на вкус, сделал личного Telegram-бота рассыльщика. Обо всем этом и пойдет дальше речь.

Мой первый заказ на Авито

История началась полгода назад, когда я активно искал новую работу. На рынке кризис, работу найти сложно, в дополнение к этому пытался поменять сферу — долгое время я проработал в логистике, а хотелось перейти в финтех. Как вы понимаете, задача не из легких.

В момент, когда отчаяние подходило к верхней границе, в голове появилась следующая цепочка рассуждений: «Мне нужен релевантный опыт и навыки для повышения своей ценности как специалиста → один из самых эффективных способов учиться и получать опыт — взять реальную задачу → реальную задачу проще всего взять на фрилансе».


Так я оказался на Авито. Там разместил объявление в духе «Автоматизация отчетности, Excel, дашборды, API — БЕСПЛАТНО». Согласен, коммерчески не самое выгодное занятие, но что не сделаешь ради опыта :)

За месяц написали три человека. Разброс обращений удивил! Думаю, стоило конкретнее описать в объявлении перечень предоставляемых услуг. По итогу вот с чем ко мне обратились:

  1. Добавить музыку в презентацию
  2. Решить в Excel уравнивание одиночного полигонометрического хода любой формы двухгрупповым способом (без понятия, о чем идет речь)
  3. Сделать дашборды из СРМ «Мой Класс»

Я выбрал третий вариант. Задача так и звучала: «Сделать дашборды из СРМ Мой Класс». «Делов на пару вечеров», подумал я и написал «Да». Никакого дополнительного описания и требований не было. Меня это абсолютно никак не насторожило. Сейчас, оглядываясь назад, возникает ощущение: возможно, решить уравнивание одиночного полигонометрического хода было бы проще.

Мысли вслух: Как будто Авито не предназначено для простых смертных фрилансеров. За целый месяц на первое объявление откликнулось 3 человека. После задания из этой статьи я делал еще несколько объявлений, но уже ставил цену. И у меня не то что заказов не было, а даже просмотров. «Хочешь просмотры — плати, хочешь заказы — плати много!» — такое ощущение создалось у меня при работе с Авито. Даже опубликовать больше одного объявления бесплатно нельзя… Вопрос: где искать заказы? :)

Без внятного ТЗ — результат ХЗ

Раньше я полагал, что люди, которые обращаются за помощью, чётко представляют себе, чего хотят и какой результат ожидают. Однако теперь понимаю, что это не всегда так :)

Следующим сообщением после «Да» написал «Отправьте, пожалуйста, ТЗ. Что я должен сделать?».

— Нужно, чтобы данные автоматизировано выводились в дашборд, — вот тут появились первые мысли, что просто не будет! Примерно через неделю, или, если считать в часах, через пару-тройку часов, я понял, чего от меня ждут.

На самом деле требования продолжали уточняться на протяжении всего проекта, но если бы первым сообщением вместо «Нам нужно сделать дашборды из СРМ Мой Класс» отправили такое, то задача упростилась бы в разы:


После того, как разобрался с требованиями, начал думать над решением и инструментами, которыми буду пользоваться. На тот момент я только слышал о Google Apps Script, но не работал с ним.

Для начала работы мне требовался ключ API от их СРМ. Скорость и простота, с которой его дали, удивила. Представьте ситуацию: какой-то непонятный чувак, бесплатно решает их задачу, без какого-либо подтвержденного опыта и договора, просит дать полный доступ к их системе со всей конфиденциальной информаций.

С одной стороны, по-другому их задачу не решить, с другой — им как будто стоило выразить хоть какие-то опасения на этот счет. Есть подозрение, что они не знали, на что способен человек с ключом API. Не подумайте, у меня не было желания им навредить или сделать что-то в этом духе. Просто, будь я на их месте, то не вписался бы в подобную историю, как-никак вопрос рисков :)

Дальше начинается самое интересное. Я быстро разобрался с документацией API, научился получать сведенья из CRM, но вот метрики, которые им были нужны, я всё никак не мог научиться считать. Чтобы я ни делал, показатели в моей таблице расходились с показателями, что были в их таблице, доступ к которой мне предоставили. Причина оказалась проста. У них в таблице были неправильные данные!


Дело в том, что в таблице была срезка данных на определенный момент, а менеджеры этой школы могли вносить данные в CRM задним числом, как следствие, информация в таблице быстро устаревала.

Это было последней каплей, я написал им, что намерен бросить задачу. Посудите сами:

  1. Раза три спрашивал: «Данные в таблице точно правильные?» Мне говорили: «Да»
  2. Уже почти месяц каждую неделю я тратил по несколько часов на неоплачиваемую и даже не на перспективную задачу
  3. В тот момент уже нашел работу и проходил адаптацию

Вы будете смеяться, но по итогу конфликт быстро исчерпал себя — мне предложили денег :)


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

После созвона дела пошли в гору, но не без сложностей. У этой CRM очень стрёмное и кривое API, приходилось делать много костылей, чтобы получить те или иные данные. В какой-то момент пришлось поменять архитектуру решения из-за ограничений Google, но об этом дальше.

По итогу, хорошо, что всё хорошо кончается. Вы бы знали, как я был рад перевернуть эту страницу своей жизни.

Что находится под капотом решения?

Текущую ситуацию, еще до обращения ко мне, на стороне заказчика можно увидеть на следующей картинке:


Единственный вариант, который мне пришел в голову, для автоматизации этого процесса — использовать Google Apps Script. Он бесплатный, понятный и его легко передать заказчику в сопровождение. Остановимся на нем немного подробнее.

Google Apps Script — это облачный язык сценариев (основан на JavaScript), созданный Google для автоматизации и расширения возможностей своих сервисов (Google Таблицы, Документы, Почта, Календарь, Диск, Forms и т. д.). Это как «макросы в Excel» или VBA, но для Google, с бесплатным хостингом и доступом к API от Google. Ещё у этого инструмента есть возможность настраивать сценарии, т.е. можно задать когда и какую функцию нужно выполнить.


Как будто альтернатив нет (Или есть? Как бы вы решали задачу, если бы нельзя было использовать Apps Script? Напишите в комментарии, если есть идеи).

Немного подумав, наметил такое решение и приступил к реализации:


Я хотел как можно быстрее завершить эту задачу, поэтому начал решать в лоб. Логика простая — получить все данные, посчитать метрики и вывести их в таблицу. Мои романтические ожидания сразу разбились об ограничения Google, выставляемые к скриптам: время выполнения не должно превышать 6 минут. Из-за того, что программа делала все сразу, то время выполнения пробивало потолок в 6 минут.

Так появилась потребность в базе данных, чтобы сначала данные сохранить, а потом использовать их для расчета метрик. Напомню, решение нужно было бесплатное, поэтому базой данных стала отдельная вкладка в Google таблице :)

На каждый тип данных (записи на занятия, абонементы, платежи и т. д.) сделал отдельную таблицу. На этом шаге я опять уперся в ограничения Google. Как я уже сказал, хотелось поскорее закончить эту задачу, поэтому решил особо не запариваться и при выполнении скрипта выгружать сразу все данные из CRM. Google подавился… Некоторых данных было так много, что скрипт не мог завершить выгрузку за 6 минут. Пришлось переделывать.

В итоговой версии программы обновляются только новые данные, старые я не трогаю. Говоря более конкретно, если кто-то изменит информацию в CRM, которой уже год, то в отчете это не отразится, а если изменить или внести информацию, которой всего месяц, то отчет это подхватит.

Итоговая архитектура получилась такой. Четыре похожих друг на друга функции получения данных из CRM. Отличаются только тем, что работают с разными типами данных. Их задача — актуализировать информацию в таблицах.

После того как отработали эти функции, включаются функции формирования отчетов. Их тоже несколько, отличаются только тем, что формируют отчеты по разным временным срезам — неделя или месяц. Эти функции очищают прошлый отчет, считывают числа из БД, рассчитывают метрики и рисуют новый отчет. Все функции запускаются по специальному временному триггеру.


P.s. Пока рисовал картинку, нашел ошибку, некритичную, но если ее устранить, то работать программа будет в разы быстрее. Я зачем-то считываю все данные и полностью перерисовываю отчет. Для десятков тысяч строк в таблицах это еще ок, но для сотен тысяч… Google снова подавится.
P.s.(P.s.) В этой версии статьи я убрал все блоки с кодом и описанием функций. Эта информация мне кажется избыточной, но если есть желание, то ее можно найти в оригинальной статье.

Дополнительным требованием стало получение отчетности в ТГ. Представители школы попросили сделать так, чтобы в чат ТГ приходили итоги работы школы за прошлый день. По ощущениям, это была самая простая часть работы. Минут 30 потребовалось, чтобы разобраться, как отправлять данные в их чат, потом еще 30 минут я потратил на настройку уже имеющихся функций. Для всего этого пришлось сделать бота в ТГ. Он получает от Google текст с цифрами и отправляет его в чат.

Говоря про цифры. За всю работу я получил 10 000 руб. (Много или мало? Как думаете?). В итоговой версии программы около 1000 строк кода, на всю реализацию ушло 2.5 месяца. В неделю уходило часа по 4, может немного меньше. Сумму в час не хочу считать, не буду расстраиваться :)

Продолжение

Я по профессии менеджер, мне нужно много говорить, проводить встречи и всё в этом духе. В последнее время заметил, что мой голос перестал вывозить нагрузку, которая ему дается. Дыхание сбивается, голос устает и теряет силу. Решил, что нужно что-то делать.

Нашел тренировки на дыхание, голос, артикуляцию и т. п. и начал их выполнять. Через неделю понял, что скучно смотреть одни и те же видео каждый день. В этот момент пришла идея, на основе проделанной мной ранее работы можно сделать бота-рассыльщика сообщений. Загружу в него упражнения, пусть он случайным образом мне их отправляет.

Когда эта часть была настроена, мне пришла следующая мысль: «А если я захочу масштабировать это решение, то есть добавить новых пользователей, я смогу это сделать?». Я не хотел арендовать или покупать сервер, мне просто было интересно провести эксперимент, сделать своего рода MVP. И… Apps Script позволяет это сделать.

Я сделал WebHook и теперь могу получать сообщения от пользователей своего бота, а значит, регистрировать их, по их запросу активировать и блокировать для них рассылку и много-много чего еще.

Сейчас бот находится на стадии очень сырого MVP, но он работает. Если интересно, то могу дать ссылку для теста, для этого напишите в лс. Функционал у него правда скудный.

Бойтесь своих желаний

Навыки и опыт получил, реальную задачу сделал и даже деньги заработал. Всё как хотел, но есть какие-то смешанные чувства.

С одной стороны, я потратил много времени на общение с заказчиком, написание и переписывание скрипта, да и с материальной точки зрения затея точно не окупилась.

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

Если у вас есть идеи для совместных проектов, пишите. Связаться со мной и узнать больше про меня можно в ТГ. Удачи и хорошего дня!

Откомментируйте первым 👇

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб