eBay API voor ebay.nl: advertenties, prijzen en verzendkosten als JSON
Deze API leest ebay.nl vanaf de kant van de koper: titel, prijs in euro, staat van het artikel, kenmerken en verzendkosten, opgehaald op het moment dat je de aanroep doet. Wie als verkoper advertenties wil plaatsen of bestellingen wil afhandelen, heeft het officiële eBay Developers Program nodig; via deze API wordt niets geplaatst of gewijzigd. Reken er wel op dat ebay.nl een Europese markt laat zien: met `"domain": "nl"` krijg je de Nederlandse site met Nederlandse labels, maar een groot deel van het aanbod komt van verkopers in Duitsland en andere landen.
Endpoints
| endpoint | Wat je terugkrijgt | Verplicht |
|---|---|---|
| search | Zoeken in actieve advertenties: titel, prijs, staat in de woorden van de site ('Gloednieuw', 'Tweedehands', 'Alleen onderdelen'), verzendregel en de overige subregels van het zoekresultaat. Filters op staat, categorie, Direct Kopen of veiling, prijsgrenzen in euro, gratis verzending, retour mogelijk, prijsvoorstel en locatie (`domestic` voor artikelen in Nederland). Tot 240 per pagina. | query |
| item_detail | Eén advertentie op nummer of URL: prijs, staat, beschikbaarheid, kenmerken, foto's, verzendkosten met het land waarvoor eBay ze berekende, veilingvelden en `listing_status` (active of ended). | allemaal optioneel |
| items_batch | Een reeks advertenties in één aanroep, elk met hetzelfde volledige record als item_detail; nummers die eBay niet kent, staan apart in `not_found`. Elke advertentie is bij eBay een eigen pagina en telt dus als een eigen verzoek. | item_ids |
| seller_items | Het actuele aanbod van één verkoper op gebruikersnaam, met dezelfde filters en paginering als search. | seller |
| seller_profile | De reputatie van een verkoper: aantal beoordelingen en percentage positief (ook over de laatste 12 maanden), lid sinds, zakelijk of particulier, Top Rated. | seller |
| deals | De dagaanbiedingen met de prijs van vóór de korting; een zoekterm is niet nodig. | allemaal optioneel |
| categories | De categorieboom, plus een categorie opzoeken op naam om het nummer voor `category` te vinden. | allemaal optioneel |
Elke aanroep kost credits. Mislukte en geblokkeerde aanroepen zijn gratis.
Werkend voorbeeld
Deze Gazelle Giro Special staat op ebay.nl voor € 345, maar de kenmerken komen grotendeels in het Duits terug (Fahrradart, Rahmengröße, Bremsmethode); alleen 'Objectstaat' en 'Opmerkingen van verkoper' zijn Nederlands. Wie kenmerken van meerdere advertenties naast elkaar wil zetten, moet dus op Duitse én Nederlandse sleutels rekenen. En `brand` is leeg, terwijl het merk gewoon in `item_specifics` staat onder 'Marke'.
curl -X POST https://api.reefapi.com/ebay/v1/item_detail \
-H "x-api-key: JOUW_SLEUTEL" \
-H "content-type: application/json" \
-d '{"item_id": "327240320988", "domain": "nl"}'{
"ok": true,
"data": {
"item": {
"item_id": "327240320988",
"title": "Gazelle Giro Special Professional Road Bike 57cm Reynolds 525 Shimano RX100",
"url": "https://www.ebay.nl/itm/327240320988",
"price": { "value": 345.0, "currency": "EUR", "raw": "345.0" },
"list_price": null,
"condition": "Used",
"availability": "InStock",
"brand": null,
"model": null,
"category_path": null,
"item_specifics": {
"Objectstaat": "Tweedehands",
"Opmerkingen van verkoper": "“The bike is in very good, well-maintained condition for its age, featuring its original paintwork. ...",
"Fahrradart": "Rennrad",
"Material": "Stahl",
"Marke": "Gazelle",
"Modell": "Giro Special Professional",
"Bremsmethode": "Felgenbremse - Mechanisch",
"Rahmengröße": "57 cm",
"Ursprungsland": "Niederlande",
...
},
"seller": { ... },
"shipping": { "rate": 0.0, "currency": "EUR", "country": "DEU" },
"return_policy": null,
"end_time": "2026-10-30T21:09:03.000Z",
"best_offer": false,
"listing_status": "active",
...
}
},
"meta": { "record_count": 1, "domain": "nl", "specifics_count": 18, "has_variations": false, "cache_hit": false, "mode": "live" }
}ebay.nl scrapen met Python: wat er op de Nederlandse site misgaat
In de zoekresultaten van ebay.nl staat bij artikelen van een zakelijke verkoper het woord 'Zakelijk' als subregel. In onze twee zoekopdrachten naar 'gazelle fiets' gebeurde dat 50 keer, en bij alle 50 bleef `condition` leeg; 'Zakelijk' komt dan terug in `aspects`. Een parser die de eerste subregel van een zoekresultaat als staat van het artikel leest, krijgt hier 'Zakelijk' als conditie.
Met `"location": "domestic"` (alleen artikelen die in Nederland staan) wordt het aanbod snel dun. Van de 60 rijen bevatten er maar 28 het woord Gazelle (29 bij een tweede meting); de rest van de pagina vulde eBay aan met oude motorbladen, boeken en Intertoys-catalogi. Zonder locatiefilter waren het er 59 van de 60, maar dan grotendeels met Duitse titels. Tel daarom niet het aantal rijen, maar controleer per rij of de titel je zoekterm nog bevat.
Een beëindigde advertentie laat op eBay de laatste voorraadregel gewoon staan. Tot 24 oktober 2026 las onze item_detail die regel ook: een advertentie op ebay.com die op 29 september was afgelopen, kwam terug met 10 stuks beschikbaar, en geen enkel veld zei dat ze afgelopen was. Sindsdien leest de engine eBay's eigen statusveld; `listing_status` zegt active of ended, en bij een beëindigde advertentie is `quantity_available` null.
Wie Nederlandse prijzen wil vergelijken, beslist eerst welk aanbod meetelt: alleen wat in Nederland staat, of alles wat ebay.nl in euro laat zien. Het verschil is één parameter, maar je krijgt een heel andere lijst.
Grenzen en eerlijke kanttekeningen
- Onofficieel: eBay levert deze toegang niet, en tussen ons en eBay bestaat geen samenwerking of partnerschap.
- Zonder `domain` vraag je ebay.com op, met prijzen in dollar; geef dus bij elke aanroep `"domain": "nl"` mee als je de Nederlandse site bedoelt.
- In de zoekresultaten van ebay.nl bleven `location` en `buying_format` in alle 120 rijen van onze twee zoekopdrachten leeg, en `shipping` kwam alleen als tekst mee ('Gratis verzending', 'Gratis internationale verzending'), in 22 van de 120 rijen.
- `condition` is in search het Nederlandse label uit het zoekresultaat ('Gloednieuw', 'Tweedehands'), in item_detail een Engelse waarde ('Used'). Wie de twee koppelt, moet ze zelf op elkaar afstemmen.
- In item_detail waren `brand`, `model`, `category_path` en `return_policy` leeg bij onze advertentie. Merk en model staan in `item_specifics`, in de taal waarin de verkoper ze invulde ('Marke', 'Modell').
- De verzendkosten in item_detail gelden voor het land in `shipping.country`. Bij onze advertentie was dat DEU; ga er niet van uit dat het bedrag de bezorging in Nederland is.
- Verkochte advertenties (sold listings) levert deze API niet: alle endpoints werken met actieve advertenties, of met één bekende advertentie via item_detail.
- item_detail noemt ook de gebruikersnaam van de verkoper. Voor prijsonderzoek heb je die niet nodig, en daarom is `seller` in het voorbeeld ingekort.