StoreRadar API

REST API for accessing Shopify store intelligence data.

Authentication

All requests require an API token passed in the Authorization header.

Create and manage API tokens from Account Settings → API Tokens.

Note: Sign in to see your API token in the examples below.
Note: Requests without a valid token receive a 401 Unauthorized response.

Base URL

All API endpoints are relative to:

https://storeradar.io/api/v1

Authentication

Header format
Authorization: token YOUR_API_TOKEN
Example request
curl -H "Authorization: token YOUR_API_TOKEN" \
     "https://storeradar.io/api/v1/stores?domain=allbirds.com"

Get Store

Look up a Shopify store by domain and return its full profile including apps, technologies, contacts, and theme data.

GET /api/v1/stores

Query Parameters

Name Type Required Description
domain string Yes The store domain (e.g. allbirds.com)
account_id integer No Account to use (for multi-account users)

Behavior

Scenario Status Result
Store already revealed 200 Returns store data. No credits charged.
Store exists, not revealed 200 Reveals store (1 credit), returns data.
Store not in database 202 Starts crawl. Returns job_id.
Currently being crawled 202 Returns processing status.
Not a Shopify store 404 Store could not be analyzed.

Request

curl -H "Authorization: token YOUR_API_TOKEN" \
     "https://storeradar.io/api/v1/stores?domain=allbirds.com"

Success Response (200)

{
  "store": {
    "id": 123,
    "canonical_host": "allbirds.com",
    "name": "Allbirds",
    "storeradar_score": 92,
    "seo_lite_score": 78,
    "lead_score": 85,
    "product_count": 142,
    "collections_count": 12,
    "has_blog": true,
    "locale": "en",
    "currency": "USD",
    "country_codes": ["US", "CA", "GB"],
    "languages": ["en"],
    "industry": "Fashion & Apparel",
    "pricing_plan": "Shopify Plus",
    "password_protected": false,
    "tags": ["sustainable", "footwear"],
    "social_media": {
      "instagram": "https://instagram.com/allbirds",
      "twitter": "https://twitter.com/allbirds"
    },
    "emails": [
      {
        "value": "help@allbirds.com",
        "verified": true,
        "valid": true,
        "verification_status": "valid",
        "generic": true
      }
    ],
    "theme": {
      "name": "Dawn",
      "version": "12.0.0",
      "pricing_type": "paid"
    },
    "apps": [
      {
        "id": 1,
        "name": "Klaviyo",
        "slug": "klaviyo",
        "url": "https://apps.shopify.com/klaviyo",
        "tagline": "Email, SMS & Push for eCommerce",
        "primary_category": "Marketing",
        "rating": 4.6,
        "reviews_count": 2841,
        "pricing_summary": "Free to install"
      }
    ],
    "apps_count": 1,
    "technologies": [
      {
        "id": 1,
        "name": "Google Analytics",
        "slug": "google-analytics",
        "categories": ["Analytics"],
        "groups": ["Marketing"]
      }
    ],
    "technologies_count": 1,
    "domain_expires_at": "2026-05-15",
    "lead": {
      "id": 456,
      "revealed_at": "2024-12-15T10:30:00Z",
      "stage_key": "new",
      "status": "charged"
    }
  }
}

Processing Response (202)

{
  "status": "processing",
  "job_id": "3b409764-0fd8-46e9-b834-9046b8ffea18",
  "message": "Store is being analyzed. Poll again."
}

Response Fields

The store object includes:

Field Type Description
idintegerUnique store identifier
canonical_hoststringPrimary domain
namestringStore name
storeradar_scoreintegerQuality score (0-100)
seo_lite_scoreintegerSEO score (0-100)
lead_scoreintegerLead quality score
product_countintegerNumber of products
collections_countintegerNumber of collections
articles_countintegerNumber of blog articles
pages_countintegerNumber of pages
has_blogbooleanWhether store has a blog
localestringPrimary locale
currencystringStore currency
country_codesarrayTarget country codes
languagesarraySupported languages
industrystringDetected industry
pricing_planstringShopify pricing plan
password_protectedbooleanStore is password protected
password_protected_atdatetimeWhen protection was detected
tagsarrayStore tags/labels
emailsarrayContact emails with verification
phone_numbersarrayContact phone numbers
social_mediaobjectSocial media links
themeobjectShopify theme details
appsarrayInstalled Shopify apps (id, name, slug, url, tagline, category, rating, reviews_count, pricing)
apps_countintegerNumber of apps installed
technologiesarrayDetected technologies (with categories/groups)
technologies_countintegerNumber of technologies
peoplearrayKey contacts/employees
pixelsarrayTracking pixels detected
domain_created_atdatetimeDomain registration date
domain_expires_atdatetimeDomain expiry date
first_seen_atdatetimeFirst detection date
last_detected_atdatetimeMost recent detection
leadobjectLead status for your account

Polling for Results

# 1. First request - store not in DB
curl -H "Authorization: token YOUR_API_TOKEN" \
     "https://storeradar.io/api/v1/stores?domain=newstore.com"
# => 202 {"status":"processing","job_id":"..."}

# 2. Wait 15-30 seconds, poll again
curl -H "Authorization: token YOUR_API_TOKEN" \
     "https://storeradar.io/api/v1/stores?domain=newstore.com"
# => 200 {"store": {...}} when ready
# => 202 if still processing
# => 404 if crawl failed

Response Codes

Code Meaning Description
200 OK Store found and revealed successfully.
202 Accepted Store is being analyzed. Poll again.
401 Unauthorized Missing or invalid API token.
402 Payment Required Insufficient credits.
404 Not Found Store not found or crawl failed.
422 Unprocessable Invalid or missing domain parameter.

Error Handling

All errors return a JSON object with error and message fields.

Error Responses

402 - Insufficient credits
{
  "error": "Insufficient credits",
  "message": "Insufficient credits to reveal store"
}
422 - Invalid domain
{
  "error": "Invalid domain",
  "message": "domain parameter is required"
}
404 - Store not found
{
  "error": "Store not found",
  "message": "Unable to analyze this domain"
}