{
  "openapi": "3.0.1",
  "info": {
    "title": "Allegro Scraper - Offers, Prices, Sellers & Reviews",
    "description": "Scrape Allegro by keyword or URL. Extract offers, prices, delivery, seller details, and product reviews. Includes incremental change monitoring, resume support, and MCP connectors for automated workflows.",
    "version": "0.1",
    "x-build-id": "6gaobOQTnub4TamVw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~allegro-pl-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-allegro-pl-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~allegro-pl-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-allegro-pl-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~allegro-pl-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-allegro-pl-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": {
          "mode": {
            "title": "🎯 Input mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search mode builds Allegro listing searches from the Search phrases field. URL mode reads the Allegro URLs you paste in Start URLs.",
            "default": "search"
          },
          "queries": {
            "title": "🔎 Search phrases",
            "type": "array",
            "description": "One or more search phrases. Each phrase is one search walk; every offer found is returned once.",
            "default": [
              "iphone"
            ],
            "items": {
              "type": "string"
            }
          },
          "barcodes": {
            "title": "🏷️ Barcodes (EAN / GTIN / UPC)",
            "type": "array",
            "description": "One or more product barcodes. Allegro's own search accepts a barcode exactly like a text phrase and resolves straight to the matching product, so each code becomes its own search walk, same as a phrase. Leave empty to skip. Both Search phrases and Barcodes may be filled together.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "🔗 Start URLs",
            "type": "array",
            "description": "Allegro links to start from, forward-paged from wherever each one starts (a &p=N page number in the link is honoured). Three link types work: a listing/search link (https://allegro.pl/listing?string=iphone), a category link (https://allegro.pl/kategoria/smartfony-i-telefony-komorkowe-165), or a seller/store link (https://allegro.pl/uzytkownik/smartSPOT). Single offer or product links (/oferta/... or /produkt/...) are not a start source — use Search phrases, Barcodes, or one of the three link types above instead.",
            "default": [
              {
                "url": "https://allegro.pl/listing?string=iphone"
              },
              {
                "url": "https://allegro.pl/kategoria/smartfony-i-telefony-komorkowe-165"
              },
              {
                "url": "https://allegro.pl/uzytkownik/smartSPOT"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "keywords": {
            "title": "🎚 Keywords",
            "type": "array",
            "description": "Only keep offers where at least one keyword appears in the offer title (case-insensitive). Leave empty to keep every offer the search returns.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "📋 Fetch full offer details",
            "type": "boolean",
            "description": "Open each offer's own product page to add full description, brand, SKU, category, detail price/currency, availability, GTIN/barcode, return policy and reviews (see Max reviews per offer below). Slower, and charged per enriched offer on top of the offer record.",
            "default": false
          },
          "maxReviews": {
            "title": "⭐ Max reviews per offer",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Only applies with Fetch full offer details on. Cap on individual reviews captured per offer (0 disables review text; the aggregate rating and count are still attached). Reviews are included in Detail enrichment (no separate charge); the maximum is 1000. The true limit is however many reviews Allegro includes on the product page itself.",
            "default": 20
          },
          "maxItems": {
            "title": "🔢 Max items",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum offers to return across the whole run. 0 is not valid; the cap is always finite.",
            "default": 20
          },
          "maxPages": {
            "title": "📄 Max pages per source",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum Allegro result pages to read per search phrase or pasted URL. Leave empty to walk every result page; max items is the primary output cap.",
            "default": 0
          },
          "proxy": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Allegro serves pages only through a browser session on a Polish consumer-class exit, so the default is the Residential tier with country Poland.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "PL"
            }
          },
          "resumeFromRunId": {
            "title": "⏯ Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID (or dataset ID) from this actor to continue a large offer pull without returning or charging for offers already collected there (matched by offerId). Use this after an interrupted run. For recurring daily monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "🔁 Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns all matching offers as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED offers. Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those offers returned (and billed). State is kept separately for each search/URL and filter setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. Rating value/count, the recent-buyers label and count, and review text do not by themselves count as a change (other shoppers buying, rating or reviewing the product is not something you asked to monitor); price, stock status (isInStock), discount flag, delivery cost, shipping text, seller details, thumbnail and the other offer fields do trigger UPDATED. Offers saved by an older version of this actor are not flagged UPDATED just because these newer fields appeared; the newer fields are tracked from the following run.",
            "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 let the actor derive a key automatically from the mode/search phrases/URLs/keywords: different searches then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged offers (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return offers that have not changed since the last run, marked UNCHANGED. This returns (and bills) extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired offers (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return offers that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max items capped it or when Resume was used. This returns (and bills) extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "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 (rating value/count, the recent-buyers label and its numeric count (purchasesCount), and review fields already never trigger a false UPDATED, since they drift on their own as other shoppers buy, rate or review the offer, not because the offer changed; stock status isInStock does trigger UPDATED). Use this if another field in your setup turns out to be noisy.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped offers into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify > Settings > API & Integrations, then select it here. Notion gets a page-per-offer export; other connectors receive a best-effort write or digest. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page",
            "type": "string",
            "description": "URL or id of the Notion page under which offer pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max offers to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on how many offers are written to each selected 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}