Work
We cannot name clients — the contracts do not allow it. So instead of logos, here are the problems themselves: what people came with and what we built. The most interesting ones are taken apart in the blog, down to the code.
Enquiries and sales
Enquiries land in five chats and never reach the CRM
Bots on Telegram, Instagram Direct and WhatsApp create the contact and the deal themselves and assign an owner. The phone number typed in the chat ends up on the card. A message that arrives overnight is in a manager’s queue by morning — no enquiry depends on someone re-reading every chat.
Telegram · Instagram Direct · WhatsApp → CRMThe booking is in the calendar, the CRM is empty
Calendar bookings become deals on their own: a client books — a deal appears in the right pipeline; they reschedule — it updates; they cancel — the deal knows. Rebookings by the same person do not spawn duplicates.
calendar → CRM · no duplicatesA website enquiry never becomes a task
A form on the site becomes a task in the tracker straight away, with the contact details and the client’s own message already in the fields. If someone corrects a detail or the enquiry changes status, we update that same task instead of opening a second one. Managers stay in the tracker and retype nothing.
forms → task tracker · one task per enquiryBots
You need a bot, and the builders can’t handle your flow
We write the bot to your spec instead of assembling it from ready-made blocks: a catalogue that updates itself from channel posts, plain-text search, filters that show how many options are left at every step, a cart, and an order that lands with a manager or in the CRM. The logic lives in code with a change history, so the next tweak is not a rebuild.
Telegram · own backend · logic as codeThe course link got forwarded to someone who never paid
Before serving content, the bot checks the user against payment status in the database. Not paid — no entry, even with a forwarded link. Paid content stops circulating for free.
payment check · gated bot contentSupport answers the same questions every day
A bot replies from your knowledge base around the clock and hands anything unusual to a manager with the whole conversation attached. Every dialogue exports in a usable format — for quality control, team training or analysis.
knowledge base · the unusual goes to a person · chat exportMarketing and analytics
Ads are running, but nobody knows which ones bring money
Payments from the CRM arrive in the ad platforms through the Conversions API. Ads learn from money rather than clicks, and every payment shows its channel. We have wired several ad accounts to one source of truth.
Meta Conversions API · GA4 · Google AdsLeads from ads reach the CRM without their tags
A lead-form enquiry passes through the bot and lands in the CRM together with its ad tags — campaign, ad, click id. Those tags then travel with the deal all the way to payment, so attribution adds up instead of breaking at step one.
lead forms → bot → CRM · click ids and campaignsData everywhere, the full picture nowhere
We pull ads, CRM and payments into one database and build a dashboard for your process: fresh numbers every morning, period comparisons, and access for people who need to see it without access to the raw data. We started such projects on Google Sheets — and wrote up honestly where Sheets stops being enough.
Read the write-up →own backend · Postgres · dashboardsData hygiene
The same customer is in the database three times
We find and merge duplicate contacts and deals: comments, tasks, files and amounts move into one card, and the history survives. A duplicate with a payment is never deleted until the payment is moved. Works in any system with an API.
Read the write-up →contact and deal deduplication · CRMA bulk operation wiped half the database
We bring mass-deleted data back — from logs, backups and exports, with record counts verified before and after. Then we close the door that let it happen: permissions on bulk actions, and a segment export before every one of them.
Read the write-up →data recovery · reconciliationThe report shows growth that isn’t there
Subscriber growth is counted by the date a contact joined a list — so a person moved between lists is counted again. Customers in a report are grouped by name and phone — so one person becomes three. We recount by the contact’s first appearance in the account and by email as the key: the numbers change several times over, but they finally match reality.
Read the write-up: subscriber growth → · customer identifier →database analytics · SQL · method checkEducation and access
Paid for the course — now waiting for access
After payment, course and bot access opens by itself; after a refund it closes. We track the state of the subscription, not a one-off event: renewed — everything keeps working; lapsed — access closes without a support thread.
LMS · payment webhooks · status-driven accessCertificates and invoices the system “can’t do” itself
We generate personal documents on an event — a payment, a completed course, a status change — and deliver them to the customer by email or messenger. Names, dates and numbers come from the database; the template is yours.
PDF generation · event triggersThe platform can’t do the one thing you actually need
We embed custom widgets right into the site or the learning platform: support, homework, progress, intake forms. To the user it is a native part of the product, not a third-party service in a new tab.
custom widgets · site and LMSProcesses and email
Half the day goes to moving data between services
We wire CRM, mailing, task trackers, email and calendars into one process: an event in one system triggers the actions in the rest. The scenarios live as code in a repository, so a fix is made once and never lost.
Read the write-up →n8n · webhooks · any APIImportant things arrive by email and stay there
Triggers on incoming mail: attachments are filed where they belong, audio is transcribed to text, and the data from the letter lands in the CRM or a task. The inbox stops being the place where enquiries get lost.
mail triggers · attachments and audioThe CRM lacks the small things you need daily
We add the actions the box does not have: a deal moves between pipelines on a comment, an email goes out on a status, fields fill themselves on an event. The CRM starts working the way your process works, not the other way round.
custom actions · triggers · automatic emailsCustom systems and maintenance
The customer asks the bot for a balance that lives in a spreadsheet
A customer portal on a shared database: the site, the bot and support see the same purchases, balance and promo codes. A refund or a credit is one click in the admin panel, not a thread between three people.
web portal · shared database · botMoving to a new platform means risking the data
We move databases, chats and automations completely — off an old CRM, out of spreadsheets, from Make to n8n — with record counts verified before and after. Old and new run side by side until nothing is missing.
migrations · data reconciliation · no downtimeYou learn an automation broke from your customers
Every failed run lands in Telegram right away — with what exactly failed and on which record, not “something is off”. Scenarios are backed up to a repository, so any version can be restored in a minute. Tokens stay out of the nodes, so they never leak into backups.
Telegram alerts · scenario backups · no keys in nodesDescribe your situation
Tell us which process eats the most time. We will write back with what can be automated and roughly what it would cost.
Discuss a project