Skip to main content

Scrape any Shopify store - products, collections, pages & metadata 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.1.1.tar.gz (15.7 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.1.1-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: shopscout-0.1.1.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for shopscout-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b60d24807780c6d5b2b6d2dc09016277c66914c5fb2fb537b46790760908f8ac
MD5 73dc96306df444aeb54b0ef115279fde
BLAKE2b-256 4c2ddc10cab9e144f17f1178b363d5103854a30c9f8fef0142727a41b7e7f7ee

See more details on using hashes here.

File details

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

File metadata

  • Download URL: shopscout-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for shopscout-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 92da138a7ab0a3561b3abe736824863aac654099b4f683e66d96846871d9c9ee
MD5 9c5fb9900b6d9461876b2cf3436df944
BLAKE2b-256 b33e78a84fe97f55654b2efed854eac825b8a3e4e0acc8b0bb8d66188ccd891d

See more details on using hashes here.

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