API

API ParuVendu : les petites annonces de paruvendu.fr en JSON, rubrique par rubrique

ParuVendu.fr range ses petites annonces en rubriques qui n'ont pas les mêmes critères : voitures d'occasion, immobilier à vendre ou à louer, objets de seconde main (« Mon débarras »), animaux, services entre particuliers. L'API reprend ce découpage : `section` choisit la rubrique, chaque rubrique accepte ses propres filtres, et toutes se restreignent à un département (`33` pour la Gironde, `69` pour le Rhône, `2A` pour la Corse-du-Sud). En immobilier, chaque ligne porte le prix, la surface, le nombre de pièces et, quand l'annonce l'indique, la classe énergie : de quoi calculer un prix au m² commune par commune. Rien n'est déposé ni modifié par ce biais, et une agence qui diffuse ses biens sur ParuVendu n'y trouvera pas d'outil de gestion : on lit, côté acheteur, ce qui est en ligne.

Endpoints

endpointCe qui est renvoyéObligatoires
searchRecherche dans une rubrique (`cars`, `real_estate`, `goods`, `pets`, `services`) avec les filtres de cette rubrique : marque, modèle, énergie, boîte, carrosserie, année, kilométrage et prix pour les voitures ; vente ou location, type de bien, surface minimale et prix pour l'immobilier ; catégorie, type d'annonce (vente, don, échange), état et prix pour les objets. Toutes acceptent `department`. Chaque ligne : identifiant, titre, prix en euros et prix tel qu'affiché, commune, département, particulier ou professionnel, date ; plus année, kilométrage et énergie (voitures), surface, pièces, chambres, terrain et classe énergie (immobilier).section
listingUne annonce entière, à partir de son `id` (celui que renvoie `search`) ou de son `url` : description entière, prix accompagné des autres valeurs de prix présentes dans la page pour contrôle, toutes les photos, commune et région, chaque caractéristique libellée (Crit'Air, garantie et CO2 pour une voiture ; pièces, surface et chauffage pour un logement), référence de l'annonce et bloc vendeur.tous optionnels
car_facetsLe vocabulaire du site pour les voitures : codes des marques (`VVORE000` pour Renault) et, avec `brand`, ceux des modèles, plus les codes d'énergie, de boîte et de carrosserie acceptés par `search`.tous optionnels
categoriesLes codes de rubriques acceptés par `search` : 28 catégories d'objets, 13 familles d'animaux, 15 familles de services et les 5 types de biens immobiliers.tous optionnels

Chaque appel est facturé en crédits. Les appels en échec ou bloqués sont gratuits.

Exemple qui fonctionne

Appartements à vendre en Gironde jusqu'à 250 000 €, le 28 octobre 2026 : 2 156 annonces, 30 par page. Sur la première page, le prix au m² calculé à partir de `price_eur` et `surface_m2` allait de 2 044 €/m² à Libourne à 5 250 €/m² à La Teste-de-Buch, et tombait à 800 €/m² pour un « appartement » de 10 m² à Bordeaux affiché 8 000 € : d'après son texte, une cave de stockage classée par l'annonceur dans les appartements. Avant de calculer une moyenne, écartez ce genre de ligne : ParuVendu publie catégories et surfaces telles que l'annonceur les a saisies. La classe énergie (`energy_class`) était renseignée sur 13 lignes sur 30.

Requête
curl -X POST https://api.reefapi.com/paruvendu/v1/search \
  -H "x-api-key: VOTRE_CLE" \
  -H "content-type: application/json" \
  -d '{"section": "real_estate", "property_type": "apartment", "transaction": "sale", "department": "33", "max_price": 250000}'
Réponse (abrégée)
{
  "ok": true,
  "data": {
    "section": "real_estate",
    "total": 2156,
    "page": 1,
    "page_size": 30,
    "last_page": 72,
    "has_more": true,
    "page_beyond_end": false,
    "sort": "relevance",
    "listings": [
      {
        "id": "1296781480A1KIVHAP000",
        "url": "https://www.paruvendu.fr/immobilier/vente/appartement/1296781480A1KIVHAP000",
        "title": "Appartement 40 m2 La Teste-de-Buch (33)",
        "price_eur": 210000,
        "price_text": "210 000 €",
        "city": "La Teste-de-Buch",
        "postal_code": null,
        "department": "33",
        "seller_type": "Professionnel",
        "published_on": "2026-10-28",
        "property_kind": "Appartement",
        "surface_m2": 40,
        "rooms": 2,
        "bedrooms": 1,
        "energy_class": null
      },
      ...
      {
        "id": "1292692820A1KIVHAP000",
        "title": "Appartement 10 m2 Bordeaux (33)",
        "price_eur": 8000,
        "price_text": "8 000 €",
        "city": "Bordeaux",
        "description_snippet": "Bien situé à Bordeaux, cette cave de stockage d'environ 10m2 est idéale pour mobilier, vélos ou archives. ...",
        "surface_m2": 10,
        "rooms": 1,
        "energy_class": null
      },
      {
        "id": "1294986914A1KIVHAP000",
        "title": "Appartement 68 m2 Libourne (33)",
        "price_eur": 139000,
        "price_text": "139 000 €",
        "city": "Libourne",
        "published_on": "2026-10-26",
        "surface_m2": 68,
        "rooms": 2,
        "bedrooms": 1,
        "energy_class": "D"
      },
      ...
    ],
    "filters_applied": { "section": "real_estate", "sort": "relevance", "department": "33", "transaction": "sale", "property_type": "apartment", "max_price": 250000, "page": 1 }
  },
  "meta": { "record_count": 30, "upstream_requests": 1, "cache_hit": false, "mode": "live" }
}

Scraper ParuVendu soi-même : les réponses 410 et les paramètres ignorés

ParuVendu ne sert pas plus de 500 pages par recherche. Nos relevés du 14 octobre 2026, faits pour construire le moteur, le montrent : la page 501 répondait 410 en voitures (104 073 annonces), en immobilier (212 382) comme en objets (907 606), et une page située après la dernière aussi (BMW, page 400). Or 410 est également la réponse à une annonce retirée. Le moteur sépare les cas : une page trop lointaine revient vide avec `page_beyond_end`, une page au-delà de 500 est refusée en INVALID_PARAM, et seule une annonce disparue donne NOT_FOUND.

Le site ignore aussi les clés qu'il ne connaît pas. Ajouté à l'adresse de la rubrique voitures, `zzz=1` ramenait les 104 073 annonces, exactement le total sans filtre ; une faute de frappe dans le nom d'un filtre passe donc pour une recherche filtrée. Ici, les valeurs de filtre sont vérifiées avant l'envoi, un paramètre inconnu est signalé dans `meta.warnings`, et un filtre qui appartient à une autre rubrique, une surface dans `cars` par exemple, est refusé.

Plus discret : l'adresse d'une annonce dépend de sa rubrique. La route des annonces auto répond aussi pour un bien immobilier, mais avec une page appauvrie (sur le même bien, 0 photo et pas d'agence, contre 10 photos par la route immobilière), et pour une autre annonce encore en ligne elle a répondu 410, comme si l'annonce avait été supprimée. Le moteur choisit la route d'après la rubrique inscrite dans l'identifiant.

Dernier exemple, chez les animaux : l'étiquette vendeur de la liste est un texte fixe. Une recherche filtrée sur les éleveurs affichait « Particulier » sur ses 30 lignes, alors que les trois annonces ouvertes indiquaient « Eleveur ». Dans cette rubrique, `seller_type` reste null en liste ; le vrai type se lit dans `listing`.

Aucun de ces quatre écarts ne se remarque en naviguant sur le site. Ils n'apparaissent qu'en confrontant les totaux, les routes et les étiquettes entre eux.

Limites et remarques honnêtes

  • Ce service est indépendant de ParuVendu : le site ne le propose pas, ne l'a pas validé, et aucun partenariat ne nous lie à lui.
  • Prix et catégories sont ceux de l'annonceur, sans contrôle : en voitures, le tri par prix croissant commençait à 1 € lors de nos mesures, et l'exemple montre une cave classée en appartement. « Faire offre », « NC » et 0 € donnent `price_eur` à null, la mention restant dans `price_text` (2 canapés sur 30 dans notre recherche du Rhône).
  • Les cartes immobilières ne donnent pas de code postal, seulement le département, et la commune est tirée du titre de la carte. Sur l'appartement bordelais de 35 m² à 159 840 € ouvert avec `listing`, `department` était null et seule la région était renseignée (« Aquitaine »).
  • La classe énergie de la liste ne se retrouve pas toujours dans l'annonce : pour ce même T2, `energy_class` valait D dans `search`, et aucun attribut de `listing` ne la mentionnait.
  • Pas de filtre sur le nombre de pièces : sur le site, il ne faisait presque pas varier le total (212 383 annonces sans lui, 211 764 avec). Filtrez sur `rooms` de votre côté.
  • Ni coordonnées GPS, ni note du vendeur, ni nombre de vues. Les rubriques emploi et locations de vacances restent hors du périmètre.
  • `listing` renvoie le bloc vendeur tel que la page le publie, téléphone du professionnel compris quand il est affiché. Ces champs ne figurent pas dans l'exemple.
  • Prix par appel : `search` 3 crédits, `listing` 2, `car_facets` et `categories` 1 chacun.