{
    "version": "ujb.site-guide/v1",
    "site": "Shopify stores",
    "domain": "shopify.com",
    "category": "ecommerce",
    "status": "working",
    "status_label": "Working",
    "success_rate_7d": 83.3,
    "checks_7d": 6,
    "last_checked_at": "2026-11-05T17:03:41Z",
    "last_ok_at": "2026-11-05T11:34:20Z",
    "page_types": [
        {
            "page_type": "Public pages",
            "page_kinds": [
                "page"
            ],
            "status": "working",
            "success_rate_7d": 83.3,
            "checks_7d": 6,
            "endpoint": "/scrape",
            "params": {
                "js": true
            },
            "proxy": "default",
            "measured": true,
            "max_credits": 5,
            "learned_settings": null,
            "example_url": "https://www.allbirds.com/products.json?limit=30",
            "playground": "https://ujeebu.com/playground?endpoint=scrape&url=https%3A%2F%2Fwww.allbirds.com%2Fproducts.json%3Flimit%3D30&js=true&autosend=0&uj_from=site-guide",
            "recipes": []
        }
    ],
    "guide_url": "https://ujeebu.com/scrape/shopify",
    "note": "Ujeebu scrapes any public website. These guides are a selection of popular sites we test every day, with settings that work today; a site that is not listed works with the same API: try any URL in the Playground (https://ujeebu.com/playground) or send us the URL (https://ujeebu.com/contact) and we will check it.",
    "billing": "Only HTTP 200 and 404 responses are billed.",
    "auth": "Header ApiKey: <your key>",
    "api_base": "https://api.ujeebu.com",
    "how_to_use_recipes": "GET https://api.ujeebu.com/scrape?url=<page>&recipe=<recipe>: the API applies the recipe's extract_rules and params (yours win when you send them) and answers {\"result\": {...}} with the headers Ujb-Recipe and Ujb-Credits. A recipe with \"recipe\": null is not served by name: POST /scrape with url, the params and extract_rules. Docs: https://ujeebu.com/docs/apis/scrape/recipes",
    "endpoints": {
        "note": "Shopify stores share one theme engine but not one HTML layout, so a single CSS recipe would not hold across stores. Most stores answer two JSON URLs instead: send them to the Scrape API with js=false and response_type=raw and you get the store's own JSON back, 1 credit a page.",
        "params": {
            "js": false,
            "response_type": "raw"
        },
        "credits": 1,
        "endpoints": [
            {
                "path": "/products.json?limit=250&page={page}",
                "what": "Every published product of the store, 250 a page (the most Shopify allows). Page 1, 2, 3... until an empty list."
            },
            {
                "path": "/collections/{handle}/products.json?limit=250&page={page}",
                "what": "The products of one collection (the handle is the last part of the collection URL, for example /collections/mens-shoes). /collections/all/ is the whole catalogue."
            }
        ],
        "fields": [
            "id",
            "title",
            "handle (the product URL is /products/<handle>)",
            "vendor",
            "product_type",
            "tags",
            "created_at, updated_at, published_at",
            "variants[] (id, title, sku, price, compare_at_price, available, option1 to option3)",
            "images[] (src, width, height)",
            "options[] (name, values)",
            "body_html (description)"
        ],
        "example_stores": [
            "www.allbirds.com",
            "www.deathwishcoffee.com",
            "kith.com",
            "colourpop.com",
            "www.tentree.com"
        ],
        "call": "GET https://api.ujeebu.com/scrape?url=https%3A%2F%2Fwww.allbirds.com%2Fproducts.json%3Flimit%3D250%26page%3D1&js=false&response_type=raw",
        "notes": [
            "Some stores turn these URLs off or rate limit them (a 403, 404 or 429 from the store): use the product pages then.",
            "There is no search on this URL: the store domain is free, and our search definitions only build URLs on a fixed host (or one checked subdomain label). Loop over page until the products list is empty.",
            "Prices are strings in the store currency; available tells whether a variant can be bought.",
            "Without response_type=raw the answer is the JSON inside an HTML page (the browser's JSON viewer): keep raw to parse it directly."
        ]
    }
}