{
  "openapi": "3.0.1",
  "info": {
    "title": "WooCommerce Scraper With Store Contact Leads",
    "description": "WooCommerce Scraper discovers online stores and extracts public store details, product data, business information, contact pages, emails, phone numbers, and social profiles. Build targeted ecommerce datasets for lead generation, market research, and competitor analysis.",
    "version": "0.1",
    "x-build-id": "kNvpjFQhpg2IrqSlz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~woocommerce-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-woocommerce-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/api-empire~woocommerce-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-woocommerce-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/api-empire~woocommerce-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-woocommerce-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": "🏪 Shops To Turn Into Leads",
            "type": "array",
            "description": "One line per shop. A store home page (https://example.com), a bare domain (example.com) or a sub-directory install (https://example.com/shop) all work. Fill in this field or 'Shop URLs (alternative input)' below.",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "title": "Shop URLs (alternative input)",
            "type": "array",
            "description": "Same thing as the field above, under the key 'url'. Handy when you drive this actor from the API and already build a list called 'url'.",
            "items": {
              "type": "string"
            }
          },
          "findStoreContacts": {
            "title": "📧 Find The Shop's Contact Details",
            "type": "boolean",
            "description": "Read the shop's own home, contact, about and policy pages and return the public e-mails, phone numbers, postal address and social profiles published there. Turn this off to get the plain catalogue only.",
            "default": true
          },
          "discoverContactPages": {
            "title": "🧭 Find The Shop's Real Page Slugs First",
            "type": "boolean",
            "description": "Ask WordPress which pages the shop actually has (one request) instead of guessing URLs. Measured: /contact and /privacy-policy do not exist on many shops that do have contact-us, tos or impressum - and a WordPress 404 still prints the footer, so guessing produces rows that claim an e-mail was found on a page that is not there.",
            "default": true
          },
          "readContactsFromApiContent": {
            "title": "🛡️ Also Read Page Text Through The API",
            "type": "boolean",
            "description": "Read the page bodies straight out of the WordPress REST API as well as from the HTML site. This channel keeps working on shops whose HTML pages are behind Cloudflare - measured: one test shop answers 403 on every HTML page and still returns its support e-mail this way.",
            "default": true
          },
          "storeContactPaths": {
            "title": "🗂️ Extra Pages To Try",
            "type": "array",
            "description": "Fallback paths, used after the shop's real page list. Localised paths such as /kontakt or /impressum still matter here - an imprint page is often the only place an EU shop prints a phone number.",
            "default": [
              "/contact",
              "/contact-us",
              "/about",
              "/impressum",
              "/privacy-policy"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxContactPagesPerStore": {
            "title": "🔢 How Many Pages To Open Per Shop",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Cap on the HTML pages opened per shop while looking for contact details. The home page is always first. Set it to 0 to use the API-only channel and open no HTML page at all.",
            "default": 5
          },
          "onlyStoresWithContacts": {
            "title": "🎯 Keep Only Shops You Can Contact",
            "type": "boolean",
            "description": "Off by default so a run never silently returns nothing. Turn it on to drop every row of a shop that publishes neither an e-mail nor a phone number. A shop whose pages could not be read at all is KEPT and flagged either way, because 'not checked' is not the same as 'no contact'.",
            "default": false
          },
          "resource": {
            "title": "📁 Record Type",
            "enum": [
              "products",
              "categories",
              "brands",
              "tags",
              "attributes",
              "reviews",
              "pages",
              "posts",
              "comments",
              "post-categories",
              "post-tags",
              "users"
            ],
            "type": "string",
            "description": "Which record type to read. 'products' is the full product row; every other value is returned exactly as the shop's API publishes it. 'brands' needs the WooCommerce Brands taxonomy installed, 'users' is disabled on many shops, and 'comments' hides product reviews from logged-out clients - use 'reviews' for those.",
            "default": "products"
          },
          "limit": {
            "title": "♾️ Rows Per Shop",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of records to return per shop. Product variations fetched by 'Include Variations' are returned on top of this number. The contact block costs the same whether you pull 1 row or 1000.",
            "default": 10
          },
          "include_variations": {
            "title": "Include Variations",
            "type": "boolean",
            "description": "Also return every variation of the variable products found (one extra request per variation). Variation rows carry the parent product id in 'parent' and type 'variation'.",
            "default": false
          },
          "format": {
            "title": "Text Format",
            "enum": [
              "md",
              "text",
              "html"
            ],
            "type": "string",
            "description": "How product descriptions and review bodies are rendered. (default: Markdown)",
            "default": "md"
          },
          "search": {
            "title": "Search",
            "type": "string",
            "description": "Return only records matching this text. Not supported for the 'attributes' and 'reviews' record types."
          },
          "category": {
            "title": "Category",
            "type": "string",
            "description": "Product category ID(s), comma separated. Run the actor once with record type 'categories' to get the IDs. Products only."
          },
          "tag": {
            "title": "Tag",
            "type": "string",
            "description": "Product tag ID(s), comma separated. Run the actor once with record type 'tags' to get the IDs. Products only."
          },
          "sku": {
            "title": "SKU",
            "type": "string",
            "description": "Return only products with this SKU. Products only."
          },
          "product_type": {
            "title": "Product Type",
            "enum": [
              "",
              "simple",
              "grouped",
              "external",
              "variable",
              "wbs_bundle",
              "variation"
            ],
            "type": "string",
            "description": "Return only products of this type. Products only."
          },
          "stock": {
            "title": "Stock Status",
            "enum": [
              "",
              "instock",
              "outofstock",
              "onbackorder"
            ],
            "type": "string",
            "description": "Return only products with this stock status. Products only."
          },
          "featured": {
            "title": "Featured Only",
            "type": "boolean",
            "description": "Return only products the shop marks as featured. Products only.",
            "default": false
          },
          "sale": {
            "title": "On Sale Only",
            "type": "boolean",
            "description": "Return only products that are currently on sale. Products only.",
            "default": false
          },
          "rating": {
            "title": "Star Rating",
            "enum": [
              "",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "Return only products whose rounded average rating equals this many stars. The WooCommerce Store API honours one value, so a single star level is applied. Products only."
          },
          "min_price": {
            "title": "Price From",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price, in the shop's minor currency unit (cents for a 2-decimal shop: 1999 means 19.99). Products only."
          },
          "max_price": {
            "title": "Price To",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price, in the shop's minor currency unit (cents for a 2-decimal shop: 4999 means 49.99). Products only."
          },
          "sort": {
            "title": "Sort By",
            "enum": [
              "",
              "date",
              "modified",
              "id",
              "include",
              "title",
              "slug",
              "price",
              "popularity",
              "rating",
              "menu_order",
              "comment_count"
            ],
            "type": "string",
            "description": "Sort order requested from the shop. Products accept every value below. Categories, tags and brands accept Slug, Title and Popularity only; reviews accept Date, ID and Rating; pages and posts accept Date, Modified, ID, Title and Slug. An unsupported value is reported in the log and the shop's own order is used.",
            "default": "date"
          },
          "order": {
            "title": "Sort Direction",
            "enum": [
              "",
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "Applied only when the chosen 'Sort By' value is supported by the record type.",
            "default": ""
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Choose which proxies to use. By default no proxy is used; if a shop refuses the direct request the actor escalates to an Apify datacenter proxy and then to a residential proxy on its own."
          },
          "dev_proxy_config": {
            "title": "🌐 PROXY NETWORKING",
            "type": "string",
            "description": "Your own HTTP(S) proxy, used instead of the Apify proxy.\nhttp://{user:pass}@{hostname|ip-address}:port\nExample: http://user:pass@proxy.example.com:8000\nSOCKS proxies are not supported by this actor's HTTP client."
          },
          "dev_custom_headers": {
            "title": "📜 HTTP HEADERS",
            "type": "string",
            "description": "Extra HTTP headers, as a JSON array of {name, value} pairs, a JSON object, or one 'Name: value' per line. Sent on the API requests and on the contact-page requests.\nExample: [{\"name\": \"Authorization\", \"value\": \"Bearer token\"}]"
          },
          "dev_custom_cookies": {
            "title": "🍰 HTTP COOKIES",
            "type": "string",
            "description": "Extra HTTP cookies, as a JSON array of {name, value} pairs, a JSON object, or one 'name=value' per line.\nExample: [{\"name\": \"session\", \"value\": \"abc123\"}]"
          },
          "dev_transform_fields": {
            "title": "♻️ CUSTOM FIELD",
            "type": "string",
            "description": "Keep only these fields in the output. Enter comma-separated field paths; each path becomes one flat column.\nFor a nested object use a DOT, e.g. storeContact.emails.0.address\nFor an array element use its index, e.g. images.0.src"
          },
          "dev_dataset_name": {
            "title": "📁 CUSTOM STORAGE",
            "type": "string",
            "description": "Write the results into a named dataset instead of the default one. Masks:\n{ACTOR} = actor name\n{DATE} = date (YYYYMMDD)\n{TIME} = time (HHMMSS)\nExample: leads-{DATE} becomes leads-20260810"
          },
          "dev_dataset_clear": {
            "title": "Clear Storage",
            "type": "boolean",
            "description": "Empty the named dataset above before writing this run's results. It has no effect without 'CUSTOM STORAGE': the default dataset of a run is always new and empty.",
            "default": false
          },
          "dev_no_strip": {
            "title": "Disable data cleansing",
            "type": "boolean",
            "description": "Keep empty values (null, empty string, empty array, empty object) in the output. Booleans and zeros are always kept. Turn this on to see storeContact keys that are null on this shop, such as a postal address it does not publish.",
            "default": false
          },
          "dev_fileupload": {
            "title": "📁 FILE UPLOADER",
            "type": "string",
            "description": "URL of a text or JSON file holding one shop URL per line or a JSON array of URLs. Its URLs are added to the list at the top."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}