
Qeymatnameh — Tiered Price Lists for Wholesalers
Wholesalers in Iran usually keep prices in a spreadsheet and send customers a fresh PDF every time something changes, with a different price for retail shops, trade partners and special accounts. Qeymatnameh keeps only the buy price of each product; every customer tier has its own margin rule, and the sell prices for all tiers are calculated from it. Before publishing, the wholesaler sees what changed since the last list and which items would sell below cost, then posts a branded list to their channels with one confirmation. Customers open a mini app from the wholesaler's bot, see only the price of their own tier and send an inquiry or a purchase request.
// Architecture
A multi-tenant FastAPI backend on PostgreSQL with SQLAlchemy and Alembic, an aiogram bot for customer sign-up, and a Next.js app that serves the public site, the wholesaler panel and the Telegram mini app. Sell prices are never stored: a small pure pricing module computes them with Decimal from the buy price, the tier rule and any per-product override, and is covered by unit tests; only the snapshot at publish or request time is saved. Lists are rendered server-side with Pillow as right-to-left PNG pages and a PDF, and a scheduler handles the daily auto-publish and reminds the owner when the list has gone two days without an update.
// Key capabilities
One buy price, every tier
Each tier has a percent or fixed margin and a rounding step (to 500, 1,000 or 5,000 toman); a per-product override can replace it with its own percent, amount or absolute price.
Reprice when the dollar moves
Record a reference rate, change buy prices by percent or amount for all products, a category, a brand or a hand-picked set, review the before and after with a threshold warning, apply, and undo the last batch if needed.
Publish to three messengers
The same branded list goes to Telegram, Bale and Eitaa channels through the wholesaler's own bot, by hand or at a set time each day, and every post is logged.
Prices only for the right customer
A customer who isn't approved or has no tier sees the catalogue without prices; an approved one can build a cart, and the purchase request reaches the wholesaler with the prices frozen at that moment.
// Technology stack
- Python / FastAPI
- PostgreSQL
- Next.js
- aiogram
- Telegram Mini App
- Docker
// Next step
Need something like Qeymatnameh — Tiered Price Lists for Wholesalers?
Tell us what you're building. We'll reply with how we'd approach it, a rough timeline and the first step.
Start a similar project


