The e-commerce store data API you don't have to maintain

Shopify has no merchant directory endpoint. So teams build a scraper - and spend the next quarter fixing it. We run the pipeline; you consume a stable REST API of store records.

GET /v1/stores?platform=Shopify&country=US live
id str_a8f3c2
domain example-merchant.com
platform Shopify
country US
last_verified 2026-06-18
next_cursor: eyJp… →
Get API access (Scale) Talk to us about volume REST + JSON · base: api.ecom-lead-database.com

What happens without a clean feed

It always starts the same way. A quick Python script hits /products.json on a list of known domains - that's the public, canonical Shopify signature, and it works. Then you want the secondary stack, and the maintenance treadmill begins.

  • Stores on Hydrogen or a decoupled proxy don't return the HTML you expect - cascading false negatives.
  • Anti-bot blocks you after a few thousand requests an hour; you start renting residential proxies and the cost climbs.
  • A renamed CSS class flips a detector to false positives on thousands of stores for a week.
  • A junior dev spends three days working out why a signal "dropped 40%" when no merchant actually migrated.

That's pure technical debt. A home-grown store crawler isn't your product's edge - it's a distraction from it.

The flow: fetch, subscribe, integrate

1. Fetch a batch with filters

Call /v1/stores with the filters that fit your case. Cursor pagination, 100 results per page.

curl -H "Authorization: Bearer $API_KEY" \
  "https://api.ecom-lead-database.com/v1/stores?platform=Shopify&country=US&limit=100&cursor=eyJp..."

Response:

{
  "data": [
    {
      "id": "str_a8f3c2",
      "domain": "example-merchant.com",
      "name": "Example Merchant",
      "platform": "Shopify",
      "country": "US",
      "theme": "Impact",
      "first_seen": "2025-02-12",
      "last_verified": "2026-06-18"
    }
  ],
  "next_cursor": "eyJp...",
  "remaining_quota": 19842
}

Honest note: secondary tech booleans (Klaviyo, Shopify Plus, Recharge, Judge.me as filters) and fine sector classification are not fully populated across the base yet - they're being rolled out. Today, platform, country and theme are the reliable filters. When the rest is computed, you get it through the same endpoint with no code change.

2. Subscribe to new stores via signed webhooks

Register a receiver in the dashboard. When a new store is added to the base, a POST signed with HMAC-SHA256 is sent to your endpoint.

# Verify the webhook signature server-side
import hmac, hashlib

def verify_webhook(body: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

3. Integrate into your stack

Write the payload to Postgres / Mongo / BigQuery - a stores table indexed on domain and last_verified is the usual pattern. In n8n, Make or Zapier it's a four-step flow: webhook receiver → filter → upsert → notify.

API access starts on Scale

REST API access is bundled into the Scale plan; portals below it are dashboard-and-export only. If you need volume or limits beyond Scale, that's an Enterprise conversation, not a hidden overage bill.

PlanPriceAPIVerdict for a developer
Starter / Pro$49–149/moportal onlyDashboard + manual exports. Not your flow.
Scale$449/moREST + exportsThe right tier to build on.
Enterprisecustomhigher limits + SLABeyond Scale volume, custom filters, SLA.

Scale: 150,000 records / mo · 20,000 searches / mo · All platforms unlocked · REST API + exports

Technical limits, stated up front

Transparency first - we don't sell what we don't have.

Secondary tech filters

Klaviyo / Plus / Recharge / Yotpo as booleans aren't fully in the base yet. Theme is the available maturity proxy today.

No official SDK

REST + JSON only. Any HTTP client works. We'd rather stabilise the endpoint contract before freezing an SDK.

Hard quotas, no silent overage

Past your monthly quota you get a clear 429, not a surprise invoice. Cross it two months running and we move you to a custom plan.

Geography of the data

The store catalog is .fr today; global English-market coverage is being expanded. Ask what's live for your target country before you build on it.