Tutorial

How to Search Shopify Products via Google

Discover Shopify products across every store using Google SERP's product schema. No per-store OAuth needed.

Shopify's Admin API is per-store and requires OAuth, which is useless for cross-store product discovery. Google aggressively indexes Shopify product pages with product schema markup, which means you can discover Shopify products at scale via Google SERP. This tutorial shows how to use Scavio to find Shopify products across every store.

Prerequisites

  • Python 3.8+
  • A Scavio API key
  • A target product category or search term

Walkthrough

Step 1: Build a Shopify-targeted Google query

Use site operators and Shopify-specific URL patterns.

Python
query = 'site:myshopify.com OR "powered by shopify" wireless earbuds under $50'

Step 2: Call Scavio for structured results

Scavio returns product-schema data when available.

Python
import requests, os

def shopify_search(query):
    r = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
        json={'query': query, 'num_results': 30})
    return r.json().get('organic_results', [])

Step 3: Filter to Shopify stores

Keep results that come from actual Shopify storefronts.

Python
def is_shopify(url):
    return 'myshopify.com' in url or any(m in url for m in ['/products/', '/collections/'])

shopify_results = [r for r in shopify_search(query) if is_shopify(r['link'])]

Step 4: Extract product data

For each Shopify URL, fetch the page and parse the structured data.

Python
def extract_product(url):
    r = requests.post('https://api.scavio.dev/api/v1/extract',
        headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
        json={'url': url, 'render_js': True, 'extract_schema': 'Product'})
    return r.json().get('schema', {})

Step 5: Assemble catalog

Build a normalized product catalog from the extracted data.

Python
catalog = []
for r in shopify_results[:10]:
    product = extract_product(r['link'])
    if product:
        catalog.append({
            'title': product.get('name'),
            'price': product.get('offers', {}).get('price'),
            'store': r['link'].split('/')[2],
            'url': r['link']
        })
print(catalog)

Python Example

Python
import os, requests

API_KEY = os.environ['SCAVIO_API_KEY']

def shopify_products(query, limit=10):
    r = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY},
        json={'query': f'{query} site:myshopify.com OR "powered by shopify"', 'num_results': 30})
    results = [o for o in r.json().get('organic_results', []) if '/products/' in o['link']]
    catalog = []
    for res in results[:limit]:
        product = requests.post('https://api.scavio.dev/api/v1/extract',
            headers={'x-api-key': API_KEY},
            json={'url': res['link'], 'render_js': True, 'extract_schema': 'Product'}).json().get('schema', {})
        if product:
            catalog.append({'title': product.get('name'), 'price': product.get('offers', {}).get('price'), 'url': res['link']})
    return catalog

print(shopify_products('wireless earbuds under 50'))

JavaScript Example

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
async function shopifyProducts(query) {
  const r = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: `${query} "powered by shopify"`, num_results: 30 })
  });
  const results = (await r.json()).organic_results.filter(o => o.link.includes('/products/'));
  const catalog = [];
  for (const res of results.slice(0, 10)) {
    const p = await fetch('https://api.scavio.dev/api/v1/extract', {
      method: 'POST',
      headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
      body: JSON.stringify({ url: res.link, render_js: true, extract_schema: 'Product' })
    });
    const { schema } = await p.json();
    if (schema?.name) catalog.push({ title: schema.name, price: schema.offers?.price, url: res.link });
  }
  return catalog;
}
console.log(await shopifyProducts('wireless earbuds under 50'));

Expected Output

JSON
A list of Shopify products across many stores, normalized with title, price, and URL. Dropshippers and competitive researchers can use this to find winning products without per-store Shopify API keys.

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Python 3.8+. A Scavio API key. A target product category or search term. A Scavio API key gives you 500 free credits per month.

Yes. The free tier includes 500 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

Discover Shopify products across every store using Google SERP's product schema. No per-store OAuth needed.