{
  "openapi": "3.0.1",
  "info": {
    "title": "Judge.me Reviews Scraper — Shopify Store & Product Reviews",
    "description": "Judge.me reviews scraper — export every review from any Shopify store running judge.me. Whole store or a single product URL, server-side sort, rating and verified-buyer filters, photos, merchant replies, plus an optional store summary with a 1-5 star histogram. Pure HTTP, no API key",
    "version": "0.0",
    "x-build-id": "95jH8H3n4ZhggP7e7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~judge-me-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-judge-me-reviews-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/memo23~judge-me-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-judge-me-reviews-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/memo23~judge-me-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-judge-me-reviews-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Store or product URLs",
            "type": "array",
            "description": "One or more Shopify storefront URLs, classified independently so you can mix whole-store and single-product targets in one run. A URL ending in `/products/{handle}` (e.g. `https://owalalife.com/products/freesip`) returns only that product's reviews; anything else (homepage, collection page, bare domain such as `deathwishcoffee.com`, or a `*.myshopify.com` host) returns the store's shop-wide review feed. Note for HEADLESS storefronts (Hydrogen/custom): the marketing homepage often carries no Shopify identity, so use a product URL or the store's `*.myshopify.com` domain instead. Default: empty — but at least one of this field or \"shop_domain values\" must be set.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "shopDomains": {
            "title": "judge.me shop_domain values",
            "type": "array",
            "description": "Explicit `xxx.myshopify.com` hosts, e.g. `owala.myshopify.com`. Each one skips the shop-domain-resolution fetch and is always treated as a whole-store target. Optional — most users should use \"Store or product URLs\" above instead. Default: empty.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "highest_rating",
              "lowest_rating",
              "most_helpful"
            ],
            "type": "string",
            "description": "Order judge.me returns reviews in — applied server-side, so `lowest_rating` with a small \"Maximum reviews per URL\" is a cheap way to read only a store's worst reviews. One of: `newest`, `highest_rating`, `lowest_rating`, `most_helpful`. Example: `lowest_rating`. Default: `newest`.",
            "default": "newest"
          },
          "ratingFilter": {
            "title": "Rating filter",
            "type": "array",
            "description": "Keep only reviews whose star rating is exactly one of these values. Valid values: \"1\", \"2\", \"3\", \"4\", \"5\". Example: [\"5\",\"1\"] keeps 5-star and 1-star reviews only. Filtered-out reviews are never written to the dataset, never billed, and never count toward \"Maximum reviews per URL\". Default: empty (all ratings 1-5).",
            "items": {
              "type": "string",
              "enum": [
                "5",
                "4",
                "3",
                "2",
                "1"
              ]
            },
            "default": []
          },
          "verifiedOnly": {
            "title": "Verified buyers only",
            "type": "boolean",
            "description": "When true, keeps only reviews judge.me marks as written by a verified buyer (the widget's `data-verified-buyer` flag). Like the rating filter, excluded reviews are never written or billed. Example: true. Default: false.",
            "default": false
          },
          "includeStoreSummary": {
            "title": "Emit a store-summary row",
            "type": "boolean",
            "description": "When true, each whole-store target also emits one row with `type: \"store_summary\"` carrying the store-level and product-level review counts, a 1-5 star rating histogram (frequency + percentage) and a weighted average rating. That row is billed as an extra $0.005 event on top of the normal per-row price. Set to false if you only want the reviews. Default: true.",
            "default": true
          },
          "maxItems": {
            "title": "Maximum reviews per URL",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on reviews collected from EACH target URL/domain — not a whole-run total. Example: 5 store URLs with a value of 100 can produce up to 500 review rows. Some stores hold tens of thousands of reviews, so raise this deliberately. The run's overall charge limit is a separate global ceiling that always wins. Minimum 1, default 100.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "How many store/product targets are processed in parallel. Raise it for a long list of stores, lower it to be gentler. Example: 10. Minimum 1, default 5.",
            "default": 5
          },
          "minConcurrency": {
            "title": "Min concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Minimum number of parallel HTTP tasks. Only used by the Crawlee fallback engine; ignored in the default mode. Minimum 1, default 1.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "type": "integer",
            "description": "How many times a failed request is retried before that target is given up. Only used by the Crawlee fallback engine; the default engine has its own 4-attempt retry ladder. Minimum 0, default 5.",
            "default": 5
          },
          "proxy": {
            "title": "Proxy configuration (optional)",
            "type": "object",
            "description": "Leave this off. judge.me's public widget API has no anti-bot and works fine from any datacenter IP, so no proxy is used by default and the run is cheaper and faster without one. Only enable it if judge.me starts rate-limiting your IP, or you want to route through your own pool. Default: `{ \"useApifyProxy\": false }`.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}