{
  "openapi": "3.0.1",
  "info": {
    "title": "Russian Marketplace Product Card & Specs Scraper",
    "description": "Scrape product cards from Russian online stores: title, image links and full specifications as name-value pairs, exactly as the store publishes them. Give it product URLs, or product names and it finds the direct link itself. Optional ready-to-publish card structure.",
    "version": "0.1",
    "x-build-id": "1GNsYn8okd37Z5eT3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/isolovyev~ru-product-cards/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-isolovyev-ru-product-cards",
        "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/isolovyev~ru-product-cards/runs": {
      "post": {
        "operationId": "runs-sync-isolovyev-ru-product-cards",
        "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/isolovyev~ru-product-cards/run-sync": {
      "post": {
        "operationId": "run-sync-isolovyev-ru-product-cards",
        "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": "Product URLs",
            "type": "array",
            "description": "Direct links to product cards, one per line. This is the PRIMARY mode and it works for every store the Actor supports. Plain strings are expected (https://shop.ru/product/123). Use 'queries' instead when you only know the product name.",
            "items": {
              "type": "string"
            }
          },
          "queries": {
            "title": "Product names to search",
            "type": "array",
            "description": "Product names or models. The Actor finds the direct card link by name and then scrapes it. This mode is NOT available for every store: where a store cannot be searched by name, the run logs 'поиск по названию не поддерживается' for that store, creates no card and charges nothing. See the Coverage section of the README for the per-store list.",
            "items": {
              "type": "string"
            }
          },
          "platforms": {
            "title": "Stores / marketplaces",
            "type": "array",
            "description": "Which Russian stores to query. Direct links work for every store listed here; search by product name works for a subset (see README). Keep to one store for the fastest run.",
            "items": {
              "type": "string",
              "enum": [
                "ozon",
                "wildberries",
                "yandexmarket",
                "megamarket",
                "mvideo",
                "eldorado",
                "dns",
                "citilink",
                "regard",
                "xcom",
                "technopark",
                "onlinetrade",
                "holodilnik",
                "mm",
                "vseinstrumenti",
                "petrovich",
                "lemanapro",
                "rs24",
                "etm"
              ],
              "enumTitles": [
                "Ozon",
                "Wildberries",
                "Yandex Market",
                "Megamarket",
                "M.Video",
                "Eldorado",
                "DNS",
                "Citilink",
                "Regard",
                "Xcom",
                "Technopark",
                "OnlineTrade",
                "Holodilnik",
                "Magnit Market",
                "VseInstrumenti",
                "Petrovich",
                "Leroy Merlin (Lemana)",
                "RS24",
                "ETM"
              ]
            },
            "default": [
              "regard",
              "citilink",
              "holodilnik"
            ]
          },
          "speedLane": {
            "title": "Speed lane",
            "enum": [
              "all",
              "fast",
              "slow"
            ],
            "type": "string",
            "description": "Split the queue by how long a store takes. Platform usage is billed by run TIME, so one slow store makes the whole run expensive: measured 27 Jul, a mixed run cost about $0.024 per card against $0.0045 for fast stores only. Run the two lanes separately to cut that. Slow lane: Megamarket, VseInstrumenti, RS24, Eldorado, Petrovich, OnlineTrade, Ozon.",
            "default": "all"
          },
          "maxLinksPerQuery": {
            "title": "Cards per query",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many product cards to scrape per query per store.",
            "default": 3
          },
          "buildCards": {
            "title": "Build ready-to-publish card",
            "type": "boolean",
            "description": "Also emit a normalized card structure (brand, category, cleaned attributes, draft description) built from the parsed data. Off by default: it is an extra paid event on top of each card.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Russian stores serve data only from a Russian IP. A residential-grade proxy with country RU is required.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "RU"
            }
          },
          "method1Key": {
            "title": "Method 1 key (optional)",
            "type": "string",
            "description": "Credentials for method 1 (link lookup by product name). Needed for stores without an open search page. Provided by the operator."
          },
          "method1Account": {
            "title": "Method 1 account (optional)",
            "type": "string",
            "description": "Account identifier that goes with the method 1 key."
          },
          "method2User": {
            "title": "Method 2 user (optional)",
            "type": "string",
            "description": "Credentials for method 2 (page retrieval for stores behind industrial protection). Provided by the operator."
          },
          "method2Pass": {
            "title": "Method 2 password (optional)",
            "type": "string",
            "description": "Password that goes with the method 2 user."
          },
          "method3User": {
            "title": "Method 3 user (optional)",
            "type": "string",
            "description": "Credentials for method 3 (fallback page retrieval). Provided by the operator."
          },
          "method3Pass": {
            "title": "Method 3 password (optional)",
            "type": "string",
            "description": "Password that goes with the method 3 user."
          },
          "bridgeUrl": {
            "title": "Relay address (optional)",
            "type": "string",
            "description": "Address of the operator relay used for stores whose network path is unreachable from the cloud."
          },
          "bridgeToken": {
            "title": "Relay secret (optional)",
            "type": "string",
            "description": "Shared secret for the relay."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}