{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Shopping Scraper API",
    "description": "Scrape Google Shopping into structured products: title, price, previous price and discount, merchant, rating, review count, delivery and returns terms. Optionally resolves each product to the retailers' own deep links rather than Google redirects.",
    "version": "0.0",
    "x-build-id": "M7p2FWgA1dSFWuxVB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/shakamize~google-shopping-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-shakamize-google-shopping-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/shakamize~google-shopping-scraper/runs": {
      "post": {
        "operationId": "runs-sync-shakamize-google-shopping-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/shakamize~google-shopping-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-shakamize-google-shopping-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",
        "required": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "Search terms",
            "type": "array",
            "description": "What to search Google Shopping for, written as a shopper would type it. One entry per search.",
            "items": {
              "type": "string"
            }
          },
          "countryCode": {
            "title": "Country",
            "enum": [
              "US",
              "GB",
              "CA",
              "AU",
              "IE",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "BE",
              "SE",
              "PL",
              "IN",
              "BR",
              "MX",
              "TR",
              "JP",
              "SG",
              "AE",
              "SA",
              "EG",
              "ZA"
            ],
            "type": "string",
            "description": "The Google country to shop from. It decides the currency prices are quoted in and which merchants appear.",
            "default": "US"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Google interface language, as a two-letter code. Defaults to the language of the chosen country. It decides the wording of the delivery and returns terms, which Google publishes as text rather than as data."
          },
          "maxProductsPerQuery": {
            "title": "Max products per search",
            "minimum": 1,
            "type": "integer",
            "description": "Google returns about 40 products per request. Above 40 the actor pages through with Google's own <code>start</code> parameter, 40 at a time, and every extra request is logged. Measured 2026-08-30: a query runs dry at roughly 134 products, which is Google's ceiling rather than a cap applied here.",
            "default": 40
          },
          "maxProducts": {
            "title": "Max products in total",
            "minimum": 1,
            "type": "integer",
            "description": "Stop the whole run after this many products, across every search. Prefilled low so a first run is cheap to try; raise it for a real scrape, or clear it for no overall cap."
          },
          "includeRetailerLinks": {
            "title": "Include retailer links",
            "type": "boolean",
            "description": "Resolve each product to the shops selling it, as the <b>retailer's own deep link</b> rather than a Google redirect. Google publishes these only on its per-product page, so this costs <b>one further request per product</b>, takes 14 to 40 seconds each, and is charged as a separate event. Off by default for that reason. Products with no link published are stored anyway and are not charged for links, and so are all of them on the rare run that has to move to the Google SERP proxy, where one lookup per product is not worth what it costs.",
            "default": false
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only products at or above this price, in the currency of the chosen country. A product Google published no price for is dropped rather than kept."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only products at or below this price."
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only products rated at or above this, out of five. Products Google published no rating for are dropped, never treated as unrated-but-acceptable."
          },
          "minReviews": {
            "title": "Minimum reviews",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only products with at least this many reviews."
          },
          "onSaleOnly": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Keep only products showing a genuine struck-through price above the price it discounts.",
            "default": false
          },
          "merchants": {
            "title": "Only these merchants",
            "type": "array",
            "description": "Keep only products whose merchant name contains one of these, for example <code>Walmart</code>.",
            "items": {
              "type": "string"
            }
          },
          "excludeMerchants": {
            "title": "Exclude merchants",
            "type": "array",
            "description": "Drop products whose merchant name contains one of these.",
            "items": {
              "type": "string"
            }
          },
          "onlyNewProducts": {
            "title": "Only products not seen before",
            "type": "boolean",
            "description": "Remember the products stored by previous runs and skip them. Products repeated inside a single run are always removed, with or without this.",
            "default": false
          },
          "newProductsStoreName": {
            "title": "Memory name",
            "type": "string",
            "description": "The named key-value store holding the products already seen. Use a different name per saved search to keep their memories apart.",
            "default": "google-shopping-seen"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Defaults to Apify's unblocking service, which is what makes Google Shopping reachable. If that is unavailable to your account, or fails on the request, the run switches to the Google SERP proxy by itself and says so in the log. A plain datacenter or residential address is redirected away from the results, so those are not useful here.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ]
            }
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}