Moldova's classifieds market
Every ad on two large classifieds sites in Moldova, aggregated: how much is for sale, at what prices, and who sells. Numbers, never a phone or a name.
Numbers as of 6 November 2026
- Cars18,450
- Apartments12,900
- Phones9,600
Market volume, by day
No contacts, ever
Phone numbers stay on the site, shown only to a signed-in user within a daily cap. The B2B API never returns a phone, an e-mail or a name: every seller is an opaque id that cannot be reversed. Reselling contacts would be a separate owner decision; it is off.
Where this data comes from, plainly
- We read public pages. We read the public pages of the classifieds sites under a browser's name, honouring robots.txt and the pauses between requests.
- We have no agreement with the sources. No source is a partner or a supporter of this API.
- We grant no licence over their data. We cannot give rights we do not hold. How you use this data is your own responsibility.
- No photos, logos or contact details. Answers hold no people's phones or e-mail addresses, no owners' names, no photos and no logos.
- A source can leave. A source that does not want to appear writes to abuse@satelit.md. Once we switch it off, it leaves every answer within 10 seconds.
What it contains
- Prices per category and city: the median, p10–p90 and a range, in lei.
- Market volume and the daily flow over time: new and removed listings.
- Sellers: their categories, listing counts, activity and the per-category ranking.
- No contacts. A seller is an opaque id; never a phone, an e-mail or a name.
Who uses it
- Dealers and retailers sizing their market and competitors.
- Analysts and newsrooms tracking prices and demand.
- Pricing tools that need a category's median.
How often it changes
Daily, after the sources' nightly inventory.
Source and licence
The public pages of two classifieds sites; no agreement and no licence over the data. Sellers come from one of them only.
What it costs
/v1/market/categories2per call/v1/market/prices2for every 50 rows/v1/market/history3for every 30 days, rounded up/v1/market/sellers3for every 50 rows/v1/market/sellers/{id}2per call
curl "https://api.satelit.md/v1/market/categories" \
-H "Authorization: Bearer $SATELIT_KEY" const res = await fetch("https://api.satelit.md/v1/market/categories", {
headers: { Authorization: `Bearer ${process.env.SATELIT_KEY}` },
});
const { data, meta } = await res.json();
console.log(data, meta.credits); import json, os, urllib.request
req = urllib.request.Request(
"https://api.satelit.md/v1/market/categories",
headers={"Authorization": f"Bearer {os.environ['SATELIT_KEY']}"},
)
with urllib.request.urlopen(req) as res:
body = json.load(res)
print(body["data"], body["meta"]["credits"]) <?php
$ch = curl_init("https://api.satelit.md/v1/market/categories");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("SATELIT_KEY")],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($body["data"]); {
"data": [
{
"category": {
"id": 659,
"name": "Cars",
"url": null,
"group": {
"id": 657,
"name": "Transport",
"url": null
}
},
"volume": 18450,
"priced": 17230,
"median_mdl": 185000
},
{
"category": {
"id": 1404,
"name": "Apartments",
"url": null,
"group": {
"id": 1399,
"name": "Real estate",
"url": null
}
},
"volume": 12900,
"priced": 12010,
"median_mdl": 1650000
},
{
"category": {
"id": 40,
"name": "Phones",
"url": null,
"group": {
"id": 646,
"name": "Electronics",
"url": null
}
},
"volume": 9600,
"priced": 9100,
"median_mdl": 9900
}
],
"meta": {
"credits": 2,
"updated_at": "2026-11-02T13:05:00+02:00",
"sources": [
{
"name": "two classifieds sites",
"license": "none: read from the source's public pages; no agreement with the source and no licence over its data is granted"
}
],
"attribution": "Date: Satelit (satelit.md)"
}
}