{
  "openapi": "3.0.1",
  "info": {
    "title": "Target AU Scraper – Products, Prices & Reviews",
    "description": "Scrape products and customer reviews from Target.com.au. Search by keyword or use product/category URLs with sorting and filters. Returns name, brand, price, OnePass price, ratings, review text and stats, colours, sizes, images, category, stock, and variations.",
    "version": "1.0",
    "x-build-id": "nSCEieReiTxCetmmp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~target-au-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-target-au-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/abotapi~target-au-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-target-au-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/abotapi~target-au-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-target-au-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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "search = provide search terms and filters. url = paste product, category, or search URLs and walk them.",
            "default": "search"
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "One or more keywords to search, e.g. shirt, towel, kids toys.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "URLs",
            "type": "array",
            "description": "Paste product, category, or search URLs from target.com.au. Multi-URL supported. Filter fields still apply. A ?page=N in a pasted link starts the walk at that page (partial scope), and a ?sortBy= in the link is honoured while Sort by is left at Relevance. Left unedited, this field scrapes one example per URL shape.",
            "default": [
              "https://www.target.com.au/search?text=shirt",
              "https://www.target.com.au/search?text=shirt&page=2",
              "https://www.target.com.au/search?text=shirt&sortBy=price-asc",
              "https://target.com.au/search?text=shirt",
              "https://www.target.com.au/c/baby/sleep/monitors/W118762",
              "https://www.target.com.au/c/women/jackets-coats/W1507165?page=2",
              "https://www.target.com.au/p/x/72544778",
              "https://www.target.com.au/p/anything/W2250321627"
            ],
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "newest",
              "rating",
              "price-asc",
              "price-desc",
              "brand"
            ],
            "type": "string",
            "description": "Order of results within each search or pasted category/search URL. Ignored for a pasted single product URL.",
            "default": "relevance"
          },
          "specialsCategory": {
            "title": "Specials / offers",
            "enum": [
              "",
              "on-sale",
              "clearance",
              "new-arrivals"
            ],
            "type": "string",
            "description": "Limit results to a promotional collection: On sale keeps reduced products with a strike-through was-price, Clearance keeps run-out lines, New arrivals keeps the latest range. Applies to search terms and to pasted category or search URLs. Leave terms empty in search mode to walk the whole collection. Ignored for a pasted single product URL.",
            "default": ""
          },
          "brand": {
            "title": "Brand",
            "type": "string",
            "description": "Filter to one brand. Type the name as shown on target.com.au (e.g. Target Woman); case and spacing are matched to the storefront's exact value, and a loud warning is logged when nothing matches. Ignored for a pasted single product URL."
          },
          "colour": {
            "title": "Colour",
            "type": "string",
            "description": "Filter to one colour. Type the name as shown on target.com.au (e.g. White); case and spacing are matched to the storefront's exact value, and a loud warning is logged when nothing matches. Ignored for a pasted single product URL."
          },
          "minPrice": {
            "title": "Min price (AUD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep products at or above this price. Applies to search, category and search URLs, and also to a pasted single product URL (the product is dropped when outside the range)."
          },
          "maxPrice": {
            "title": "Max price (AUD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep products at or below this price. Applies to search, category and search URLs, and also to a pasted single product URL (the product is dropped when outside the range)."
          },
          "onlyWithPrice": {
            "title": "Only products with a price",
            "type": "boolean",
            "description": "Skip products that carry no price. They are dropped before reviews are fetched and before anything is delivered or billed.",
            "default": false
          },
          "fetchReviews": {
            "title": "Fetch ratings and reviews",
            "type": "boolean",
            "description": "Attach ratings, review stats and individual reviews to each product (detail enrichment).",
            "default": true
          },
          "maxReviews": {
            "title": "Max reviews per product",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on reviews captured per product. 0 disables reviews.",
            "default": 20
          },
          "maxItems": {
            "title": "Max products",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Total products to return across all searches or URLs. 0 = unlimited. Capped at 1,000,000.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Safety cap on pages walked per search term or category. 0 = walk every page (the run still stops naturally once the storefront's own result total is reached or a page repeats). A hard limit of 1000 pages per search or URL always applies.",
            "default": 0
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy configuration. The default automatic (datacenter) pool works well; residential is used only as a reliability fallback.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (delta)",
            "type": "string",
            "description": "Optional. ID of a previous run of this actor (or a dataset ID). Products already in that dataset are skipped, so this run returns only NEW products (a delta). Combine both runs' datasets for the full set. Max products then counts only the new products."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring monitoring)",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs compare every product against the last run (title, brand, colour, price, was-price and discount, promo label, stock and availability) and return only NEW and UPDATED products; an UPDATED row's changedFields names exactly what moved. Reviews, ratings, images, links and the scrape time are never compared. Unchanged products are not returned, not enriched and not billed. State is kept separately for each search or URL setup; use State key to name or share a campaign. Products that disappear are returned once as EXPIRED (see 'Return products that disappeared') and a product that comes back is returned as REAPPEARED.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the search terms or URLs and the filters."
          },
          "emitUnchanged": {
            "title": "Also return unchanged products (incremental mode only)",
            "type": "boolean",
            "description": "Incremental mode only. Return products that did not change, as plain rows (no reviews fetch, no detail-enrichment charge). Each returned UNCHANGED row counts as a returned result and is billed under the per-result event. Off by default: unchanged products are skipped.",
            "default": false
          },
          "emitExpired": {
            "title": "Return products that disappeared (incremental mode only)",
            "type": "boolean",
            "description": "Incremental mode only. When a run walks its whole search to the end, return products seen earlier that are no longer listed, with changeType EXPIRED. Each returned EXPIRED row counts as a returned result and is billed under the per-result event (no detail-enrichment charge). Never emitted for capped, partial, single-product or resumed runs.",
            "default": true
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Optional. Field names to exclude from UPDATED change detection, in addition to the built-in handling (reviews, ratings, images, links and scrape time never trigger UPDATED). Nested fields can be given as dotted paths. Ignored fields are still returned in the row.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify then Settings then API & Integrations, then select it here. Notion gets a page-per-item export; other connectors get a best-effort write. Leave empty to skip. Supported: Notion, Linear, Airtable, Apify."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which item pages are created. Required only for the Notion export."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}