111 dairy SKUs online with stock levels that are never more than 15 minutes old
A regional distributor of a dairy brand needed a storefront that shows what is actually in the warehouse. No shop platform fitted the price list and the two languages, so we built one that reads MoySklad on a schedule and only writes what changed.
Results
Figures are from the build log and the first nine days of search data after launch. Sales figures belong to the distributor and are not published.
| Metric | Before | After |
|---|---|---|
| Stock freshness on the site | price list by phone | every 15 minutes |
| Product pages | 0 | 222 bilingual pages + shopping feed |
| Price and stock mismatches (audit) | — | 0 discrepancies |
| Homepage weight | — | 15.6 KB gzipped, 0 render-blocking files |
| Storage operations per month | ≈5 300 (redundant writes) | within the 2 000 quota — write only on change |
| First 9 days in search | — | 499 impressions, position ≈10, 79% Kazakhstan, 89% mobile |
The challenge
- Stock that customers could trust
Buyers ordered items that were out of stock and skipped items that had just arrived. The truth was in MoySklad; the website did not know.
- Two languages, one catalogue
Every product, category and page needed Russian and Kazakh without doubling the editing work.
- No product photos
Most items existed only as pages in a 21-page PDF catalogue from the producer.
- Cheap hosting, strict quotas
The chosen data layer allowed 2 000 storage operations a month. Naive syncing burned through 75% of that in days.
What we built
Stock every 15 minutes, catalogue and prices about every two hours, within a 05:00–23:00 window.
Three layers of change detection — in memory, stable serialisation before publishing, and a raw-data skip — cut writes from about 5 300 a month to within quota.
Availability and price markup is generated on the page from the live data layer, so search engines and the shopping platform never see a stale figure.
Product photos are cropped from the catalogue pages, then auto-cropped and rescaled so new photos match the rest of the grid.
Manual price overrides, hide/delete flags and promo codes sit in an admin panel above the base catalogue, so the distributor stays in control without touching the sync.
222 bilingual product pages, corrected category codes against the official taxonomy, a product feed, and a content section of 110 topics.
How it went live
Catalogue and storefront
111 SKUs in 9 categories, bilingual, product images extracted from the PDF catalogue.
22 July 2026Live inventory
MoySklad sync added the next day; domain, analytics and search groundwork finished within the week.
23 – 28 July 2026Quota incident and fixes
A storage-quota alert on 2 August led to change-only writes; structured data and category codes corrected on 6 – 7 August.
2 – 7 August 2026Honest limits
The distributor chooses to hide 76 of 112 items, so the public assortment is smaller than the catalogue. Early prices were illustrative until live pricing arrived. There are no customer reviews yet, so rating markup is left empty rather than invented. Several content topics get impressions but few clicks — the snippets need rewriting, not more pages. Delivery covers one city, which the shopping platform cannot target, so it is stated in the page text.
Frequently asked questions
Why not Shopify or a marketplace?
The price list had B2B tiers, two languages and a warehouse system already in use. A platform would have meant a second catalogue to maintain. Here MoySklad stays the single source and the site follows it.
Can customers order on the site?
The storefront shows live availability and prices; order capture into MoySklad is the next stream and is described on the orders-to-ERP solution page.
How do you keep stock accurate without hammering the API?
By reading on a schedule and writing only when something changed. Three layers of change detection keep storage operations within quota while stock stays within 15 minutes of the warehouse.
Does it work with 1C instead of MoySklad?
Yes. 1C exposes stock and catalogue through OData or HTTP services; the read-diff-publish pattern is the same.
What did search look like after launch?
499 impressions and an average position around 10 in the first nine days, 79% from Kazakhstan and 89% on mobile. Clicks were low, which points at snippet wording — the next thing to fix.
Similar stream in your business?
Tell us which documents or requests eat the hours. Free audit, fixed pilot price, no commitment.
Get a free automation audit