Building a business based on the concept of free classified ads is a highly profitable investment, proven by the decades-long success of such market giants as «Iz Ruk v Ruki» (From Hand to Hand) or «Avito».
A market participant urgently needing to sell their product or service is willing to pay a relatively modest amount to achieve a quick and optimal result: attracting customers through ads posted on the website. Offering exclusive services — such as placing an ad in the highest available position among similar listings — benefits both the seller and the website owner: the seller moves their product or service, while the site owner earns revenue from the provided services.
How much does it cost to build a classified ads website?
There is no single answer to this question. In theory, you can download a ready-made classifieds website (as open-source software) and install it on your hosting account — this is what 99% of those wishing to launch their own «board» do. The result is yet another faceless website nobody needs, which with 99% probability will cease to exist after a while due to lack of demand and user interest, because it will be virtually identical to other websites built on the very same «engine». But if you want a product that does not look like the other resources in this niche, then:
- Hiring programmers to develop a classifieds board «from scratch» will cost you 250—300 thousand RUB in monthly salary for just one developer.
- When it comes to classifieds websites like «Avito», their development and maintenance costs approach truly astronomical figures.
A solution based on the adverts.am software platform
If you are considering purchasing a classifieds board «engine» and looking for where to buy or order a turnkey classifieds website, we can help you with that: we offer a solution based on our software platform that powers adverts.am. Here are the key technical specifications of our solution:
- The software platform is not OpenSource — the source code is not available to anyone; development was done entirely in-house. Consequently, the functionality and design of the site are unique in their own way.
- The software platform is written on the PHP 8.4+ / MySQL / Memcached stack, following the MVC methodology with an implementation of the Data Mapper pattern (a clear separation between business logic and the data access layer).
- An in-house framework, Krugozor Framework, and in-house libraries; the only third-party packages are three small utilities (site map, URL transliteration, emoji removal). The project does not depend on someone else’s framework or its release schedule.
- Strict typing throughout the codebase — a whole class of errors is filtered out at the development stage rather than on the live site.
- A proprietary database library — complete protection against SQL injections, one of the most common types of attacks on websites.
- Valid HTML markup, separated from the business logic of the program code.
- An administration panel with access rights separated by user groups — more on its capabilities below.
- High-quality, transparent program code, divided into domain objects and data sources.
- Over 100 ready-made thematic categories; the category tree is freely configurable through the administration panel for any niche.
- Modular code structure: 20 ready-made modules — ads, users, categories, authorization, payments, mailings, articles, videos, captcha and others.
- More than 4,200 automated tests: the main suite checks a change in a matter of seconds (more on this below).
- Detailed technical documentation included: more than 60 reference documents and step-by-step guides — architecture, data layer, caching, templates, validation, deployment, multilingual support, SEO, payments, personal data and other aspects.
Out-of-the-box functionality
This is not just a skeleton for a classifieds board, but a finished product proven in real-world operation on commercial projects. The package includes:
- Multilingual support — 6 interface languages (Russian, English, Armenian, Kazakh, Georgian, Serbian) with URL prefixes (for example,
/en/,/hy/). Adding a new language is a routine task with a ready-made step-by-step guide. - Multi-domain support — a single software platform serves several websites (currently — adverts.am), each with its own set of categories, templates, texts and business logic, on a shared codebase. Launching one more website — from DNS and the server to connecting the domain in the engine — is described in a step-by-step guide.
- Multi-country support — a built-in hierarchical tree of territories (country → region → city), ad filtering at any level, cascading location selection without reloading the page. Ready-made territory directories for Russia, Armenia, Kazakhstan, Georgia and eight more neighboring countries — 12 countries, 585 regions and more than 15,900 cities in total.
- Anonymous ad posting with automatic linking to an account after registration — lowering the entry barrier for new users.
- E-mail confirmation, sign-in using an e-mail address and password recovery out of the box.
- Prices in 11 currencies — the Russian ruble, US dollar, euro, Armenian dram, tenge, lari, Belarusian ruble, hryvnia, Azerbaijani manat, Kyrgyz som and Serbian dinar; the default currency is chosen by the interface language. A new currency is added following a ready-made guide.
- Image upload with automatic generation of thumbnails in the required sizes; files abandoned during posting or left without an ad are cleaned up by background jobs.
- Protected seller contacts — the phone number, e-mail and Telegram are revealed on click by a separate request with a verification signature, and the web server limits how often such requests can be made: harvesting contacts with a bot becomes pointlessly slow.
- Free ad bumping — the owner raises their ad in the listing right from their personal account, with a limit on how often it can be done.
- Similar ads on the ad page keep visitors on the site.
- Ad archive — the owner moves an outdated ad to the archive and can bring it back when needed. The archive logic is tailored to a specific site: on one of the live domains the archive is shown publicly as a feed of stories. Outdated ads from unregistered authors are deleted automatically.
- Automatic profanity filtering in ad texts.
- Mail queue — e-mails are sent in the background and do not slow the site down; e-mail templates are translated into all supported languages.
- Content sections — multilingual articles with full-text search and a short-video feed with infinite scrolling and muted autoplay: ready-made tools for attracting search traffic and retaining the audience, fully managed from the administration panel.
Moderation and abuse protection
- Content moderation by a language model — every ad is checked automatically for prohibited content: weapons, drugs, adult goods and services, legal violations and other groups. A violating ad is taken down until the administrator decides otherwise, and its author receives an e-mail stating the reason. The decision is made by two independent calls to the model — a batch screening and a confirming call for that single ad — so a one-off mistake never reaches the blocking stage; a failure or outage of the service does not take an ad down. User text is passed to the model inside random boundaries, so «instructions» hidden in an ad do not affect the verdict. Editing an ad automatically sends it for re-checking. The model is connected via an API (DeepSeek by default); the service address and the model are set in the configuration.
- A moderation section in the administration panel — blocked ads, ads moved to another section and ads that could not be checked are collected in a separate list with filters; each row shows the violation group and the model’s reasoning, and a block is lifted in one action. The log keeps every call to the model together with its estimated cost — checking expenses are visible by day and by ad.
- Automatic catalog section matching — an ad submitted to the wrong section is moved to the appropriate section by the language model, and the author is notified by e-mail. A section chosen by the owner manually is never questioned again: the last word stays with the human.
- Protection against bots and brute force — a proprietary CAPTCHA; an IP address blacklist with blocking of entire subnets and quick blocking right from the administration panel; request rate limiting at the web server level: password brute-forcing on the login, registration and password recovery forms, aggressive crawlers and request floods are cut off before they even reach PHP.
- Security at the code and server level — parameterized SQL queries, cookies with the httpOnly flag, security headers (HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy), and blocked direct access to the configuration, logs, source code and service directories.
- A flexible data validation system (e-mail, phone, URL, string length, ranges, etc.) — everything users enter is checked before being written to the database.
Monetization
- Paid services — the «Highlight ad» (VIP) service: the ad card is highlighted and raised in listings for a set period. The price and duration are set in the settings, expired statuses are removed automatically, and the payment architecture is designed for several kinds of services.
- Selling at the right moment — the service is offered in a pop-up window, promo links, the notification after an ad is published and e-mails to the author.
- Payment acceptance — ready-made integration with the Prodamus payment service: signed payment notifications, automatic activation of the service and an e-mail to the author.
- Advertising — a ready-made connection to the Yandex Advertising Network; ads are enabled in the settings and start only after the visitor consents to cookies.
- Analytics — Yandex Metrica counters for each domain and a ready-made goals mechanism for tracking visitor actions.
SEO and speed
- Schema.org markup on all key pages: breadcrumbs, lists, the ad card as a product with a price, videos; site and organization details in JSON-LD; Open Graph markup for social networks and messengers.
- Language versions for search engines — every page links to all of its language versions (hreflang), and each language has its own URL.
- Site maps for each language are generated daily; empty territory pages and archived ads are left out of them.
- Canonical URLs and 301 redirects to them — the same page is not indexed under different addresses.
- Human-readable URLs for catalog sections, territories and articles.
- Grammatically correct titles — city and region names are stored in three grammatical cases, so titles and breadcrumbs in Russian follow the rules of the language («… в Москве»), while in other languages they use a uniform neutral format.
- Memcached caching in all hot spots (mappers, category lists, territory counters) — the site withstands high load without vertical scaling.
- Ad counters by section and territory are maintained by SQL triggers in the database itself: the numbers are updated instantly, and catalog pages do not recount ads on every view.
- Fast static delivery — a page’s CSS files are combined into a single minified file and cached; static resources, articles and videos are served with conditional caching (a 304 Not Modified response).
Personal data and legal matters
- A ready-made set of legal documents — personal data processing policy, public offer, user agreement, consents to the processing and dissemination of personal data, the procedure for handling claims from rights holders, a cookie consent banner.
- Account deletion under the personal data law (152-FZ) — a complete cycle at the user’s request: a deletion request that can be cancelled, destruction or anonymization of the data, and a printable destruction statement with a log extract in accordance with Roskomnadzor requirements.
- Consent log — every consent to personal data processing is recorded together with the version of the document it was given to; withdrawal of consent is supported.
- Data retention periods are enforced automatically: background jobs destroy sent e-mails after 30 days, and support requests once the period stated in the policy has expired.
Feedback and customer support
- Requests with correspondence — a visitor writes via the contact form, receives a confirmation e-mail and continues the correspondence on the page of their request via a protected link; the administrator replies from the administration panel, and the reply arrives by e-mail.
- Attachments to requests are stored outside public access and can only be opened via the request link.
- Rights holder claims — a separate type of request with the applicant details required by Article 15.7 of Federal Law 149-FZ.
- A CAPTCHA on the form cuts off spam, and the correspondence is destroyed automatically when the retention period expires.
Administration panel
The site is managed from the administration panel, without working with the database directly:
- Ads — a list with filters and sorting, editing and bulk operations with an automatic e-mail to the owners.
- Moderation — ads blocked and moved by the language model, with the reasoning behind each decision.
- Users — accounts and the account deletion log with statement printing.
- Catalog — a tree of sections with editing, deletion and moving of entire branches.
- Territories — countries, regions and cities.
- Articles and videos — with translations into all of the site’s languages.
- Support requests and replies to them.
- IP address blacklist, including subnets.
- Groups and access rights — for each section of the panel you specify which user groups it is open to.
- Mail — the e-mail queue and a deliverability check via the mail-tester.com service.
Ready-made deployment infrastructure
The package includes a complete Docker configuration for dev and prod environments — a working copy of the site can be brought up on a new server in a matter of minutes:
- Separate containers for PHP-FPM, nginx, MySQL, Memcached, cron and postfix — deployment with a single command.
- HTTPS out of the box: a free Let’s Encrypt certificate is issued by a single script and renewed automatically.
- Configured e-mail delivery: Postfix with DKIM signing, SPF, DMARC and PTR records — so that the site’s e-mails reach their recipients rather than the spam folder.
- 18 scheduled background jobs: sending e-mails, checking ads with the language model, removing expired VIP statuses, generating site maps, recalculating catalog statistics, executing account deletion requests, cleaning up abandoned images and outdated data, log rotation and a daily database backup.
- Error reports: a failure on the site or in a background job is reported to the administrator by e-mail.
- A unified configuration format for the test and production environments.
- Detailed guides on deployment and day-to-day maintenance are included, including checking the site after a release with a single command and launching a new site from scratch.
Reliability: more than 4,200 automated tests
The software platform is covered by automated tests: an error is caught before the code is deployed to the server, not by a user complaint.
- The fast suite — more than 2,800 tests of business logic, models, validators and services; it runs in a few seconds and does not require a database.
- The live database suite — more than 1,400 tests: SQL queries, controllers, rendering of pages and e-mails, SQL triggers and stored procedures, background jobs and HTTP responses of the running site.
- «Guard» tests watch over the tests themselves: a new class without a test will not go unnoticed, and the fast suite does not access the database or the network.
LLM-friendly code (AI-assistant friendly)
Separately, let us highlight a feature that matters in 2026: modern AI assistants (Claude Code, Codex, GitHub Copilot, ChatGPT and the like) do an excellent job of maintaining and evolving this code — unlike typical legacy PHP projects, where an LLM gets lost in framework «magic», implicit dependencies and non-standard conventions.
Why it works:
- Instructions for AI agents (the
AGENTS.mdandCLAUDE.mdfiles) and a library of more than 60 reference documents for each subsystem — the assistant finds its bearings in the project right away, without manual explanations. - Ready-made setup for Claude Code and Codex — 14 topical rules are applied according to the files the agent is working with; 12 hooks automatically check syntax, run the tests after every change and prevent the agent from changing the database schema without a migration.
- 12 step-by-step procedures (skills): add a language, a currency, a domain, an administration panel section, a validator; audit the tests, administration panel tables, legal documents, production server logs and more.
- 6 checker subagents: they verify translation completeness, documentation formatting, list services, administration panel tables and database indexes, and one of them reviews the automation setup itself.
- A uniform module architecture — all modules are structured identically. Having understood the structure of one module once, an LLM confidently edits any other.
- Strict typing and detailed method signatures — the assistant does not guess types but «sees» the contract, which radically reduces the number of «trial-and-error» edits.
- No «magic» — the behavior of the code is easy to trace from the entry point to the final database query, with no hidden dependencies or code generation.
- A single documented naming style for files, tables, styles and text constants — an LLM generates code in the project's style without additional hints.
- Verifiable changes — more than 4,200 automated tests and self-diagnostic scripts (for example, an automatic completeness check of the translations across all languages): the assistant runs the checks itself after making edits and sees the result.
- A reference guide for every key feature — a separate document describing how it works and where its boundaries are. An LLM uses it as a ready-made instruction when making improvements and implementing similar tasks.
What this gives the site owner in practice:
- Most edits and small features can be done with the help of an AI assistant in minutes rather than hours.
- Dependence on expensive senior PHP developers decreases — a mid-level developer working with an LLM can handle routine tasks.
- Adding a new language, a new section or a new paid service, translating a template — routine tasks that an LLM performs following the ready-made guides.
- The total cost of owning and developing the project is several times lower than that of a typical classifieds board on a heavy framework with a large number of dependencies and complex infrastructure.
Price and terms
- The price of the current version of the solution — 4,500,000 RUB.
- The solution is sold «as is».
Contact information
To get in touch, use the contact form.