Sari la conținut
megapromotingHai să discutăm
Produse Index9

Analiză de piață și anunțuri Platformă

Your listings, in the context of the market.

Index9 is a tool for people who sell on 999.md: analysis by category, evaluation of listings, and preparation of publishing or reposting actions. The available data and the recommendations have to be read together with their source and their period.

Index9: tabloul de bord cu numărul de anunțuri observate, categoriile urmărite și harta de semnale pe categorii
index9.site · aggregated over public listings, with the moment of the last read shown on every block

Index9

From information to work done.

01

You choose the context

The category, the listing, and the account you have the right to use.

02

Analizezi

You compare the available information about the market and about visibility.

03

Decizi

You review the proposed changes before publishing or automating.

Where it earns its place.

Imobiliare

Exploring the market and improving the way an offer is presented.

Active sellers

Organising the analysis and the publishing work.

Echipe

A starting point for assessing a portfolio of listings.

Index9 is a MEGA product, separate from 999.md. The availability of each function is confirmed inside the platform; the recommendations do not guarantee a sale.

Index9 in detail

What you can do with this project.

Index9 is built on top of 999.md, the largest classifieds marketplace in Moldova, and it answers two different questions. The first: what a flat is worth, compared with what is actually selling right now in the same district. The second: which way the market is moving in each category, day by day.

The data comes from two places, under two different regimes. Public listings and statistics are read through the public GraphQL API of 999.md, without authentication, with an agent that identifies itself by name and 1.5 seconds between requests. Operations on a user's own listings go through the platform's official partner API, with the account's key.

The founding rule of the valuation engine is written into the code as a principle: never a fabricated figure. Below three comparables it returns no estimate at all, but the state "unavailable". Between three and eight it returns one labelled "thin data", with low confidence. A valuer that always produces a number is more convenient and less useful.

01

A daily index, per category and overall

An index with a base of 100 and bounds of 0–200, computed from four components normalised into the [-1, +1] range: the velocity of listing volume, the change in the median price, the demand signal and a macro layer. The formula is explicit in the code: 100 + 50 × the mean of the four. The overall index is the mean weighted by each category's volume of active listings.

02

Market statistics on a clean segment

For property, the median €/m² is computed per segment — category × district × offer type (sale or rent) — not on a category average that would mix flats with commercial premises and sales with rentals. Every figure comes with the number of observations, the 25th and 75th quartiles, the dispersion as a percentage of the median, the freshness in days and a confidence level.

03

Comparables weighted by similarity

A listing being valued is compared against up to 200 comparables from the last 365 days, filtered by category, subcategory, offer type and, optionally, district. Similarity is computed on every variable available — floor area, storey, rooms, condition, area — with no invented coefficients per variable: a variable missing on one side does not penalise, it simply does not contribute.

04

Outlier cleaning

The €/m² series within a segment is Tukey-trimmed: values lying more than 1.5 × the interquartile range outside the quartiles are removed. A flat listed by mistake at ten times the market price does not move the median.

05

Implied yield

From the two medians of the same segment — rent €/m²/month and sale price €/m² — the gross annual yield is derived. It is returned only if both medians exist and the result falls inside a plausible range; otherwise, null.

06

The real position in the list, hour by hour

The crawler saves not only which listings exist, but at which position they appear in the official listing — the first 100 per category, across two pages of 50. That makes the platform's ordering algorithm visible, and the effect of a repost or a booster measured rather than assumed.

07

Local macro layers

The official exchange rate of the National Bank of Moldova (BNM) (public XML, daily at 08:00), the weather from Open-Meteo for Chișinău (hourly) and the prices set by the national energy regulator ANRE for 95 petrol and diesel (weekly, on Mondays). They are inputs into the macro component of the index, not decoration.

Data and operation

What goes into the system. What has to be checked.

Where the listings come from
From the public GraphQL API of 999.md, at `https://999.md/graphql`. For listing we use `infiniteScrollAds`, for enriching the comparables `searchAds`. No protection is bypassed: these are public queries, with an agent that identifies itself by name and a contact address, 1.5 seconds between requests, and abandoning at 20 seconds.
What is taken straight from the platform, and what is derived
For property, 999.md exposes the price (field 2), the price per square metre (field 1385), the condition (593) and the images (14). The price per square metre is the differentiator: we do not estimate it, we read it. The floor area is derived honestly, as price divided by price per metre, and only when both values exist.
How fresh the data is
Five priority categories — property among them — are re-read hour by hour, at minute zero. The other 18 categories, every 4 hours. The category index is recomputed at minute 5 of every hour, and the daily index at 06:00. Segment statistics for property look by default at the last 120 days; the comparables for a valuation, at the last 365.
How de-duplication works
Enrichment writes a single row per listing identifier: when the same listing reappears, the row is updated and the capture date becomes now, instead of a duplicate being created. That solves the frequent case — the listing reposted dozens of times by the same seller. What it does not solve: the same flat posted under two different identifiers stays two rows. That is why the series is also trimmed statistically, and why the segment's dispersion is published beside the median: a segment with wide dispersion is a signal, not a figure to be used blindly.
The honesty thresholds, written as thresholds
Eight comparables or more → a normal result. Between three and eight → "thin data", a wide interval, low confidence. Below three → "unavailable", the estimate is null. Confidence is not an impression: it is a score built from four signals — the number of comparables, how tight the segment is (dispersion below 15% and below 30%), recency (below 30 and below 90 days) and the agreement between methods. An unknown signal earns no points.
What is public context, and what is account data
The daily index and the market statistics are computed from public information. Operations on a seller's own listings — reposting, promotion, messaging — go through the official partner API, with the client account's key, and they are separated by access: at today's check, the valuation and trend endpoints answer 401 without authentication.
Sectoare
The districts of Chișinău are assigned by nearest centroid from a list of coordinates held in the code, starting from the listing's geolocation. It is an approximate classification at the boundary between districts, not an administrative delimitation.

From exploration to deployment

How we prepare a project with Index9.

01

1. We choose the category and the segment

We start from a category and, for property, from a concrete segment: district, offer type. An answer about "property" in general mixes things that do not compare.

02

2. We start the collection and wait for it to fill

The crawler gathers positions hour by hour, and enrichment populates the attributes of the comparables. Until the segment holds at least eight comparables inside the recency window, the platform will say "thin data" or "unavailable" — and it is right to say so.

03

3. We connect the account for operations on the seller's own listings

Reposting, promotion and portfolio analysis take the API key of the client's 999.md account. Without it, what remains is the market analysis side, which needs no account.

04

4. We settle what is automated and what takes approval

Publishing, deleting, changing a price and spending budget are actions that move money or reputation. What runs on its own and what passes through a human approval is decided explicitly at installation, not by default.

Questions worth settling.

Where do you get the listings from? Do you scrape?

From the public GraphQL API of 999.md — the same queries their own site uses, without authentication and without bypassing any protection. Our agent identifies itself by name with a contact address, leaves 1.5 seconds between requests and abandons at 20 seconds. For operations on a client's listings we use the official partner API, with the client's key.

How fresh is the data?

Property is one of the five categories read hour by hour; the other 18 categories, every 4 hours. The category index is recomputed at minute 5 of every hour, the daily one at 06:00. Market statistics look by default at the last 120 days, and the comparables for a valuation at the last 365 — and every result comes with its freshness in days, so you can see whether the most recent comparable is a week old or four months old.

How do you stop the same flat, reposted ten times, from spoiling the average?

A single row is written per listing identifier: the reappearance of the same listing updates the row and the capture date, it does not create a duplicate. What stays outside is the case where the same flat is posted under two distinct identifiers — there we have no de-duplication on content. That is why the €/m² series is Tukey-trimmed (anything beyond 1.5 × the interquartile range is cut), and why the segment's dispersion is published next to the median: if the dispersion is wide, the figure has to be read with reservation, and we are the first to say so.

What happens when you do not have enough data for a segment?

You do not get a number. Below three comparables, the result is "unavailable" with the estimate null. Between three and eight, you get the result marked "thin data", with a wide interval and low confidence. Above eight it is a normal result. The thresholds are constants in the code, not a communication policy.

What does an index of 100 mean, and how is it computed?

100 is neutral. The formula is 100 + 50 × the mean of four components, each normalised into [-1, +1], with the result clamped to the 0–200 range. The components are: volume velocity (the z-score of listings per hour against the 30-day average), the change in the median price, the demand signal and a macro layer. The overall index is the mean across categories, weighted by the volume of active listings.

What goes into the macro layer?

Three public Moldovan sources: the official exchange rate of the National Bank of Moldova (BNM), taken from their daily XML; the weather from Open-Meteo for the coordinates of Chișinău, every hour; and the prices set by the energy regulator ANRE for 95 petrol and diesel, read weekly on Mondays. It is not decoration: they are numerical inputs into one of the index's four components.

Is it a 999.md product?

No. Index9 is a Mega Promoting product built on top of the public APIs and the partner API of 999.md. We are not affiliated with the platform and we do not speak on its behalf.

Does it guarantee that the flat sells?

No, and nobody can. What it does is show where the offer stands against its real segment — median €/m² by district and offer type, with quartiles and dispersion — and how the listing's position moves inside the listing pages. The decision on price and on presentation stays with the seller.

Illustrative example

What a 62 m² flat in Botanica is worth

A usage scenario, with no client data and no commercial results attributed.

The starting situation

A seller asks for a valuation of a 62 m² flat, storey 4, in the Botanica district of Chișinău, for sale.

How it works

The most recent EUR/MDL rate from the BNM is read. From the comparables store, every listing in the same category and subcategory, sale type, Botanica district, captured in the last 365 days is selected — at most 200, ordered by how recent they are. Each comparable receives a similarity score computed over all the shared variables: floor area, storey, rooms, condition. Separately, the segment's median €/m² over the last 120 days is read, with the series Tukey-trimmed.

Rezultatul

If the segment holds at least eight comparables: the median €/m², the 25th and 75th quartiles, the dispersion as a percentage of the median, the age of the most recent comparable in days and a confidence level derived from those four signals — plus the list of comparables with the notable differences marked (floor area differing by more than 20%, storey differing by more than one, a different number of rooms). If it holds between three and eight: the same result, marked "thin data", low confidence. Below three: "unavailable", no figure at all.

Ce este necesar:Jobul de îmbogățire trebuie să fi rulat pe categoria respectivă, altfel baza de comparabile e goală și răspunsul e „indisponibil”. Evaluarea reflectă prețurile cerute în anunțuri, nu prețurile de tranzacție din contracte — sunt două lucruri diferite, iar al doilea nu e public în Moldova.

Ways of working together

Index9, in the context of your organisation.

Internal flows and information

Connecting the authorised sources, organising the information and having the team review the actions, with access separated by role.

Private companies

We define a pilot around one real process: users, data, integrations, costs and acceptance criteria. Expansion follows once the result has been assessed.

Public institutions and state-owned companies

We establish the requirements for accessibility, hosting, data protection and interoperability. Any connection to services run by Moldova's e-Governance Agency (AGE) or its state information-technology service (STISC) requires eligibility, access and approvals to be validated.

These are adaptation scenarios, not statements about existing contracts or partnerships. The proposed capabilities are confirmed within the project's scope of work.

Discută un pilot

Part of an ecosystem.

What would you want to work better?

Tell us about your process. Together we decide what is worth building, what we can connect, and how we check the result.

Hai să discutăm