EN

Theme

Accent colour

Your theme and colour carry over to satelit.md and the app.

Dashboard Choose a plan

Categories

GET/v1/market/categories

Every classifieds category on the latest day: how many ads are for sale, how many have a price, and the median asking price in lei. Aggregate numbers only: no ad, no seller, no contact. Costs 2 credits.

Credits
2
With a key

Parameters

No parameters.

Possible errors

Try it

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"]);
Response
{
  "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)"
  }
}

Prices and volume

GET/v1/market/prices

The price distribution and market volume of the latest day, from the live ads. Without category, one row per category, biggest first. With category, one row for the whole country and one per city with enough ads. Prices are in lei; currency is the currency most ads use. Costs 2 credits per 50 rows.

Credits
2 for every 50 rows
With a key

Parameters

  • categoryintegeroptional

    A subcategory id, from /v1/market/categories.

  • citystringoptional

    The city, as the ads write it: Chișinău.

  • pageintegeroptionaldefault 1

    The page, from 1 to 200.

Possible errors

Try it

curl "https://api.satelit.md/v1/market/prices?category=659" \
  -H "Authorization: Bearer $SATELIT_KEY"
const res = await fetch("https://api.satelit.md/v1/market/prices?category=659", {
  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/prices?category=659",
    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/prices?category=659");
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"]);
Response
{
  "data": [
    {
      "category": {
        "id": 659,
        "name": "Cars",
        "url": null,
        "group": {
          "id": 657,
          "name": "Transport",
          "url": null
        }
      },
      "city": null,
      "day": "2026-11-04",
      "volume": 18450,
      "priced": 17230,
      "currency": "EUR",
      "prices": {
        "median": 185000,
        "p10": 62000,
        "p25": 110000,
        "p75": 315000,
        "p90": 520000,
        "min": 25000,
        "max": 1450000
      }
    },
    {
      "category": {
        "id": 659,
        "name": "Cars",
        "url": null,
        "group": {
          "id": 657,
          "name": "Transport",
          "url": null
        }
      },
      "city": "Chișinău",
      "day": "2026-11-04",
      "volume": 9200,
      "priced": 8700,
      "currency": "EUR",
      "prices": {
        "median": 195000,
        "p10": 70000,
        "p25": 120000,
        "p75": 330000,
        "p90": 540000,
        "min": 28000,
        "max": 1450000
      }
    },
    {
      "category": {
        "id": 659,
        "name": "Cars",
        "url": null,
        "group": {
          "id": 657,
          "name": "Transport",
          "url": null
        }
      },
      "city": "Bălți",
      "day": "2026-11-04",
      "volume": 2100,
      "priced": 1980,
      "currency": "EUR",
      "prices": {
        "median": 165000,
        "p10": 55000,
        "p25": 98000,
        "p75": 280000,
        "p90": 470000,
        "min": 22000,
        "max": 980000
      }
    }
  ],
  "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)",
    "page": {
      "page": 1,
      "per": 50,
      "total": 3,
      "pages": 1
    }
  }
}

The market over time

GET/v1/market/history

One category, day by day: the market volume, how many ads were listed (new) and how many left (removed), and the price distribution where enough ads have a price. The whole market by default (category 0). A city has volume and prices, without the daily flow. Past the plan's history it is cut, and meta.history_cut says so. Costs 3 credits per started 30 days.

Credits
3 for every 30 days, rounded up
With a key

Parameters

  • categoryintegeroptionaldefault 0

    A subcategory id, or 0 for the whole market.

  • citystringoptional

    The city, as the ads write it.

  • daysintegeroptionaldefault 90

    How many days back. Cut at the plan's limit.

Possible errors

Try it

curl "https://api.satelit.md/v1/market/history?category=659&days=90" \
  -H "Authorization: Bearer $SATELIT_KEY"
const res = await fetch("https://api.satelit.md/v1/market/history?category=659&days=90", {
  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/history?category=659&days=90",
    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/history?category=659&days=90");
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"]);
Response
{
  "data": {
    "category": {
      "id": 659,
      "name": "Cars",
      "url": null,
      "group": {
        "id": 657,
        "name": "Transport",
        "url": null
      }
    },
    "city": null,
    "points": [
      {
        "date": "2026-10-29",
        "volume": 18100,
        "new": 610,
        "removed": 540,
        "priced": 17014,
        "prices": {
          "median": 182000,
          "p10": 62000,
          "p25": 110000,
          "p75": 315000,
          "p90": 520000,
          "min": 25000,
          "max": 1450000
        }
      },
      {
        "date": "2026-10-30",
        "volume": 18220,
        "new": 590,
        "removed": 560,
        "priced": 17127,
        "prices": {
          "median": 183000,
          "p10": 62000,
          "p25": 110000,
          "p75": 315000,
          "p90": 520000,
          "min": 25000,
          "max": 1450000
        }
      },
      {
        "date": "2026-10-31",
        "volume": 18260,
        "new": 640,
        "removed": 600,
        "priced": 17164,
        "prices": {
          "median": 184000,
          "p10": 62000,
          "p25": 110000,
          "p75": 315000,
          "p90": 520000,
          "min": 25000,
          "max": 1450000
        }
      },
      {
        "date": "2026-11-01",
        "volume": 18340,
        "new": 700,
        "removed": 620,
        "priced": 17240,
        "prices": {
          "median": 184500,
          "p10": 62000,
          "p25": 110000,
          "p75": 315000,
          "p90": 520000,
          "min": 25000,
          "max": 1450000
        }
      },
      {
        "date": "2026-11-02",
        "volume": 18390,
        "new": 560,
        "removed": 520,
        "priced": 17287,
        "prices": {
          "median": 185000,
          "p10": 62000,
          "p25": 110000,
          "p75": 315000,
          "p90": 520000,
          "min": 25000,
          "max": 1450000
        }
      },
      {
        "date": "2026-11-03",
        "volume": 18420,
        "new": 620,
        "removed": 560,
        "priced": 17315,
        "prices": {
          "median": 185000,
          "p10": 62000,
          "p25": 110000,
          "p75": 315000,
          "p90": 520000,
          "min": 25000,
          "max": 1450000
        }
      },
      {
        "date": "2026-11-04",
        "volume": 18450,
        "new": 640,
        "removed": 580,
        "priced": 17343,
        "prices": {
          "median": 185000,
          "p10": 62000,
          "p25": 110000,
          "p75": 315000,
          "p90": 520000,
          "min": 25000,
          "max": 1450000
        }
      }
    ]
  },
  "meta": {
    "credits": 3,
    "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)"
  }
}

Sellers

GET/v1/market/sellers

Recurring sellers, most active first, 50 to a page. With category, ranked within it, with their live ads and median price there. With new=true, only sellers new on the site. A seller is an opaque id that folds one seller's ads together and names no one: never a phone, an e-mail or any contact. tenure_days, new, sold and sold_recent appear only when those fields are on. Sellers come from one classifieds site only. Costs 3 credits per 50 rows.

Credits
3 for every 50 rows
With a key

Parameters

  • categoryintegeroptional

    A subcategory id to rank within, from /v1/market/categories.

  • newbooleanoptional

    Only sellers new on the site.

  • pageintegeroptionaldefault 1

    The page, from 1 to 200.

Possible errors

Try it

curl "https://api.satelit.md/v1/market/sellers?category=659" \
  -H "Authorization: Bearer $SATELIT_KEY"
const res = await fetch("https://api.satelit.md/v1/market/sellers?category=659", {
  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/sellers?category=659",
    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/sellers?category=659");
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"]);
Response
{
  "data": [
    {
      "id": "3f9a1c7e2b4d",
      "source": "m999",
      "active": 42,
      "total": 120,
      "categories": 2,
      "top_category": {
        "id": 659,
        "name": "Cars",
        "url": null,
        "group": {
          "id": 657,
          "name": "Transport",
          "url": null
        }
      },
      "activity": "high",
      "first_seen": "2026-03-01T09:00:00+02:00",
      "last_active": "2026-11-02T13:05:00+02:00",
      "tenure_days": 248,
      "new": false,
      "sold": 78,
      "sold_recent": 12,
      "in_category": {
        "active": 38,
        "total": 95,
        "median_mdl": 210000
      }
    },
    {
      "id": "a1b2c3d4e5f6",
      "source": "m999",
      "active": 17,
      "total": 40,
      "categories": 1,
      "top_category": {
        "id": 659,
        "name": "Cars",
        "url": null,
        "group": {
          "id": 657,
          "name": "Transport",
          "url": null
        }
      },
      "activity": "regular",
      "first_seen": "2026-06-10T12:00:00+02:00",
      "last_active": "2026-11-02T13:05:00+02:00",
      "tenure_days": 147,
      "new": false,
      "sold": 23,
      "sold_recent": 5,
      "in_category": {
        "active": 17,
        "total": 40,
        "median_mdl": 150000
      }
    },
    {
      "id": "9988776655aa",
      "source": "m999",
      "active": 6,
      "total": 9,
      "categories": 1,
      "top_category": {
        "id": 659,
        "name": "Cars",
        "url": null,
        "group": {
          "id": 657,
          "name": "Transport",
          "url": null
        }
      },
      "activity": "regular",
      "first_seen": "2026-10-20T08:00:00+02:00",
      "last_active": "2026-11-02T13:05:00+02:00",
      "tenure_days": 15,
      "new": true,
      "sold": 3,
      "sold_recent": 3,
      "in_category": {
        "active": 6,
        "total": 9,
        "median_mdl": 120000
      }
    }
  ],
  "meta": {
    "credits": 3,
    "updated_at": "2026-11-02T13:05:00+02:00",
    "sources": [
      {
        "name": "one classifieds site",
        "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)",
    "page": {
      "page": 1,
      "per": 50,
      "total": 1200,
      "pages": 24
    }
  }
}

One seller

GET/v1/market/sellers/{id}

A seller by its opaque id: the categories it lists in, how many ads are live and in total, and its median asking price per category. Numbers only, no contact. Costs 2 credits.

Credits
2
With a key

Parameters

  • idstringrequired

    The seller's opaque id, from /v1/market/sellers.

Possible errors

Try it

curl "https://api.satelit.md/v1/market/sellers/3f9a1c7e2b4d" \
  -H "Authorization: Bearer $SATELIT_KEY"
const res = await fetch("https://api.satelit.md/v1/market/sellers/3f9a1c7e2b4d", {
  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/sellers/3f9a1c7e2b4d",
    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/sellers/3f9a1c7e2b4d");
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"]);
Response
{
  "data": {
    "id": "3f9a1c7e2b4d",
    "source": "m999",
    "active": 42,
    "total": 120,
    "categories": 2,
    "top_category": {
      "id": 659,
      "name": "Cars",
      "url": null,
      "group": {
        "id": 657,
        "name": "Transport",
        "url": null
      }
    },
    "activity": "high",
    "first_seen": "2026-03-01T09:00:00+02:00",
    "last_active": "2026-11-02T13:05:00+02:00",
    "tenure_days": 248,
    "new": false,
    "sold": 78,
    "sold_recent": 12,
    "in_category": {
      "active": 38,
      "total": 95,
      "median_mdl": 210000
    },
    "category_breakdown": [
      {
        "category": {
          "id": 659,
          "name": "Cars",
          "url": null,
          "group": {
            "id": 657,
            "name": "Transport",
            "url": null
          }
        },
        "active": 38,
        "total": 95,
        "median_mdl": 210000,
        "last_active": "2026-11-02T13:05:00+02:00"
      },
      {
        "category": {
          "id": 40,
          "name": "Phones",
          "url": null,
          "group": {
            "id": 646,
            "name": "Electronics",
            "url": null
          }
        },
        "active": 4,
        "total": 25,
        "median_mdl": 12000,
        "last_active": "2026-11-02T13:05:00+02:00"
      }
    ]
  },
  "meta": {
    "credits": 2,
    "updated_at": "2026-11-02T13:05:00+02:00",
    "sources": [
      {
        "name": "one classifieds site",
        "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)"
  }
}