CompSniper
Regional API guide

How to Get eBay Germany Sold Listings with an API

To get eBay Germany sold listings with an API, call CompSniper's GET /v1/scrape with ebaySite=ebay.de. The response includes sold comps, prices, currency and sale dates, while preserving German condition text. You can also use the documented private/business seller filter for more focused comparisons.
By Marc AndrewTested with a real ebay.de search

Search ebay.de for completed sales

Create a free CompSniper account, copy the full cs_live_ API key and set it as COMPSNIPER_API_KEY in your backend environment. The domain goes in a query parameter, not in the request hostname: the API hostname remains api.compsniper.com.

This tested request searches used Sony Alpha 6400 cameras on ebay.de. It asks for five recently ended sold listings. The product name is kept specific without assuming that every result is a camera body with the same lens or accessories.

German sold listings
curl --get --fail-with-body --max-time 75 "https://api.compsniper.com/v1/scrape" \
  --header "Authorization: Bearer $COMPSNIPER_API_KEY" \
  --data-urlencode 'keyword=Sony Alpha 6400' \
  --data-urlencode 'ebaySite=ebay.de' \
  --data-urlencode 'count=5' \
  --data-urlencode 'itemCondition=used' \
  --data-urlencode 'sortOrder=endedRecently' \
  --data-urlencode 'sold=true'

In Postman, use GET, select Bearer Token authentication and put the search fields under Params. Keep itemCondition=used in English: it is the API parameter value, even when returned condition labels are German.

A real ebay.de response in EUR

We ran the request above on . It returned HTTP 200 and five listings. This excerpt shows selected fields from one of those five rows; the other rows and top-level fields are omitted. Values are unchanged.

Real response excerpt
{
  "keyword": "Sony Alpha 6400",
  "totalItems": 5,
  "items": [
    {
      "itemId": "147570780562",
      "title": "Sony Alpha a6400 24.2MP Digitalkamera - fast neu mit Garantie - Alpha 6400",
      "condition": "Gebraucht | Privat",
      "conditionId": 3000,
      "soldPrice": "500.00",
      "soldCurrency": "EUR",
      "shippingPrice": null,
      "shippingCurrency": null,
      "shippingType": "unknown",
      "totalPrice": "500.00",
      "endedAt": "2026-09-20",
      "scrapedAt": "2026-09-22T05:47:49.221623+00:00",
      "itemLocation": null,
      "sellerType": "private",
      "bestOfferAccepted": null,
      "url": "https://www.ebay.de/itm/147570780562?nordt=true"
    }
  ]
}

endedAt is the reported sale date; scrapedAt is the collection timestamp. Repeating the request can return different listings. totalItems: 5 describes the original response, not the one-row excerpt.

This selected row reports a sold price of EUR 500.00, a sale date of September 20, 2026 and the condition text Gebraucht | Privat. The sale date is two days before collection; those dates describe different events and should remain separate in your database.

Preserve German labels instead of matching only Used

An integration that checks condition === "Used" would miss this German listing. Store the original condition and use the best-effort conditionId when present. Our sample maps the used label to 3000. Unknown or category-specific labels can have a null ID; do not turn those into an assumed condition.

German listing labels and what they mean
LabelHow to read it
GebrauchtUsed condition. Inspect the listing details for wear and included accessories.
NeuNew, not an equivalent condition to a used camera.
Als Ersatzteil / defektFor parts or defective, not a working-camera comparable.
PrivatSeller classification, not a condition grade.

eBay's German condition reference explains that definitions vary by category. Refurbished tiers and clothing grades need their own interpretation; a broad used filter is not a guarantee of identical condition.

Separate private and business seller comparisons

The Germany marketplace supports sellerType=private and sellerType=business in CompSniper. This can help you keep seller groups separate when researching prices. It filters recognized source labels; it does not independently verify a seller's legal status, tax treatment or warranty.

Here is the documented private-seller variation. It was not used for the recorded response above. Replace private with business for the other group.

Optional private-seller filter
curl --get --fail-with-body --max-time 75 "https://api.compsniper.com/v1/scrape" \
  --header "Authorization: Bearer $COMPSNIPER_API_KEY" \
  --data-urlencode 'keyword=Sony Alpha 6400' \
  --data-urlencode 'ebaySite=ebay.de' \
  --data-urlencode 'count=5' \
  --data-urlencode 'itemCondition=used' \
  --data-urlencode 'sortOrder=endedRecently' \
  --data-urlencode 'sold=true' \
  --data-urlencode 'sellerType=private'

Rows without a recognized seller label are excluded when this filter is active. Fewer results can therefore reflect missing labels, not the absence of sales. The API reference lists its supported marketplaces; this filter is not a general UK or Australia seller classifier.

Read EUR correctly and keep unknown postage unknown

The sample's soldCurrency is EUR and its decimal string is "500.00". You can display that using German number formatting, but keep the raw numeric value and currency separately. Do not replace the currency label on a US-dollar price to create a German comparable.

totalPrice is not proof of free delivery
In all five rows of this German sample, postage was unknown. The selected row has shippingPrice: null, shippingCurrency: null and shippingType: "unknown". Its totalPrice still equals EUR 500.00. Treat that as an incomplete delivery total, not as evidence that postage cost zero.

Keep item-only comparisons separate from known item-plus-postage comparisons. When shipping is present, verify its currency before adding it. A sold search is not an invoice and should not be used to infer a VAT breakdown or a buyer's complete checkout charges.

Make the camera sample useful for valuation

The recorded Sony search included different accessory descriptions, including a kit-lens bundle. Before calculating a price for your camera, decide whether you are comparing body-only units or kits, then check included lenses, batteries and stated condition. A shutter-count claim in a title is useful context, not an independently tested specification.

Keep ebaySite, itemId, soldCurrency and endedAt with every stored row. Searching ebay.de does not prove the item is located in Germany; the selected row's location is unknown. Likewise, a true bestOfferAccepted marker does not reveal the hidden accepted amount.

For a larger sample, raise count up to 240 and follow the documented pagination fields. Fewer rows or an empty array can be valid. Handle temporary failures using bounded retries and the error reference, rather than converting an error into a zero-price result.

Common questions about eBay Germany sold listings

How do I get eBay Germany sold listings through an API?

Call CompSniper GET /v1/scrape with ebaySite=ebay.de, a product keyword and your CompSniper Bearer API key. It returns sold listings as JSON. The example in this guide returned EUR prices and preserved the German condition label Gebraucht | Privat.

Does the Germany endpoint use a separate API key?

No. Use the same CompSniper key and endpoint as other supported eBay marketplaces. Set ebaySite=ebay.de explicitly. The API does not infer the marketplace from your server's country.

Can I filter German sold comps by private or business seller?

Yes. The documented sellerType query parameter accepts private or business on ebay.de. Rows without a recognized seller label are excluded when that filter is active. The recorded sample did not apply a sellerType filter, even though its selected row was labeled private.

What does Gebraucht | Privat mean in the response?

Gebraucht is the used-condition label and Privat identifies a private seller label. CompSniper preserves the source text and also returns conditionId and sellerType where recognized. In the example these are 3000 and private. Keep the original text because category-specific condition labels are not always mapped.

Is shipping free when shippingPrice is null?

No. In the German sample, shippingPrice and shippingCurrency are null and shippingType is unknown. totalPrice equals soldPrice, but that does not establish free postage or a complete delivered price.

Can I combine Germany and UK sold prices in one median?

Not as raw numbers. Preserve each row's marketplace and soldCurrency. Compare equivalent condition and bundle contents within each currency first; if you later convert currencies, retain the original value and document the exchange rate and its date.

Continue your integration

Keep each marketplace and currency attached to its own sold comps. These guides use the same endpoint and API key:

For the full contract, see the API reference. The eBay sold listings API overview covers the product, and the CSV and Excel guide covers spreadsheet exports.

Written by the CompSniper team. The September 22 examples are dated observations, not current valuations or evidence of complete market coverage. CompSniper is an independent service, not an official eBay API.

Try your first ebay.de sold search

Create a free CompSniper account, get an API key and run the request above. The free plan includes 100 requests per month, with no credit card required.