{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Shopping Product Matcher & Price Monitor",
    "description": "Match catalog products to Google Shopping offers across eight European markets. Check variants for electronics, appliances, tools, monitors and printers; track competitor prices.",
    "version": "1.0",
    "x-build-id": "aTOseFGBMDaTtdfYQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/olliolli~google-shopping-product-matcher/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-olliolli-google-shopping-product-matcher",
        "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/olliolli~google-shopping-product-matcher/runs": {
      "post": {
        "operationId": "runs-sync-olliolli-google-shopping-product-matcher",
        "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/olliolli~google-shopping-product-matcher/run-sync": {
      "post": {
        "operationId": "run-sync-olliolli-google-shopping-product-matcher",
        "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": [
          "products"
        ],
        "properties": {
          "products": {
            "title": "Your product catalog",
            "type": "array",
            "description": "1–50 products: sku, brand, mpn required. category may be auto (default), electronics, appliances power_tools, monitors or printers. Auto uses catalog title, textual googleProductCategory/productType, variant attributes and exact-model candidate titles; ambiguous or unsupported categories stay REVIEW. Optional variant fields: storageGB, ramGB, screenInches, color, region, connectivity, capacityKg, capacityL, packCount, refreshHz, resolution (e.g. 1920x1080), printTechnology (laser/inkjet/thermal). Supply complete variant MPN and variantSpecificMpn:true or GTIN evidence."
          },
          "source": {
            "title": "Candidate source",
            "enum": [
              "google_shopping",
              "dataset",
              "offers"
            ],
            "type": "string",
            "description": "Live mode includes the Shopping search; no child Actor charge. Imported rows must contain sku or an exact query of brand + space + mpn.",
            "default": "google_shopping"
          },
          "country": {
            "title": "Shopping country",
            "enum": [
              "nl",
              "be",
              "de",
              "fr",
              "at",
              "ie",
              "es",
              "it"
            ],
            "type": "string",
            "description": "Country for live search. Imported data must belong to this market.",
            "default": "nl"
          },
          "language": {
            "title": "Search language",
            "enum": [
              "nl",
              "fr",
              "de",
              "en",
              "es",
              "it"
            ],
            "type": "string",
            "description": "Language for Google Shopping.",
            "default": "nl"
          },
          "maxOffersPerProduct": {
            "title": "Offers per product",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Up to this many candidate listings are compared per SKU. Search rankings and availability vary.",
            "default": 20
          },
          "datasetId": {
            "title": "Existing Shopping dataset ID",
            "type": "string",
            "description": "Dataset source only. Maximum 2,000 rows. Use a snapshot from olliolli/google-shopping-prices with query exactly brand + space + mpn."
          },
          "offers": {
            "title": "Provided candidate offers",
            "type": "array",
            "description": "Offers source only. Maximum 2,000 objects: sku (or query), title, price, currency, condition, seller. Optional mpn, gtin, shippingCost, offerId. Optional merchantUrl: direct URL of this exact seller offer, not a search or category page. Used for bounded public product-detail enrichment. Optional googleProductId and offerId enable link recovery; googleGroupId, googleImageDocId and googleProductDocId improve panel selection. IDs must belong to this exact observed offer."
          },
          "mode": {
            "title": "Output mode",
            "enum": [
              "snapshot",
              "monitor"
            ],
            "type": "string",
            "description": "Monitor outputs only new or changed comparisons. Each completed product check still costs the same: fresh retrieval and checking take place on each run. No removed/out-of-stock inference.",
            "default": "snapshot"
          },
          "stateName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Use a unique name per catalog and country. Do not overlap runs sharing this name.",
            "default": "my-tools"
          },
          "enrichMerchantDetails": {
            "title": "Check missing details on seller pages",
            "type": "boolean",
            "description": "Only REVIEW offers with a direct merchantUrl. Public HTML and product JSON-LD only; no login, browser or paid merchant proxy. No extra event charge. Not all Google cards expose a merchant link.",
            "default": true
          },
          "maxMerchantPages": {
            "title": "Seller pages per run",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Hard attempt limit, retained during run restart. Each page has a 15-second timeout; blocked pages are not retried.",
            "default": 10
          },
          "maxMerchantPagesPerProduct": {
            "title": "Seller pages per product",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Hard attempt limit, retained during run restart. Each page has a 15-second timeout; blocked pages are not retried.",
            "default": 3
          },
          "recoverMerchantLinks": {
            "title": "Recover missing seller links",
            "type": "boolean",
            "description": "For REVIEW offers with Google product and offer IDs, make bounded Google detail requests. Require the exact offer ID, seller and unchanged price, then resolve an organic Google redirect. No guessed merchant search results and no additional charge event.",
            "default": true
          },
          "maxGoogleDetailPages": {
            "title": "Google detail pages per run",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Hard attempt limit; retained across restarts. 35-second ceiling per detail lookup including redirect. Set 0 to disable requests.",
            "default": 5
          },
          "maxGoogleDetailPagesPerProduct": {
            "title": "Google detail pages per product",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Hard attempt limit; retained across restarts. 35-second ceiling per detail lookup including redirect. Set 0 to disable requests.",
            "default": 2
          },
          "maxManufacturerPages": {
            "title": "Automatic official manufacturer pages (experimental)",
            "minimum": 0,
            "maximum": 2,
            "type": "integer",
            "description": "Set 0 to disable. Bounded BenQ GW home-monitor adapter. At most two official pages per run, 15 seconds each; no proxy or new event fee. Compute still costs money. Results and failures survive restarts within the same run; no cross-run cache yet.",
            "default": 2
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}