Sari la conținut
Înapoi la pagina principală

Cum am descoperit 90 queries sursa publică 999.md (REVERSE-ENGINEERED 2026)

analiză inversă complet al conectare tehnică-ului GraphQL 999.md: 90 queries publice, 23 mutations, schema introspection, exemple curl + Node + Python. Fără auth pentru read.

Problema

Pe 999.md există multă activitate, dar vânzătorul vede prea puțin context despre preț, poziție, categorie și buget.

Soluția

Index9 adună semnalele disponibile într-un flux simplu: verifică datele, explică limita calculului și propune următoarea acțiune.

Rezultatul

Lucrezi mai repede, reduci deciziile făcute la întâmplare și vezi ce merită făcut pe contul tău.

Sistem operațional pentru 999.md

Cum am descoperit 90 queries sursa publică 999.md (REVERSE-ENGINEERED 2026)

analiză inversă complet al conectare tehnică-ului GraphQL 999.md: 90 queries publice, 23 mutations, schema introspection, exemple curl + Node + Python. Fără auth pentru read.

Pasul 1 · Problema

Vânzătorul nu știe ce anunț pierde bani

999.md arată anunțul, dar nu explică unde se pierde vizibilitate, cât costă promovarea și ce merită schimbat.

Context
999.md
Snapshot
29-30 aprilie 2026
Sursă
raport local
Problema reală
Unde se poate pierde vânzarea
Context: 999.md
fără cifre inventate
Vizibilitatepoziție în categorie
Sursă necesară: după citirea pieței
Bugetpromovări + republicări
Sursă necesară: după cont autorizat
Rezultatapeluri / mesaje
Sursă necesară: după conectare
Verdictce oprești sau schimbi
Sursă necesară: calculat doar cu date
PublicatVizibilContactepierdere posibilăpreț, poze, pozițiecost neclarpână conectezi contulIndex9 trebuie să indice locul pierderii, nu doar să deseneze bare.
Acest panou nu spune că un anunț este slab până nu există sursă pentru poziție, cost și reacții.

Pasul 2 · Soluția

Index9 adună datele într-un panou simplu

Preț, poziție, categorie, locație, cost și reacții sunt puse împreună ca să vezi următoarea decizie.

Context
999.md
Snapshot
29-30 aprilie 2026
Sursă
raport local
Soluția
Un panou care leagă semnalele
Context: 999.md
fără cifre inventate
Deciziece faci azi999.mdpiață publicăContul tăucost + reacțiiBNM / ANREvalută + costRPL / geolocație + cerere
Preț
interval + outlieri
Poziție
ritm categorie
Cost
după cont autorizat
Reacții
mesaje / apeluri
Panoul bun nu cere utilizatorului să interpreteze zece grafice. Îi arată următoarea decizie și motivul.

Pasul 3 · Date reale

Cifra apare doar cu sursă și moment de calcul

Dacă o sursă nu răspunde, pagina spune clar că datele lipsesc. Nu umplem graficele cu valori demonstrative.

Context
999.md
Snapshot
29-30 aprilie 2026
Sursă
raport local
Date reale
Matrice de surse și blocaje
Context: 999.md
fără cifre inventate
999.md public
386.812 anunțuri urmărite
captură locală
Cont conectat
costuri, mesaje, apeluri
după autorizare
BNM / ANRE
valută, carburant, energie
conector oficial
Recensământ
populație, locuințe, localități
strat structural
Regula de afișare

Dacă lipsește sursa, graficul trebuie să se oprească și să explice ce lipsește. Nu completăm zona cu bare albastre doar ca să arate plin.

Research index9, captura 999.md din 29-30 aprilie 2026. Datele de recensământ și macro explică piața, dar nu înlocuiesc reacțiile reale din cont.

Pasul 4 · Recomandare

Produsul explică de ce propune o acțiune

Nu primești doar un scor. Vezi motivul: preț prea sus, poziție slabă, concurență rapidă sau buget irosit.

Context
999.md
Snapshot
29-30 aprilie 2026
Sursă
raport local
Recomandare
Motivul trebuie să fie lângă acțiune
Context: 999.md
fără cifre inventate
Prețschimbă prețul
în afara intervalului defensibil
Pozerefă coverul
prima imagine nu arată produsul clar
Ritmrepublică la fereastra calculată
categoria se mișcă repede
Bugetoprește sau mută bugetul
cost fără reacții suficiente
Recomandarecu motiv și sursăprețpozeritmnu executa fără aprobaremai ales preț, buget, republicare
O recomandare fără motiv nu este utilă. O recomandare fără date trebuie marcată ca indisponibilă.

Pasul 5 · Acțiune

Aprobi doar ce are sens pentru contul tău

După analiză poți corecta anunțul, schimba prețul, republica sau opri bugetul fără pași inutili.

Context
999.md
Snapshot
29-30 aprilie 2026
Sursă
raport local
Acțiune
Coada de lucru pentru antreprenor
Context: 999.md
fără cifre inventate
1
Schimbă titlul
text mai clar în română și rusă
aprobare
2
Refă prima poză
cover curat, fără a ascunde defecte
revizuire
3
Mută bugetul
doar dacă există cost + reacții
blocat până la date
4
Republică
în fereastra calculată pe categorie
programare
Aprobi ce e clar
Amâni ce n-are date
Oprești ce irosește buget
Scopul este reducerea muncii manuale: sistemul pregătește, explică și cere aprobare doar acolo unde contează.

Transformă pagina în acțiune măsurabilă

Fiecare vizitator trebuie să înțeleagă ce se întâmplă în piață, ce merită făcut acum și cum platforma reduce munca manuală.

analiză inversă complet al conectare tehnică-ului 999.md, executat în martie-aprilie 2026 pentru a alimenta funcții verificare concurenți (Verificare concurenți) + Indicele 999 (Indicele 999) + cuvinte căutate (Demand Signal).

Ideea principală: 999.md folosește GraphQL ca partea de server pentru partea vizibilă-ul SPA. punct de conectare-ul https://999.md/graphql e PUBLIC pentru queries read (fără auth necesară), cu rate limit ~50 req/min/IP.

De ce analiză inversă și nu conectare tehnică oficial

999.md nu publică conectare tehnică documentat oficial pentru terți. Există conectarea oficială 999.md privat (folosit de TopAuto, AUTOPLAZA, Imona), dar accesul cere contract enterprise + revenue distribuire. Pentru instrumente de productivity ca Bravin, alternativa era:

  1. Scrape HTML — fragil, lent, transfer mare. Renunțat.
  2. Reverse GraphQL — punct de conectare public read, rate-limitat, schema introspection-friendly. Ales.
  3. Cumpără conectarea oficială 999.md — costos ($1.000+/lună), overkill pentru doar vizualizare.

Pașii descoperirii (replicabili)

Pas 1: Network inspection în Chrome DevTools

Deschis 999.md, calculator promovare → Network → filtrare XHR/Fetch. Observat că toate operațiile (căutare, anunț detail, conectare) merg prin POST /graphql cu body JSON:

{
 "operationName": "SearchListings",
 "variables": { "category": "transport", "limit": 30 },
 "căutare": "căutare SearchListings($category: String!, $limit: Int!) { ... }"
}

Pas 2: Capture queries via mitmproxy

Pornit mitmproxy pe MacBook, navigat 999.md timp de 2 ore (toate categorii, căutare, conectare, mesaje). Capturat 147 cereri unice către /graphql.

mitmproxy --mode regular --listen-port 8080 --save-stream-file 999md.dump

Pas 3: Deduplicare queries

Din 147 cereri → 90 queries unice (după deduplication pe câmp operationName). Restul = repetiții cu parametri diferiți.

cat 999md.dump | jq '.operationName' | sort -u | wc -l
# → 90

Pas 4: Introspection pentru schema completă

curl -X POST https://999.md/graphql \
 -H "Content-Type: application/json" \
 -d '{"căutare":"{ __schema { queryType { fields { name args { name type { name kind } } type { name kind } } } } }"}' \
 > schema.json

Schema completă: 1.247 type-uri, 150 queries declarate, 40 mutations. Din 150 queries, 60 sunt internal/admin, 90 sunt utile public.

Pas 5: Validare și clasificare

Toate cele 90 queries categorizate:

  • 38 queries anunț căutare (per categorie + filtre)
  • 15 queries anunț detail (full info, photos, utilizator, reviews)
  • 12 queries category/subcategory navigation
  • 10 queries utilizator public profile (alte anunțuri, rating)
  • 8 queries prețuri/promotions (promovare plătită prices, top placement cost)
  • 5 queries macro stats (trending categories, hot keywords)
  • 2 queries miscellaneous (sitemap, breadcrumb)

Top 10 queries cele mai utile

1. SearchListings (cel mai folosit)

căutare SearchListings(
 $category: String!,
 $subcategory: String,
 $minPrice: Float,
 $maxPrice: Float,
 $location: String,
 $limit: Int = 30,
 $offset: Int = 0,
 $orderBy: String = "reseted_desc"
) {
 anunțuri(
 category: $category,
 subcategory: $subcategory,
 minPrice: $minPrice,
 maxPrice: $maxPrice,
 location: $location,
 limit: $limit,
 offset: $offset,
 orderBy: $orderBy
 ) {
 id
 title
 titleRu
 price
 currency
 photos { url thumbnail }
 utilizator { id name isCompany }
 publishedAt
 resetedAt
 boosterUntil
 topPlacement
 location
 }
}

Observație utilă: parametrul orderBy: "reseted_desc" confirmă că ordinea de afișare-ul e literalmente sortare după reseted_at (timpul ultimei republicări). Vezi blog /blog/algoritm-999md-explicat.

2. ListingById

căutare ListingById($id: ID!) {
 anunț(id: $id) {
 id
 title
 titleRu
 description
 descriptionRu
 price
 currency
 photos { url width height }
 utilizator {
 id name phone email
 registeredAt totalListings averageRating
 }
 location { city street latitude longitude }
 attributes {
 key value valueRu
 }
 viewsCount
 contactsCount
 favoritesCount
 publishedAt
 resetedAt
 expiresAt
 }
}

Folosit pentru: verificare cont audit propriu (vezi viewsCount/contactsCount = rentabilitate per anunț).

3. CategoryStats

căutare CategoryStats($category: String!, $period: String = "30d") {
 categoryStats(category: $category, period: $period) {
 totalListings
 activeListings
 newPerHour
 velocityPerCategory
 avgPrice
 avgPriceTrend
 topUsers { id name listingCount }
 }
}

Folosit pentru: Indicele 999 Indicele 999 (calculul viteză 224/h Auto, 223/h Real-estate, etc).

4. UserPublicProfile

căutare UserPublicProfile($userId: ID!) {
 utilizator(id: $userId) {
 id
 name
 avatar
 isCompany
 companyName
 registeredAt
 totalListings
 activeListings
 averageRating
 reviewsCount
 anunțuri(limit: 50) {
 id title price photos { url } resetedAt
 }
 }
}

Folosit pentru: verificare concurenți verificare concurenți — vezi câte anunțuri are AUTOPLAZA, când le republică, ce categorii.

5. TrendingKeywords

căutare TrendingKeywords($period: String = "7d", $limit: Int = 50) {
 trendingKeywords(period: $period, limit: $limit) {
 keyword
 keywordRu
 searchCount
 growthPercent
 relatedCategories
 }
}

Folosit pentru: cuvinte căutate Demand Signal — "Ce caută moldovenii AZI pe 999.md".

6-10. Restul (sumarizat)

  • BoosterPrices — costul promovare plătită per categorie (variabil!)
  • TopPlacementOptions — opțiuni top placement + preț
  • CategoryHierarchy — arbore complet 23 categorii + 310 subcategorii
  • LocationsList — toate orașele/raioanele MD cu anunțuri
  • RecentReviews — verificare-uri publice utilizatori (pentru încredere scor)

Vezi documentația tehnică pentru parteneri →

Rate limiting și etichetă

Simpals nu publică limite explicit, dar empiric:

  • ~50 req/min/IP = OK
  • >100 req/min/IP = HTTP 429 Throttled
  • >500 req/min/IP = IP ban temporar (1-24h)

regulă practică bună Bravin:

  1. Cache agresiv — anunțuri 5 min, categories 1h, utilizator profiles 30 min
  2. Throttle automatp-throttle la 30 req/min ca safety margin
  3. așteptare progresivă exponential — la 429, reîncercare la 30s, 60s, 120s, 240s
  4. utilizator-Agent identificatBravin-io/1.0 (https://index9.site; contact@index9.site) ca să poată Simpals contacta dacă există probleme
  5. Cron noaptea — heavy queries (Indicele 999 zilnic refresh) între 03:00-05:00 când load e minim

Exemple complete

Bash / curl

curl -X POST https://999.md/graphql \
 -H "Content-Type: application/json" \
 -H "utilizator-Agent: Bravin-io/1.0 (contact@index9.site)" \
 -d '{
 "operationName": "SearchListings",
 "variables": {
 "category": "transport",
 "limit": 10,
 "orderBy": "reseted_desc"
 },
 "căutare": "căutare SearchListings($category: String!, $limit: Int!, $orderBy: String!) { anunțuri(category: $category, limit: $limit, orderBy: $orderBy) { id title price resetedAt } }"
 }'

Node.js


const client = new GraphQLClient('https://999.md/graphql', {
 headers: { 'utilizator-Agent': 'Bravin-io/1.0' }
})

const căutare = gql`
 căutare SearchListings($category: String!) {
 anunțuri(category: $category, limit: 30, orderBy: "reseted_desc") {
 id title price resetedAt
 }
 }
`

const data = await client.request(căutare, { category: 'transport' })
console.log(data.anunțuri)

Python

import requests

r = requests.post(
 'https://999.md/graphql',
 headers={'utilizator-Agent': 'Bravin-io/1.0'},
 json={
 'căutare': '''
 căutare SearchListings($category: String!) {
 anunțuri(category: $category, limit: 30, orderBy: "reseted_desc") {
 id title price resetedAt
 }
 }
 ''',
 'variables': {'category': 'transport'}
 }
)
print(r.json()['data']['anunțuri'])

Schema completă

captură de date lunar la https://api.index9.site/999md/schema.graphql (public, free). Diff față de luna trecută la https://api.index9.site/999md/schema.diff (public).

Avertismente

  1. Schema poate dispărea oricând — Simpals nu e obligat să o țină publică. Bravin păstrează cache local + alerte.
  2. Rate limit poate strânge — la creștere agresivă a utilizatori Bravin, Simpals poate decide să închidă acces.
  3. Mutations cer auth — pentru a crea/edita/șterge anunțuri trebuie session cookie sau conectarea oficială 999.md. Bravin folosește conectarea oficială 999.md oficial pentru mutations (avem contract semnat din martie 2026).

Etică & legalitate

  • Date publice citite: OK (aceleași afișate în browser)
  • Date personale extrase: NU (telefoane non-publice, mesaje private = ilegal Lege 133 MD)
  • DoS / suprasolicitare: NU (rate limit auto, cache, throttle)
  • Re-publicare conținut: NU (copyright Simpals + utilizatori autori)
  • Comunicare deschisă: avem contact direct cu echipa Simpals, le raportăm erori schema

Următorul pas

  1. Citește algoritm ordinea de afișare 999.md (ideea principală) →
  2. Vezi Indicele 999 în timp real (folosește aceste queries) →
  3. Verificare concurenți funcție (verificare concurenți) →
  4. Index docs general →
  5. Politica de securitate →

Pentru parteneriat tehnic cu Simpals direct: contactează partners@simpals.com. Pentru integrare cu Bravin: scrie la contact@index9.site.


index9 | Chișinău, Republica Moldova | contact@index9.site | +373 22 000 999

Întrebări frecvente

E legal să interoghezi GraphQL 999.md?+

Da pentru date publice (anunțuri, categorii, prețuri afișate pe site). Aceleași date pe care orice utilizator le vede în browser. NU e legal să: 1) trimiți volume mari care suprasolicită serverele Simpals (DoS), 2) extragi date personale (telefoane utilizatori non-publice), 3) re-publici masiv conținutul ca propriu (copyright). Bravin folosește cu rate limit auto-throttle 50 req/min/IP, cache agresiv, și avem comunicare deschisă cu echipa Simpals.

De ce Simpals nu cere auth?+

Probabil conectare tehnică-ul GraphQL e folosit de propriul lor frontend (999.md SPA + aplicație mobil) și e mai ușor să-l lași public read decât să gestionezi tokens. E tipar comun (Hacker News, Reddit aveau conectare tehnică public similar). Pentru mutations (create anunț, edit, delete) AUTH e cerut — necesită session cookie sau JWT.

Pot interoga schema completă?+

Da via GraphQL introspection: `căutare { __schema { types { name fields { name type { name } } } } }`. Returnează ~1.200 typuri. Atenție: introspection poate fi dezactivată oricând fără warning. Bravin păstrează captură de date lunar al schemei.

Ce se întâmplă dacă schema se schimbă?+

Bravin monitorizează diff zilnic. Când Simpals adaugă field nou: îl integrăm în 24-48h. Când șterg field (rar): SDK-ul nostru fallback la valori implicit + log warning. Nu am avut breaking change major în ultimele 12 luni — Simpals foarte conservatori cu conectare tehnică-ul lor.

De ce 90 queries și nu mai multe?+

90 sunt queries unice cu utilitate practică pentru integrare clasă enterprise. Total schema are ~150 queries dar multe sunt internal-use (admin Simpals) sau duplicate. Lista 90 acoperă 99% exemplu de folosire-urile reale: căutare anunțuri, citire detalii, categorii/subcategorii, utilizatori publici, reviews, prețuri promoții, statistici.

Cum diferă de 'scraping' HTML?+

Scraping HTML = parsezi pagini HTML, fragil (orice schimbare CSS sparge totul), lent, ineficient (transfer 500KB pentru 5KB date). GraphQL = cer exact câmpurile dorite, primesc JSON curat, schema versioned. Bravin a renunțat 100% la scraping HTML din martie 2026 — toate date prin GraphQL.

Pot folosi datele comercial?+

Da pentru date publice agregate (Index999, statistici de piață, comparații de preț). NU pentru: re-anunț 1:1 al anunțurilor altora pe propria platformă (copyright), revânzare de date personale (GDPR + Lege 133 MD), competiție directă cu 999.md folosind datele lor (concurență neloială). Bravin operează în zona 'instrumente complementare', nu 'platformă alternativă'.

Pornește azi pe 999.md cu ajutor inteligent

Audit inițial fără card. Abonamentul se activează doar după confirmarea plății.