Heritage's own AI-native CRM instead of AmoCRM: a pipeline over chats and two-way sync with MoySklad
A leather-goods brand replaced AmoCRM with its own CRM: a pipeline over chats from every messenger and two-way sync with MoySklad. Saves 300k+ ₽/year.
Heritage is a brand of premium handmade leather goods: belts, wallets, bags, accessories, with its own production. The brand has been around since 2016. Sales ran in AmoCRM from 2018, but it turned out to be expensive and inconvenient and didn't solve the main tasks. I built Heritage its own CRM, where the sales team works end to end, while MoySklad stays the inventory system of record.
The short version
I built Heritage its own AI-native CRM instead of AmoCRM, with AI agents (Claude Code) and custom development. It has a deal pipeline over chats from every messenger, two-way sync with MoySklad (an order is created and fully edited right from the CRM card and written back to accounting), revenue by incoming payments that matches the finance report exactly, and a daily report in Telegram.
The system is in production, and the sales team works in it every day. More than 36,000 clients, 14,800 orders and 14,000 payments were migrated. Dropping AmoCRM and its paid stack already means hundreds of thousands of rubles saved per year.
But the system is designed to be broader. The main goal, the reason for all of this, is an AI agent that knows the company's context, helps run sales, reply, and suggest ideas. It's still in development, while the CRM itself is already fully in use.
The problem: expensive AmoCRM and a blind MoySklad
AmoCRM wasn't only a subscription of around 150 thousand a year. A paid stack grew around it: about 20 thousand a year for the MoySklad integration, about 14 thousand a month for messenger integrations, separate apps that just copied deals over. On top of that AmoCRM charges for API requests, so any in-house customization got expensive.
And it was simply inconvenient. Anyone who has worked in AmoCRM knows: a heavy interface, and not even a basic filter of clients by number of deals. Moving to another ready-made CRM would mean paid subscriptions again and, again, a system not built for us.
MoySklad, which we moved to as the accounting system, has no pipeline: deals are created straight as "customer orders", without stages like "new lead, consultation, awaiting payment, closed". That's the root cause of the pain: leads were lost, there was no work with the database or upsells, and the owner had no visibility.
At the same time the bottleneck of the business isn't conversion, which is high, but the volume of leads and work with the base: repeat sales and LTV. That's exactly where we wanted to point the system.
Why custom, not off-the-shelf
I looked at three paths and weighed each honestly.
- A pipeline inside MoySklad. Didn't fit: a lead before an order has no entity of its own in MoySklad, which would mean junk empty orders, broken shipment reports, and nowhere to store context for future AI.
- A ready-made CRM. Didn't fit: a step back to what we left behind, another subscription, someone else's unmanageable layer and vendor lock-in.
- A custom CRM layer, with MoySklad as the accounting system. I chose this. Maximum control, our own stack without a new subscription, and a place to store company context.
The principle came out simple: MoySklad is the source of truth for counterparties, orders and money, while the pipeline, client card, analytics and dashboard live in our own product. We write to accounting only when a lead has matured into an order, so we don't clutter the reports.
What already works
Everything below is in production and in the team's daily work.
- A deal pipeline over chats. Incoming messages from every messenger (Telegram, WhatsApp, Instagram, Avito, VK, email) come into a single inbox, with a pipeline over them. Two zones: sales, where the manager moves the lead's stages, and production, where statuses come from MoySklad and simply reflect the order's movement. The manager sees where the order is without opening MoySklad.
- A detailed order card. A MoySklad order is edited right in the CRM: line items (quantity, price, discount, add or remove a product from the catalog), fields, status, date. The "Edit, Save" button writes it all back to accounting in one action. There's also an internal note on the deal that stays in the CRM only and never goes to MoySklad.
- Chats. A single inbox: read and reply, send files, open the conversation right from the deal card.
- Client card. LTV, average check, order history, tags by category and certificates.
- Revenue and overview. Revenue is calculated from incoming payments and matches the finance report exactly. The overview screen shows the monthly plan, the pace, manager shifts and conversion.
- Daily revenue report. A Telegram bot sends the team a report at 21:00 with a breakdown by payment method, exactly as it used to be done by hand.
- Notifications. Counters, pop-ups and sound for new messages and orders from the site.
- Admin panel. Certificates, history of deleted deals with restore, a sales plan editor.



How it's built
The dashboard's front and back are on Next.js 15 and React 19, the database is PostgreSQL (with pgvector for future knowledge search) and Drizzle, all in Docker Compose on a dedicated Hetzner server, with HTTPS handled automatically by Caddy. Sync with MoySklad is automatic and instant: changes are picked up in real time.
The two-way link in a nutshell: from MoySklad we read orders, counterparties, payments, statuses and the assortment, and we write back the creation and editing of an order, its fields and statuses. An incoming payment is created automatically only when the order moves to the status "New order for production", meaning on the fact of payment. The order itself can be created back at the consultation: money and production are different events.
And one engineering lesson that captures the essence of two-way integration well. Production tasks in MoySklad are created by MoySklad's own scenario, not by the CRM. When those tasks suddenly started duplicating, the cause turned out to be not in the CRM but in the scenario's condition on the MoySklad side. When two systems are linked, it's critical to draw the exact line of who creates which document.
What's next
The product is designed to be broader than a CRM, as an AI-native sales system that builds itself out through knowledge and tools, all under a human's approval. To be honest: this isn't in production yet, it's the roadmap.
- A lifecycle engine for LTV-driven touches: reactivation, birthdays and anniversaries, pre-orders, all as drafts for the manager rather than auto-replies.
- An AI assistant as a copilot: on an incoming message the agent gathers context (client card, purchase history, conversation, knowledge base, brand voice) and prepares a draft reply, which the manager approves or edits.
- Self-learning and a narrow autopilot on already-approved templates, personalized offers.
- Analytics by channel and by the effect of touches.
- Finance integration: we'll link the CRM with PlanFact and with Heritage's finance agent, so that sales and money live in one loop.
Again, so there's no confusion: there are no auto-replies to clients, no autopilot and no campaigns right now. What's in production today is the CRM core, the two-way sync and the reporting. Honesty here is part of the case's value.
The result
The outcome is a custom system for a specific business at a fraction of the cost of a ready-made one. It closed a pain that neither AmoCRM nor MoySklad solved, matches the accounting 1-to-1, and grows with the company's needs. And the part I especially like: it's refined in dialogue with the people who work in it every day, the head of sales and the managers. I shipped their fixes in batches, and the product got better exactly where hands feel it.
If your ready-made CRM is expensive and not yours, and your accounting system can't see leads or a pipeline, a system like this can be built around your processes and linked to your accounting. Write to me on Telegram or leave a request. Tell me where clients and money are getting lost right now, and I'll tell you honestly what's worth building.
Stack
FAQ
- Why build your own CRM instead of taking a ready-made one?
- A ready-made CRM is a step back to what we left behind: another subscription, someone else's unmanageable layer, and vendor lock-in. And no boxed product knows the context of this specific business. A custom system gave maximum control, our own stack without a new subscription, and a place to store company context for future AI. MoySklad stayed the system of record.
- Isn't building your own CRM more expensive than a ready-made one?
- AmoCRM cost around 150 thousand rubles a year and didn't solve the tasks. I built our own system with AI agents (Claude Code) and custom development, and it runs on an inexpensive server. A one-time build instead of an endless subscription, and the system belongs to the business rather than being rented.
- Does the agent answer clients on its own?
- Not yet, and it's important to say that honestly. What's in production now is the CRM core: the pipeline, the order card, chats, two-way sync with MoySklad, revenue and reports. An AI assistant that drafts replies, autopilot and campaigns are on the roadmap, not the current product. Everything that ships will run with a human's approval.
- How does two-way sync avoid duplicating data in the accounting system?
- Writes to MoySklad are driven only by meaningful events, not by constant syncing. An order can be created back at the consultation stage, but an incoming payment is created strictly when it moves to the status "New order for production" (meaning paid), with protection against duplication. And production tasks in MoySklad are created by MoySklad's own scenario, not by the CRM. We drew the "who creates what" line explicitly.
- Will this work if I use another system, not MoySklad?
- The logic itself transfers. MoySklad is a convenient example here with a good API. If your accounting system has an API, you can build the same layer: your own pipeline and client card on top, while money and orders stay in the accounting system, which the CRM writes to only on clear events.
- Isn't it risky to run your own software for live data and money?
- That's exactly why revenue in the CRM is calculated from incoming payments and matches an independent finance report 1-to-1, a built-in correctness check. The source of truth for money and orders stays in MoySklad, and deleting a deal sends it to MoySklad's trash, so it's reversible.
Want to automate something in your business?
Tell me what you're sick of doing by hand. 30 minutes for a brief, then a concrete offer or an honest no if it's not my kind of task.