Scrape any Shopify store - products, collections, pages & metadata from the public JSON API. SDK + CLI + REST API.
Project description
shopscout
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b60d24807780c6d5b2b6d2dc09016277c66914c5fb2fb537b46790760908f8ac
|
|
| MD5 |
73dc96306df444aeb54b0ef115279fde
|
|
| BLAKE2b-256 |
4c2ddc10cab9e144f17f1178b363d5103854a30c9f8fef0142727a41b7e7f7ee
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92da138a7ab0a3561b3abe736824863aac654099b4f683e66d96846871d9c9ee
|
|
| MD5 |
9c5fb9900b6d9461876b2cf3436df944
|
|
| BLAKE2b-256 |
b33e78a84fe97f55654b2efed854eac825b8a3e4e0acc8b0bb8d66188ccd891d
|