Der Verkauf ist noch nicht gestartet. Die Preise sind unverbindlich. Pilotzugang beantragen

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.

GET/v1/sample

Kostenlose 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"
GET/v1/me

Ihr 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": "…"
}
GET/v1/stores/count

Shops 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.

GET/v1/stores/search

Shops 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…"
}
GET/v1/stores/:domain

Eintrag 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.

FeldInhalt
domainDomainname des Shops.
platformErkannte E-Commerce-Plattform (shopify, woocommerce…).
tldDomain-Endung.
countryLand (ISO-Code).
themeErkanntes Theme.
productCountAnzahl erkannter Produkte.
verificationStatusErgebnis der letzten Prüfung der Website.
lastSuccessAtDatum der letzten erfolgreichen Prüfung.
firstSeenAtDatum, an dem der Shop in die Datenbank kam.
detectedAppsAuf der Website erkannte Apps und Tools.
trafficSchätzung des monatlichen Traffics und der organischen Keywords.
audienceChrome-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.
dnsDNS: { 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.
trackingIdstrackingIds: ö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.
platformVersionPlattformversion (PrestaShop, Magento, Odoo), wenn die Website sie zeigt.
operatorLand des Unternehmens hinter dem Shop ({ country, source }): aus USt-IdNr., Shopify-Einstellungen, Impressumsadresse, Telefon oder Domainendung, in dieser Reihenfolge. Kann von der Endung abweichen.
isActiveShopfalse, wenn der Shop inaktiv wirkt (leerer Katalog, Demoprodukte, Standardwährung), Gründe in activeShopReasons. null, solange nicht bewertet.
legalImpressumsseite: pageUrl, companyIds (SIREN, USt, BE-Unternehmensnummer, CH-UID, per Prüfziffer geprüft), legalForm.
shopifyShopify-Shops: shopId, isPlus, shipsToCountries, shopPayInstallments, collectionsCount, themeStoreId.
catalogStatsKatalogzahlen, wenn die Plattform sie liefert: Durchschnittspreis und -gewicht, Varianten, Bilder, Marken, Produkttypen, Kategorien, Datum des neuesten Produkts.
metadatamerchantName; 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.
emailsAlle 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.
decisionMakersEntscheider: [{ 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.
companyEintrag 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.
gmbGoogle-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": "…"
    }
  }
}
GET/v1/stores/:domain/catalogPro und Scale

Produktkatalog

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": "…"
    }
  ]
}
GET/v1/stores/:domain/trendPro und Scale

Traffic-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.

GET/v1/enrichment/providers

Ihre 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 }
  ]
}
POST/v1/enrichments

Eine 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": [ … ] }
  ]
}
GET/v1/enrichments/:jobId

Eine 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_…"
GET/v1/stores/:domain/enrichment

Ergebnisse 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.

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.

EndpointAnfragenShops
/v1/sample00
/v1/me00
/v1/stores/count10
/v1/stores/search11 pro gelieferten Shop
/v1/stores/:domain11
/v1/stores/:domain/catalog100
/v1/stores/:domain/trend20
/v1/enrichment/providers00
POST /v1/enrichments11 pro Shop mit Entscheidern
/v1/enrichments/:jobId00
/v1/stores/:domain/enrichment11

Antwort-Header

Fehler

Ein Fehler liefert einen HTTP-Statuscode und ein JSON mit dem Feld error.

HTTPCodeBedeutung
400invalid_parameterEin Parameter ist ungültig, zum Beispiel limit außerhalb von 1 bis 100.
401missing_api_keyKein Schlüssel gesendet.
401invalid_api_keyUnbekannter oder widerrufener Schlüssel.
402active_subscription_requiredKein aktives Abo für dieses Konto.
402plan_upgrade_requiredEndpoint nicht in Ihrem Plan enthalten (reason: exports_not_in_plan). Katalog und Trends erfordern Pro oder Scale.
403plan_restrictionPlattform nicht in Ihren Datenbanken (reason: platform_locked). Das Feld allowed listet Ihre Datenbanken.
404not_foundUnbekannte Domain.
404no_catalogKein Katalog für diesen Shop.
404no_trendKein Trend für diesen Shop.
409no_database_selectedWählen Sie zuerst Ihre Datenbanken in Ihrem Konto.
429quota_exceededAnfrage-Kontingent bis resetAt aufgebraucht.
429store_quota_exceededShop-Budget bis resetAt aufgebraucht.
429rate_limitedZu viele Aufrufe in kurzer Zeit. Warten Sie die Frist aus dem Header Retry-After ab.
429platform_change_limitedDatenbankwechsel nur 1 Mal alle 30 Tage möglich.
400too_many_storesMehr als 25 Shops in einer Anreicherung.
402provider_out_of_creditsIhr Konto beim Anbieter hat keine Credits mehr.
404provider_not_availableDieser Anbieter ist für die Anreicherung nicht freigeschaltet.
409provider_key_missingFür diesen Anbieter ist kein Schlüssel gespeichert.
422provider_key_invalidDer Anbieter hat Ihren Schlüssel abgelehnt. Ersetzen Sie ihn in Ihrem Konto.
422provider_plan_has_no_apiIhr Tarif beim Anbieter enthält keinen API-Zugang.
429byok_open_jobsEs laufen schon 3 Anreicherungen. Warten Sie, bis eine fertig ist.
429byok_daily_capHeute wurden 500 Personen an diesen Anbieter gesendet. Versuchen Sie es morgen erneut.
429provider_rate_limitedDer Anbieter bittet, langsamer zu machen. Der Job läuft von selbst weiter.
502provider_unavailableDer Anbieter antwortet nicht. Der Job versucht es selbst erneut.
503opt_out_unavailableEine 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:

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"]