Skip to main content

Scrape any Shopify store - products, collections, pages, metadata & reviews from the public JSON API. SDK + CLI + REST API.

Project description

shopscout

PyPI Python License Downloads

Scrape any Shopify store - products, collections, pages & metadata from the public JSON API. No API key required.

Three interfaces: Python SDK, CLI, and REST API.

Installation

# Core SDK only
pip install shopscout

# With CLI (click + rich tables)
pip install shopscout[cli]

# With REST API (FastAPI + uvicorn)
pip install shopscout[api]

# Everything
pip install shopscout[all]

Quick Start

from shopscout import Shopify

shop = Shopify('spharetech.com')

# Store metadata
store = shop.store()
print(store.name, store.currency)

# All products (auto-paginated)
products = shop.products()
for p in products:
    print(p.title, p.price, p.available)

# All collections
collections = shop.collections()
for c in collections:
    print(c.title, c.products_count)

# Products in a specific collection
power_banks = shop.collection_products('power-banks')

# Single product
product = shop.product('66w-transparent-power-bank-20000mah')

# Pages
pages = shop.pages()

Pagination

Fetch everything at once or paginate manually — your choice.

shop = Shopify('spharetech.com')

# Auto-paginate: fetches ALL products in one call
all_products = shop.products()

# Manual pagination: fetch one page at a time
page1 = shop.products_page(page=1, limit=30)
page2 = shop.products_page(page=2, limit=30)

# Same for collection products
all_power_banks = shop.collection_products('power-banks')
first_page = shop.collection_products_page('power-banks', page=1, limit=10)

Exporting

from shopscout import Exporter, Shopify

shop = Shopify('spharetech.com')
products = shop.products()

exporter = Exporter(output_dir='output')
exporter.products_to_json(products)
exporter.products_to_csv(products)

Proxy Support

shop = Shopify('store.com', proxy='http://user:pass@host:port')

CLI

# Scrape products
shopscout products spharetech.com
shopscout products spharetech.com --collection power-banks
shopscout products spharetech.com --json
shopscout products spharetech.com --save products.csv

# Scrape collections
shopscout collections spharetech.com

# Store metadata
shopscout store spharetech.com

# With proxy
shopscout --proxy http://host:port products spharetech.com

REST API

# Start the API server
shopscout serve
shopscout serve --port 3000

Endpoints

Method Endpoint Description
GET /api/v1/products?domain=store.com All products
GET /api/v1/products?domain=store.com&collection=power-banks Collection products
GET /api/v1/products/{handle}?domain=store.com Single product
GET /api/v1/collections?domain=store.com All collections
GET /api/v1/store?domain=store.com Store metadata
GET /api/v1/pages?domain=store.com All pages
GET /health Health check

Interactive docs at http://localhost:8000/docs

Error Handling

from shopscout import Shopify, StoreNotFoundError, ProductNotFoundError

shop = Shopify('not-a-shopify-store.com')
try:
    store = shop.store()
except StoreNotFoundError:
    print('Not a Shopify store')

try:
    product = shop.product('nonexistent')
except ProductNotFoundError:
    print('Product not found')

Exception Hierarchy

ShopifyError
├── StoreNotFoundError
├── ProductNotFoundError
├── CollectionNotFoundError
├── PageNotFoundError
├── RateLimitError
├── RequestError
└── ParsingError

Data Models

Model Description
Store Store metadata (name, currency, counts)
Product Product with variants, images, options
Variant Pricing, stock, SKU, weight
ProductImage Image URL with dimensions
ProductOption Option name and values
Collection Collection with image and product count
Page Static page content

All models have a .to_dict() method for serialization.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shopscout-0.2.0.tar.gz (87.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

shopscout-0.2.0-py3-none-any.whl (24.0 kB view details)

Uploaded Python 3

File details

Details for the file shopscout-0.2.0.tar.gz.

File metadata

  • Download URL: shopscout-0.2.0.tar.gz
  • Upload date:
  • Size: 87.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for shopscout-0.2.0.tar.gz
Algorithm Hash digest
SHA256 79177e5d66e1f352e2ccfd903a987ad697fa0853024485be7c5e5cc4fda4139e
MD5 aded9c32e1a9f39989748d652371b497
BLAKE2b-256 8642c1888a57fd0a470621b0c133a89e1513d75ed9aa456b36fb1492acd65163

See more details on using hashes here.

Provenance

The following attestation bundles were made for shopscout-0.2.0.tar.gz:

Publisher: publish.yml on zaidkx37/shopscout

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file shopscout-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: shopscout-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 24.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for shopscout-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f6b13487ab4942a318c33fe5bf92b94b2d44809e8d358939ad27060043fb938b
MD5 57ea12e5d2d8daab4163dc8d925be954
BLAKE2b-256 c85d192ebe4e9acbd974347299a2503db4459e4d809f7bde26d0c33d48d1b233

See more details on using hashes here.

Provenance

The following attestation bundles were made for shopscout-0.2.0-py3-none-any.whl:

Publisher: publish.yml on zaidkx37/shopscout

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page