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 — from $49 Talk to us about volume REST + MCP · 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 (Scale and up)

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 + MCP included from Starter

The REST API and the MCP server are bundled from Starter ($49) - because programmatic access is how this data is meant to be used. Access is rate-limited per key (independent of your monthly quota); the rate limit and the premium layers grow as you move up. Only the Free plan is web-app-only.

PlanPriceAPI / MCPVerdict for a developer
Free$0web app onlyTry the data in the browser first.
Starter$49/moREST + MCP (moderate)The entry tier to build on.
Pro$149/mo+ contact API (high)Add contact reveals + traffic/GMB.
Scale$449/mo+ R2 + webhooks (very high)High-volume pipelines.
Enterprisecustomhigher limits + SLABeyond Scale volume, custom filters, SLA.

Starter: 5,000 records / mo · REST API + MCP server · Technographics + products · CSV / JSON export

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.