API-Dokumentation
Eine einfache REST-API. Sie senden eine Anfrage und erhalten JSON zurück.
Authentifizierung
Jeder Aufruf braucht Ihren API-Schlüssel, außer /v1/sample. Senden Sie ihn im Header X-API-Key oder im Header Authorization: Bearer. Ihren Schlüssel finden Sie auf Ihrer Kontoseite.
Schlüssel beginnen mit eldb_live_. Halten Sie Ihren Schlüssel geheim: Fügen Sie ihn nie in den Code einer Webseite ein.
curl https://api.ecommerce-leads-database.com/v1/me \ -H "X-API-Key: eldb_live_…" # Oder alternativ: curl https://api.ecommerce-leads-database.com/v1/me \ -H "Authorization: Bearer eldb_live_…"
Endpoints
Alle URLs beginnen mit https://api.ecommerce-leads-database.com.
/v1/sampleKostenlose Stichprobe (ohne Schlüssel)
Liefert einige Shops: standardmäßig 10, höchstens 20. So sehen Sie das Datenformat, bevor Sie ein Abo abschließen. Zählt nicht zum Kontingent.
curl "https://api.ecommerce-leads-database.com/v1/sample?limit=10"
/v1/meIhr Plan und Ihr Kontingent
Liefert Ihren Plan, Ihre genutzten Anfragen und Shops, Ihre Datenbanken und das Datum der Zurücksetzung. Kostenlos: verbraucht weder Anfragen noch Shops.
curl https://api.ecommerce-leads-database.com/v1/me \
-H "X-API-Key: eldb_live_…"
{
"plan": "api_pro",
"planLabel": "Pro",
"requests": { "limit": 25000, "used": … },
"stores": { "limit": 10000, "used": … },
"databases": { "slots": 3, "selected": ["shopify", "woocommerce", "prestashop"] },
"exports": true,
"resetAt": "…"
}/v1/stores/countShops zählen
Liefert die Zahl der Shops, die zu den Filtern passen, und wie viele davon einen Google-Eintrag haben. Kostet 1 Anfrage und 0 Shops.
Parameter: platform, tld, country, hasGmb, hasEmail, hasPhone, app, currency, lang, operatorCountry, activeOnly, genericEmailsOnly, includeUnverified, includeAliases, maxChromeRank, mailProvider, dmarcPolicy, trackingId, hasDecisionMaker, hasDecisionMakerEmail
curl "https://api.ecommerce-leads-database.com/v1/stores/count?platform=shopify" \
-H "X-API-Key: eldb_live_…"
{ "count": 29331, "gmbCount": 6511 }Echte Zahlen für geprüfte Shopify-Shops.
/v1/stores/searchShops suchen
Filtert die Datenbank und liefert eine Ergebnisseite (items) mit einem Cursor (nextCursor).
Parameter: platform, tld, country, minProducts, hasGmb, hasEmail, hasPhone, app, currency, lang, operatorCountry, activeOnly, genericEmailsOnly, includeUnverified, includeAliases, maxChromeRank, mailProvider, dmarcPolicy, trackingId, hasDecisionMaker, hasDecisionMakerEmail, cursor, limit
- limit: 1 bis 100 Ergebnisse pro Seite. Standard: 50.
- Sortierung: vom höchsten zum niedrigsten Traffic. Shops ohne bekannten Traffic kommen zuletzt.
- Standardmäßig liefern search und count nur geprüfte Shops: echte Onlineshops, auf ihrer Website erneut geprüft. Mit includeUnverified=true erhalten Sie auch reine Unternehmensseiten und nicht erreichbare Websites.
- activeOnly ist standardmäßig true: als inaktiv bewertete Shops werden ausgelassen. Mit activeOnly=false werden sie einbezogen.
- Filter: hasEmail (E-Mail in den letzten 12 Monaten erfasst), hasPhone, app (erkannte App, z. B. Klaviyo), currency (EUR), lang (fr), operatorCountry (FR), genericEmailsOnly (mit hasEmail: nur allgemeine Postfächer). Ein ungültiger Wert ergibt 400 invalid_parameter, die Anfrage wird nicht berechnet.
- maxChromeRank (höchste Ranking-Stufe des Chrome UX Report: 1000, 5000, 10000, 50000, 100000, 500000, 1000000, 5000000, 10000000 oder 50000000). Jeder andere Wert liefert 400 invalid_parameter. Das Feld audience enthält Daten des Chrome UX Report (Google) unter der Lizenz CC BY-SA 4.0.
- mailProvider (aus dem MX abgeleiteter E-Mail-Anbieter: google-workspace, microsoft-365, ovh, infomaniak, ionos, gandi, zoho, proton, o2switch, hostinger, other, none) und dmarcPolicy (none, quarantine, reject oder missing). Jeder andere Wert liefert 400 invalid_parameter. Der Filter app findet auch Tools, die im DNS gelesen wurden (zum Beispiel Klaviyo über SPF). App-Slugs, die das DNS hinzufügen kann: klaviyo, mailchimp, brevo, shopify email, mailjet, sendgrid, hubspot, salesforce marketing cloud, omnisend, mandrill, amazon ses, zendesk, mailgun, meta business, google site verification, pinterest, apple, atlassian, zoom, stripe, shopify.
- Öffentliche Tracking-IDs: Mit trackingId finden Sie die anderen Shops, die denselben Code teilen. Übergeben Sie einen einzelnen Wert wie GTM-ABC123, AW-123456789, G-ABCDEF1234, UA-1234567-1 oder ca-pub-1234567890123456. Numerische IDs brauchen ihren Typ davor: meta:123456789012345, tiktok:…, pinterest:…, microsoftAds:…, linkedin:…, hotjar:…, criteo:…, snapchat:…, clarity:…, klaviyo:… (bei Klaviyo zählt die Groß- und Kleinschreibung). Jeder andere Wert liefert 400 invalid_parameter. Jedes Ergebnis enthält auch trackingIds (null, bis der Shop gelesen wurde).
- hasDecisionMaker=true|false (mindestens ein bekannter Entscheider oder keiner) und hasDecisionMakerEmail=true (mindestens ein Entscheider, dessen E-Mail auf der Website gefunden oder vom Mailserver angenommen wurde). Jeder andere Wert liefert 400 invalid_parameter. Jedes Ergebnis enthält außerdem hasDecisionMaker.
- Nächste Seite: Senden Sie den Wert von nextCursor im Parameter cursor zurück. Auf der letzten Seite ist nextCursor null.
- Jeder gelieferte Shop zählt zu Ihrem Shop-Budget. Eine Seite mit 50 Ergebnissen verbraucht 50 Shops.
- Jedes Ergebnis ist eine Shop-Zusammenfassung: Domain, Plattform, Land, Theme, Produktanzahl, Apps, Traffic, Händlername, Google-Bewertung und -Kategorie, hasEmail, hasPhone, hasDecisionMaker, currency, lang, operatorCountry, isActiveShop. Jedes Ergebnis enthält außerdem audience (null, wenn der Shop nicht im Ranking des Chrome UX Report steht). Jedes Ergebnis enthält außerdem dns (null, bis der Shop gelesen wurde). Für den vollständigen Datensatz /v1/stores/:domain aufrufen.
curl -G https://api.ecommerce-leads-database.com/v1/stores/search \
-H "X-API-Key: eldb_live_…" \
-d platform=shopify \
-d minProducts=50 \
-d hasGmb=true \
-d limit=50
{
"items": [
{ "domain": "…", "platform": "shopify", "productCount": …, "merchantName": "…", … }
],
"nextCursor": "18450:01J…"
}/v1/stores/:domainEintrag eines Shops
Liefert den vollständigen Datensatz eines Shops. Kostet 1 Anfrage und 1 Shop. Der Katalog ist nicht enthalten: /catalog verwenden. Jede E-Mail kommt mit ihrem Typ; mit genericEmailsOnly=true nur allgemeine Postfächer. genericEmailsOnly=true blendet auch die E-Mails der Entscheider aus.
| Feld | Inhalt |
|---|---|
domain | Domainname des Shops. |
platform | Erkannte E-Commerce-Plattform (shopify, woocommerce…). |
tld | Domain-Endung. |
country | Land (ISO-Code). |
theme | Erkanntes Theme. |
productCount | Anzahl erkannter Produkte. |
verificationStatus | Ergebnis der letzten Prüfung der Website. |
lastSuccessAt | Datum der letzten erfolgreichen Prüfung. |
firstSeenAt | Datum, an dem der Shop in die Datenbank kam. |
detectedApps | Auf der Website erkannte Apps und Tools. |
traffic | Schätzung des monatlichen Traffics und der organischen Keywords. |
audience | Chrome-Reichweite: { chromeRank, class, country, month, source }. chromeRank ist die Ranking-Stufe des Chrome UX Report (Google) für dieses Land: 1000, 5000, 10000 bis 50000000. null, wenn der Shop nicht im Ranking steht. Dieses Feld wird unter der Lizenz CC BY-SA 4.0 geteilt: Nennen Sie die Quelle und behalten Sie dieselbe Lizenz bei. Werte von class: top_1k, top_5k, top_10k, top_50k, top_100k, top_500k, top_1m, top_5m, top_10m, top_50m. Quelle Chrome UX Report: https://developer.chrome.com/docs/crux. Lizenz: https://creativecommons.org/licenses/by-sa/4.0/. Daten angepasst: Die Ränge wurden von uns den Shops zugeordnet und nach Land gruppiert. |
dns | DNS: { mailProvider, dmarcPolicy, apps, checkedAt }. mailProvider ist der aus dem MX abgeleitete E-Mail-Anbieter (google-workspace, microsoft-365, ovh, infomaniak, ionos, gandi, zoho, proton, o2switch, hostinger, other, none). dmarcPolicy ist none, quarantine, reject oder missing (kein Eintrag). apps listet die Tools für E-Mail-Versand und Domain-Verifizierung, die in den SPF- und TXT-Einträgen gelesen wurden. checkedAt ist das Datum der Auslesung. null, solange der Shop nicht gelesen wurde. Es wird kein Verifizierungstoken ausgegeben. |
trackingIds | trackingIds: öffentliche Tracking- und Werbe-IDs, nach Typ gruppiert, zum Beispiel { "gtm": ["GTM-ABC123"], "googleAds": ["AW-123456789"], "meta": ["123456789012345"] }. Typen: ga4, ua, gtm, googleAds, floodlight, adsense, meta, tiktok, pinterest, microsoftAds, linkedin, snapchat, criteo, clarity, hotjar, klaviyo. {} wenn nichts gefunden wurde, null, bis der Shop gelesen wurde. Nur Codes, die jeder Besucher im Quelltext der Seite sieht. |
platformVersion | Plattformversion (PrestaShop, Magento, Odoo), wenn die Website sie zeigt. |
operator | Land des Unternehmens hinter dem Shop ({ country, source }): aus USt-IdNr., Shopify-Einstellungen, Impressumsadresse, Telefon oder Domainendung, in dieser Reihenfolge. Kann von der Endung abweichen. |
isActiveShop | false, wenn der Shop inaktiv wirkt (leerer Katalog, Demoprodukte, Standardwährung), Gründe in activeShopReasons. null, solange nicht bewertet. |
legal | Impressumsseite: pageUrl, companyIds (SIREN, USt, BE-Unternehmensnummer, CH-UID, per Prüfziffer geprüft), legalForm. |
shopify | Shopify-Shops: shopId, isPlus, shipsToCountries, shopPayInstallments, collectionsCount, themeStoreId. |
catalogStats | Katalogzahlen, wenn die Plattform sie liefert: Durchschnittspreis und -gewicht, Varianten, Bilder, Marken, Produkttypen, Kategorien, Datum des neuesten Produkts. |
metadata | merchantName; contactEmail mit contactEmailType (generic, personal oder unknown) und emailDomainMatch; telephone (E.164) mit phoneType (mobile, fixed_line…); address; socialLinks; sources (Seite und Datum jeder Kontakterfassung); title, metaDescription, lang, currency, hreflangs, features, paymentMethods, shippingCarriers, salesChannels, copyrightYear, contactPageUrl, canonicalUrl. Ein Kontakt, der vor mehr als 12 Monaten erfasst wurde, oder eine E-Mail mit Widerspruch ist null; der Grund steht in contactEmailWithheld, telephoneWithheld oder addressWithheld. |
emails | Alle E-Mails, die der Shop veröffentlicht: [{ email, type, sourceUrl }]. type ist generic, personal oder unknown; sourceUrl ist die Seite, auf der die E-Mail gelesen wurde. Höchstens 10, die beste zuerst. Eine vor mehr als 12 Monaten gelesene oder von ihrem Inhaber entfernte E-Mail wird nicht geliefert. Mit genericEmailsOnly=true bleiben nur E-Mails vom Typ generic. |
decisionMakers | Entscheider: [{ firstName, lastName, role, source, sourceUrl, since, email, emailStatus }], der wichtigste Entscheider zuerst. role: owner (Inhaber, Einzelunternehmer), president (Präsident), managing_director (Generaldirektor, CEO, Geschäftsführer), manager (Gérant, Zaakvoerder), publication_director (Verantwortlicher für den Inhalt), partner (Gesellschafter), administrator (Verwaltungsrat, Vorstandsmitglied), other. source: rne (nationales Unternehmensregister, Frankreich), zefix (Handelsregister, Schweiz) oder legal_page (Impressum des Shops). sourceUrl: die öffentliche Registerseite des Unternehmens oder das Impressum. since: Beginn der Funktion, wenn das Register ihn angibt, sonst null. emailStatus: found_on_site (auf der Website veröffentlichte Adresse), valid (vom Mailserver der Domain angenommen), catch_all (der Server nimmt jede Adresse an: wahrscheinlichstes Format, nicht bestätigt), pattern (aus dem Adressformat der Domain abgeleitet, nicht geprüft), not_found (keine Adresse vom Server angenommen), null (keine Adresse bekannt). email ist null, wenn der Inhaber die Adresse entfernt hat, wenn sie älter als 12 Monate ist oder mit genericEmailsOnly=true. Ein vor mehr als 12 Monaten gelesener Entscheider wird nicht mehr geliefert. Nie Geburtsdatum, Staatsangehörigkeit oder Privatadresse. |
company | Eintrag im Unternehmensregister: { registry, registryId, officialName, activityCode, headcountBand, createdOn, category, legalFormCode, active, hq, checkedAt }. registry ist fr, be oder ch; registryId ist die SIREN, die belgische Unternehmensnummer oder die Schweizer UID. officialName: eingetragene Firma. activityCode: Tätigkeitscode (NAF oder NACE). headcountBand: Mitarbeiterklasse, zum Beispiel "10-19". createdOn: Gründungsdatum. category: Unternehmenskategorie (Frankreich). legalFormCode: Rechtsformcode des Registers. active: false, wenn das Unternehmen geschlossen ist. hq: Postleitzahl und Ort des Sitzes. checkedAt: Datum der letzten Registerabfrage. Ein Feld, das das Register nicht angibt, ist null. company ist null, wenn der Shop keine Unternehmensnummer hat, wenn das Register ihn nicht kennt oder wenn die Abfrage älter als 12 Monate ist. |
gmb | Google-Profil: placeId, category, additionalCategories, rating, ratingDistribution, isClaimed, totalPhotos, workTime, address, addressInfo, latitude, longitude, phone, website. null, wenn keines existiert. |
curl https://api.ecommerce-leads-database.com/v1/stores/probikeshop.fr \
-H "X-API-Key: eldb_live_…"
{
"store": {
"domain": "probikeshop.fr",
"platform": "shopify",
"tld": "fr",
"country": "FR",
"theme": "…",
"productCount": 5000,
"verificationStatus": "…",
"lastSuccessAt": "…",
"detectedApps": ["…"],
"trackingIds": { "gtm": ["GTM-ABC123"], "googleAds": ["AW-123456789"] },
"operator": { "country": "FR", "source": "vat" },
"isActiveShop": true,
"legal": { "pageUrl": "…", "companyIds": { "siren": "…", "vat": "…" }, "legalForm": "SAS" },
"metadata": {
"merchantName": "…",
"contactEmail": "…",
"contactEmailType": "generic",
"contactEmailWithheld": null,
"telephone": "+33…",
"phoneType": "fixed_line",
"address": { … },
"sources": {
"contactEmail": { "url": "https://…/mentions-legales", "at": "2026-10-19T08:00:00.000Z" }
},
"socialLinks": { "instagram": "…" },
"currency": "EUR",
"lang": "fr"
},
"emails": [
{ "email": "contact@…", "type": "generic", "sourceUrl": "https://…/contact" }
],
"decisionMakers": [
{
"firstName": "Marie", "lastName": "Durand", "role": "president",
"source": "rne", "sourceUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/…",
"since": "2019-03-01", "email": "marie.durand@…", "emailStatus": "valid"
}
],
"company": {
"registry": "fr", "registryId": "…", "officialName": "…",
"activityCode": "47.91B", "headcountBand": "10-19", "createdOn": "…",
"category": "PME", "legalFormCode": "5710", "active": true,
"hq": "…", "checkedAt": "…"
},
"gmb": {
"placeId": "…", "category": "…", "rating": 4.5, "votes": 594,
"address": "…", "phone": "…", "website": "…"
}
}
}/v1/stores/:domain/catalogPro und ScaleProduktkatalog
Liefert die Produkte des Shops, höchstens 5.000. Verfügbar für einen Teil der Shopify- und WooCommerce-Shops. Sonst Fehler 404 no_catalog, nicht berechnet. Kostet 10 Anfragen.
curl https://api.ecommerce-leads-database.com/v1/stores/probikeshop.fr/catalog \
-H "X-API-Key: eldb_live_…"
{
"domain": "probikeshop.fr",
"catalog": [
{
"id": "…", "title": "…", "handle": "…", "vendor": "…",
"productType": "…", "tags": ["…"],
"price": …, "compareAtPrice": …, "currency": "EUR",
"available": true, "imageUrl": "…", "imageCount": …, "variantCount": …,
"createdAt": "…", "updatedAt": "…"
}
]
}/v1/stores/:domain/trendPro und ScaleTraffic-Trend
Liefert den monatlichen Verlauf von organischem Traffic und Rankings. Fehler 404 no_trend, wenn keine Daten vorliegen, nicht berechnet. Kostet 2 Anfragen.
curl https://api.ecommerce-leads-database.com/v1/stores/probikeshop.fr/trend \
-H "X-API-Key: eldb_live_…"
{
"domain": "probikeshop.fr",
"trend": [
{ "date": "2026-07-01", "organicTraffic": 197021, "organicPositions": 19377 }
],
"savedAt": "2026-07-01T04:12:08.441Z"
}Mit Ihren Schlüsseln anreichern
Finden Sie E-Mail und Telefon der Entscheider eines Shops mit Ihrem eigenen Konto bei Apollo, FullEnrich, Kaspr oder Dropcontact. Der Aufruf nutzt Ihre Credits beim Anbieter. Die Ergebnisse gehören Ihnen: Kein anderer Kunde sieht sie.
Speichern Sie Ihre Anbieter-Schlüssel in Ihrem Konto, auf der Seite Meine Anbieter-Schlüssel. Sie laufen nie über die API: Ein gestohlener ELDB-Schlüssel kann sie weder lesen noch ändern.
Pro Anfrage: 25 Shops und 3 Entscheider pro Shop. Pro Kunde: 3 laufende Anreicherungen und 500 Personen pro Anbieter und Tag (UTC). Ein Ergebnis wird 12 Monate geliefert und nach 13 Monaten gelöscht.
/v1/enrichment/providersIhre Anbieter
Listet die Anbieter mit gespeichertem Schlüssel, mit Status und verbleibenden Credits, wenn der Anbieter sie mitteilt. Kostenlos.
curl https://api.ecommerce-leads-database.com/v1/enrichment/providers \
-H "X-API-Key: eldb_live_…"
{
"providers": [
{ "provider": "dropcontact", "status": "valid", "creditsRemaining": 250 }
]
}/v1/enrichmentsEine Anreicherung starten
Senden Sie provider und domain (ein Shop) oder domains (höchstens 25). maxPeoplePerStore: 1 bis 3, Standard 2. phones: true, um auch Telefonnummern anzufragen (mehr Credits). force: true, um eine Person erneut anzureichern, die vor weniger als 30 Tagen angereichert wurde. Kostet 1 Anfrage und 1 Shop pro Shop mit Entscheidern. Antwort 200 mit den Ergebnissen, wenn der Anbieter sofort antwortet, sonst 202: Verfolgen Sie den Job.
curl -X POST https://api.ecommerce-leads-database.com/v1/enrichments \
-H "X-API-Key: eldb_live_…" \
-H "Content-Type: application/json" \
-d '{ "provider": "dropcontact", "domains": ["probikeshop.fr"], "maxPeoplePerStore": 2 }'
HTTP/1.1 202 Accepted
{
"job": {
"id": "…", "provider": "dropcontact", "status": "queued", "phones": false,
"storeCount": 1, "personCount": 2, "creditsUsed": null, "errorCode": null,
"createdAt": "…", "updatedAt": "…"
},
"results": [
{ "domain": "probikeshop.fr", "status": "ok", "people": [ … ] }
]
}/v1/enrichments/:jobIdEine Anreicherung verfolgen
Liefert den Status des Jobs (queued, submitted, done, partial, failed, canceled) und die Ergebnisse pro Shop. Kostenlos. Warten Sie mindestens 20 Sekunden zwischen zwei Aufrufen.
curl https://api.ecommerce-leads-database.com/v1/enrichments/<jobId> \ -H "X-API-Key: eldb_live_…"
/v1/stores/:domain/enrichmentErgebnisse eines Shops
Liefert die Plattform, den Händlernamen, die Entscheider, Ihre Anbieter und Ihre Ergebnisse. Kostet 1 Anfrage und 1 Shop. DELETE auf derselben URL löscht Ihre Ergebnisse für diesen Shop.
curl https://api.ecommerce-leads-database.com/v1/stores/probikeshop.fr/enrichment \
-H "X-API-Key: eldb_live_…"
{
"domain": "probikeshop.fr",
"platform": "…",
"merchantName": "…",
"providers": ["dropcontact"],
"decisionMakers": [{ "firstName": "…", "lastName": "…", "role": "president" }],
"results": [
{
"firstName": "…", "lastName": "…", "role": "president", "provider": "dropcontact",
"status": "found", "skipReason": null,
"email": "…", "emailStatus": "valid", "emailStatusRaw": "nominative@pro", "emailKind": "professional",
"phone": null, "phoneType": null, "linkedinUrl": "…", "jobTitle": "…",
"creditsUsed": 1, "errorCode": null, "enrichedAt": "…", "reused": false
}
]
}Jedes Ergebnis enthält firstName, lastName, role, provider, status (pending, found, not_found, skipped, error), skipReason, email, emailStatus (valid, risky, catch_all, invalid, unknown), emailStatusRaw (die Bezeichnung des Anbieters), emailKind (professional, generic, personal), phone, phoneType, linkedinUrl, jobTitle, creditsUsed, errorCode, enrichedAt und reused (true: ein schon gefundenes Ergebnis, keine neuen Credits).
GET /v1/stores/:domain liefert auch enrichment: Ihre eigenen Ergebnisse für diesen Shop, neben decisionMakers. Leeres Array, wenn Sie keine haben.
Kontingente und Kosten
Jeder Plan hat zwei Zähler: Anfragen und Shops. Beide werden bei jeder Verlängerung Ihres Abos zurückgesetzt.
Wir schicken Ihnen eine E-Mail, sobald Sie 80 % eines Zählers verbraucht haben.
- Starter (49 € zzgl. MwSt.): 5.000 Anfragen und 2.500 Shops pro Monat. 1 Plattform-Datenbank nach Wahl.
- Pro (149 € zzgl. MwSt.): 25.000 Anfragen und 10.000 Shops pro Monat. 3 Datenbanken nach Wahl. Katalog und Trends.
- Scale (449 € zzgl. MwSt.): 150.000 Anfragen und 40.000 Shops pro Monat. Alle Datenbanken. Katalog und Trends.
Das Shop-Budget zählt jeden Shop, den /v1/stores/search liefert, und 1 Shop pro Aufruf von /v1/stores/:domain. /v1/stores/count und /v1/me verbrauchen keine Shops.
Fehler 404, 403 und 409 werden nicht berechnet.
| Endpoint | Anfragen | Shops |
|---|---|---|
/v1/sample | 0 | 0 |
/v1/me | 0 | 0 |
/v1/stores/count | 1 | 0 |
/v1/stores/search | 1 | 1 pro gelieferten Shop |
/v1/stores/:domain | 1 | 1 |
/v1/stores/:domain/catalog | 10 | 0 |
/v1/stores/:domain/trend | 2 | 0 |
/v1/enrichment/providers | 0 | 0 |
POST /v1/enrichments | 1 | 1 pro Shop mit Entscheidern |
/v1/enrichments/:jobId | 0 | 0 |
/v1/stores/:domain/enrichment | 1 | 1 |
Antwort-Header
X-RateLimit-Limit: in diesem Monat enthaltene Anfragen.X-RateLimit-Remaining: verbleibende Anfragen.X-RateLimit-Reset: Datum der Zurücksetzung, bei Verlängerung des Abos.X-Stores-Limit: in diesem Monat enthaltene Shops.X-Stores-Remaining: verbleibende Shops.
Fehler
Ein Fehler liefert einen HTTP-Statuscode und ein JSON mit dem Feld error.
| HTTP | Code | Bedeutung |
|---|---|---|
| 400 | invalid_parameter | Ein Parameter ist ungültig, zum Beispiel limit außerhalb von 1 bis 100. |
| 401 | missing_api_key | Kein Schlüssel gesendet. |
| 401 | invalid_api_key | Unbekannter oder widerrufener Schlüssel. |
| 402 | active_subscription_required | Kein aktives Abo für dieses Konto. |
| 402 | plan_upgrade_required | Endpoint nicht in Ihrem Plan enthalten (reason: exports_not_in_plan). Katalog und Trends erfordern Pro oder Scale. |
| 403 | plan_restriction | Plattform nicht in Ihren Datenbanken (reason: platform_locked). Das Feld allowed listet Ihre Datenbanken. |
| 404 | not_found | Unbekannte Domain. |
| 404 | no_catalog | Kein Katalog für diesen Shop. |
| 404 | no_trend | Kein Trend für diesen Shop. |
| 409 | no_database_selected | Wählen Sie zuerst Ihre Datenbanken in Ihrem Konto. |
| 429 | quota_exceeded | Anfrage-Kontingent bis resetAt aufgebraucht. |
| 429 | store_quota_exceeded | Shop-Budget bis resetAt aufgebraucht. |
| 429 | rate_limited | Zu viele Aufrufe in kurzer Zeit. Warten Sie die Frist aus dem Header Retry-After ab. |
| 429 | platform_change_limited | Datenbankwechsel nur 1 Mal alle 30 Tage möglich. |
| 400 | too_many_stores | Mehr als 25 Shops in einer Anreicherung. |
| 402 | provider_out_of_credits | Ihr Konto beim Anbieter hat keine Credits mehr. |
| 404 | provider_not_available | Dieser Anbieter ist für die Anreicherung nicht freigeschaltet. |
| 409 | provider_key_missing | Für diesen Anbieter ist kein Schlüssel gespeichert. |
| 422 | provider_key_invalid | Der Anbieter hat Ihren Schlüssel abgelehnt. Ersetzen Sie ihn in Ihrem Konto. |
| 422 | provider_plan_has_no_api | Ihr Tarif beim Anbieter enthält keinen API-Zugang. |
| 429 | byok_open_jobs | Es laufen schon 3 Anreicherungen. Warten Sie, bis eine fertig ist. |
| 429 | byok_daily_cap | Heute wurden 500 Personen an diesen Anbieter gesendet. Versuchen Sie es morgen erneut. |
| 429 | provider_rate_limited | Der Anbieter bittet, langsamer zu machen. Der Job läuft von selbst weiter. |
| 502 | provider_unavailable | Der Anbieter antwortet nicht. Der Job versucht es selbst erneut. |
| 503 | opt_out_unavailable | Eine Pause von ein paar Minuten: Die Prüfung der Widersprüche antwortet nicht. Es wird nichts gesendet. |
Beispielantwort bei aufgebrauchtem Shop-Budget:
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 25000
X-RateLimit-Remaining: 0
X-Stores-Limit: 10000
X-Stores-Remaining: 0
{
"error": "store_quota_exceeded",
"plan": "api_pro",
"quotaMonthly": 25000,
"quotaUsed": …,
"storesMonthly": 10000,
"storesUsed": 10000,
"resetAt": "…"
}MCP-Server
Verbinden Sie Ihren KI-Agenten (Claude, Cursor…) mit der Datenbank. Gleicher Schlüssel, gleiche Kontingente. Der Server bietet 8 Tools:
search_stores: Shops mit Filtern suchen.count_stores: Shops zählen.get_store: den Eintrag eines Shops lesen.get_store_catalog: den Katalog lesen (Pro und Scale).get_store_trend: den Traffic-Trend lesen (Pro und Scale).enrich_store: die Entscheider eines oder mehrerer Shops mit Ihrem Anbieter-Schlüssel anreichern.get_enrichment: eine Anreicherung verfolgen, die Ergebnisse eines Shops lesen oder Ihre Anbieter auflisten.get_quota: Ihren Plan und Ihr verbleibendes Kontingent ansehen.
Claude Code
claude mcp add eldb --transport http https://mcp.ecommerce-leads-database.com/mcp \ --header "X-API-Key: eldb_live_…"
Cursor und kompatible Clients (JSON)
Für einen Client, der einen entfernten HTTP-Server mit Headern akzeptiert, etwa Cursor (Datei mcp.json):
{
"mcpServers": {
"eldb": {
"url": "https://mcp.ecommerce-leads-database.com/mcp",
"headers": {
"Authorization": "Bearer eldb_live_…"
}
}
}
}Claude Desktop: Nutzen Sie die Brücke mcp-remote in claude_desktop_config.json:
{
"mcpServers": {
"eldb": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://mcp.ecommerce-leads-database.com/mcp",
"--header", "Authorization: Bearer eldb_live_…"
]
}
}
}Der Schlüssel gehört immer in einen Header. Setzen Sie ihn nie in die URL.
Codebeispiele
Alle Shopify-Shops mit Google-Eintrag auflisten, Seite für Seite.
JavaScript (fetch)
const API = "https://api.ecommerce-leads-database.com";
const headers = { "X-API-Key": process.env.ELDB_API_KEY };
let cursor = null;
do {
const url = new URL("/v1/stores/search", API);
url.searchParams.set("platform", "shopify");
url.searchParams.set("hasGmb", "true");
url.searchParams.set("limit", "50");
if (cursor) url.searchParams.set("cursor", cursor);
const res = await fetch(url, { headers });
if (res.status === 429) {
console.log(await res.json()); // Kontingent oder Budget aufgebraucht: siehe resetAt
break;
}
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { items, nextCursor } = await res.json();
for (const store of items) console.log(store.domain);
console.log("Verbleibende Shops:", res.headers.get("X-Stores-Remaining"));
cursor = nextCursor;
} while (cursor);Python (requests)
import os
import requests
API = "https://api.ecommerce-leads-database.com"
headers = {"X-API-Key": os.environ["ELDB_API_KEY"]}
params = {"platform": "shopify", "hasGmb": "true", "limit": 50}
while True:
r = requests.get(f"{API}/v1/stores/search", headers=headers, params=params)
if r.status_code == 429:
print(r.json()) # Kontingent oder Budget aufgebraucht: siehe resetAt
break
r.raise_for_status()
data = r.json()
for store in data["items"]:
print(store["domain"])
print("Verbleibende Shops:", r.headers.get("X-Stores-Remaining"))
if not data["nextCursor"]:
break
params["cursor"] = data["nextCursor"]