{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Shopping Scraper — Offers, Price History & Deals",
    "description": "Google Shopping products by keyword or product ID: price, store, rating, and per product the store offers Google shows (direct links, stock, delivery, returns) with each store's daily price history (up to 12 months in the US, DE, FR) and Google's typical price range.",
    "version": "0.1",
    "x-build-id": "Fx5d3DUx5oLNiKtvB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/foxlabs~google-shopping-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-foxlabs-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/foxlabs~google-shopping-scraper/runs": {
      "post": {
        "operationId": "runs-sync-foxlabs-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/foxlabs~google-shopping-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-foxlabs-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",
        "properties": {
          "queries": {
            "title": "Product searches",
            "type": "array",
            "description": "One search per line, as you would type it in Google Shopping: a product (\"sony wh-1000xm5\"), a category (\"espresso machine\") or a brand. Each search returns up to \"Max products per search\" products.",
            "items": {
              "type": "string"
            }
          },
          "productIds": {
            "title": "Google product IDs (price monitoring)",
            "type": "array",
            "description": "Re-check known products, one per line: the productId value from an earlier run (digits), or a Google Shopping product link that contains \"prds=…gpcid:…\". Each ID returns the product with its store offers and price history. Leave empty when you only search.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "us",
              "gb",
              "ca",
              "au",
              "nz",
              "ie",
              "in",
              "de",
              "at",
              "ch",
              "fr",
              "be",
              "nl",
              "it",
              "es",
              "pt",
              "pl",
              "cz",
              "se",
              "no",
              "dk",
              "fi",
              "tr",
              "jp",
              "br",
              "mx"
            ],
            "type": "string",
            "description": "Which Google Shopping to search: the country's stores, prices and currency. In tests (September 2026) Google showed price history in the US, Canada, Australia, Germany, France, Spain, the Netherlands, India and Japan (and on some products in Italy, Poland and Sweden), and none in the UK, Turkey and Brazil. Other countries are not measured yet; each product says why it has no history.",
            "default": "us"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Two-letter language code for Google's interface (en, de, fr…). Leave empty for the country's main language. Prices and stores come from the country above either way."
          },
          "maxProductsPerQuery": {
            "title": "Max products per search",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "Google Shopping shows about 40–50 different products per page. For more, the Actor also reads Google's own sort orders and price bands for the same search and removes duplicates, until this number, until no new products appear, or until those pages run out (usually after 5–8 pages). The form starts at 3 for a quick first run.",
            "default": 20
          },
          "includeDetails": {
            "title": "Store offers and price history",
            "type": "boolean",
            "description": "Open each product's Google page to get the stores Google lists for it (typically 3–5) with store links, price, stock, delivery, returns and store rating, each store's daily price history, and Google's typical price range. One extra Google request per product, billed as a separate event. Off = search results only (faster, cheaper).",
            "default": true
          },
          "priceHistory": {
            "title": "Price history format",
            "enum": [
              "changes",
              "daily",
              "none"
            ],
            "type": "string",
            "description": "How each store's price history is written. Price changes: the first day, each day the price changed and the last day (compact). Every day: one point per day, up to 367 per store. None: leave it out.",
            "default": "changes"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "price_low_to_high",
              "price_high_to_low",
              "rating"
            ],
            "type": "string",
            "description": "Google Shopping's own sort order. Sorting other than Relevance costs one extra Google request per search. It applies to Google's first page of sorted results; more products beyond it come from other sort orders and price bands. Google's price order does not always follow the listed price.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only products whose price on the search result is at least this much, in the country's currency. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only products whose price on the search result is at most this much, in the country's currency. Leave empty for no maximum."
          },
          "maxSearchPagesPerQuery": {
            "title": "Max result pages per search",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Upper bound on Google result pages read for one search (page 1, sorted pages and price bands). Each page is one Google request.",
            "default": 8
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}