{
  "openapi": "3.0.1",
  "info": {
    "title": "Allegro Scraper — Products, Prices & Seller Leads (NIP, Email)",
    "description": "Scrape Allegro.pl products by keyword, category, seller or offer URL — pure HTTP, no browser. Each row: price (+ original), seller rating, condition, parameters, images, Smart!/sponsored, offer count & recent-buyer sales-velocity. Deep mode adds rating+reviews, stock, GTIN, warranty. JSON/CSV",
    "version": "0.0",
    "x-build-id": "bhvTmgi4hfLv8Ieit"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~allegro-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-allegro-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/memo23~allegro-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-allegro-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/memo23~allegro-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-allegro-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": {
          "searchQueries": {
            "title": "🔍 Search queries",
            "type": "array",
            "description": "Keywords to search on the site picked in \"Site for search queries\" (allegro.pl unless you change it). Each keyword runs its own paginated crawl. Example: \"laptop gaming\", \"iphone 15\", \"lego technic\".",
            "items": {
              "type": "string"
            }
          },
          "market": {
            "title": "Site for search queries",
            "enum": [
              "pl",
              "cz",
              "sk"
            ],
            "type": "string",
            "description": "Which Allegro site the search queries run on. Start URLs are always read on their own site. Prices, the min/max price filter and the text follow the site: PLN and Polish on allegro.pl, CZK and Czech on allegro.cz, EUR and Slovak on allegro.sk. allegro.cz and allegro.sk pages load more slowly than allegro.pl, and their offer pages (full details, seller lead data, seller profiles) load less often.",
            "default": "pl"
          },
          "startUrls": {
            "title": "📎 Start URLs (optional)",
            "type": "array",
            "description": "Direct Allegro URLs on allegro.pl, allegro.cz or allegro.sk: offer pages (allegro.pl/oferta/…, allegro.cz/nabidka/…, allegro.sk/ponuka/…), search pages (allegro.pl/listing?string=…, allegro.cz/vyhledavani?string=…, allegro.sk/vyhladavanie?string=…), category pages (allegro.pl/kategoria/…, allegro.cz/kategorie/…, allegro.sk/kategoria/…), seller storefronts (allegro.pl/uzytkownik/…, allegro.cz/uzivatel/…, allegro.sk/pouzivatel/…, and partner shops at allegro.cz/obchod/… and allegro.sk/obchod/…), catalog product pages (/produkt/…) and a product's offers page (allegro.pl/oferty-produktu/…). Each URL is read on its own site, in that site's currency. Listing, category, seller and product-offers URLs are paginated; offer URLs return a single product. A product page gives every seller's offer of that product, or only the offer named in its ?offerId=; in Product reviews mode it gives that product's opinions. A p=N parameter in the URL is respected: the crawl starts from that page and continues forward, so you can split a huge seller storefront into batches (e.g. …?p=101 with a matching \"Max products\" value). allegro.hu URLs are skipped with a warning, and allegro.com links are read as allegro.pl. Runs in addition to search queries.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "dataType": {
            "title": "What to collect",
            "enum": [
              "products",
              "productReviews",
              "sellerProfile"
            ],
            "type": "string",
            "description": "Products keeps the listing and offer rows. Product reviews saves one row per opinion (author, stars, text, pros and cons, photos, the variant bought, date, and Allegro's translation when the opinion is in another language), read from Allegro's public review list using the product id the search results (or a /produkt/ URL) carry, so a catalog product with many opinions yields many rows. Offers in the results that aren't tied to a catalog product have no product reviews and are skipped. An offer page is opened only for offer URLs you give, or when the review list doesn't answer. Seller profile saves one row per seller: company, address, tax id, ratings and opening hours when the seller publishes them. With \"Collect seller lead data\" also on, the row adds the email and phone the seller publishes, each billed once per seller (Published email / Published phone on the Pricing tab). Each saved row is billed as one result.",
            "default": "products"
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 0,
            "type": "integer",
            "description": "Product reviews mode only. How many opinions to save per product, in the order Allegro lists them. 0 saves all of them. \"Max products per query\" sets how many products are read; the run's total is still capped by your plan and max cost per run.",
            "default": 0
          },
          "maxItemsPerQuery": {
            "title": "Max products per query / URL",
            "minimum": 1,
            "type": "integer",
            "description": "Upper bound of products to extract per search query or per listing URL. Allegro serves ~60 products/page and caps search/category views at 100 pages (~6000 max per query); seller storefronts have no such cap and are followed to their real last page. In Product reviews and Seller profile modes it caps how many products are read per query. Also capped by your plan and charge limit.",
            "default": 100
          },
          "allOffersPerProduct": {
            "title": "Every seller's offer of each product",
            "type": "boolean",
            "description": "Products mode only, allegro.pl only. Allegro groups the offers of one catalog product into a single card in search and category results, so a search returns one row per product, not per seller. When on, each product whose card shows more than one offer has its offers page (allegro.pl/oferty-produktu/…) read too, with the price, condition and sort filters of the search or start URL, and every seller's offer on it is saved as its own row. This gives more rows (each billed as one result) and reads at least one more page per product (more while the caps leave room for its offers), so runs take longer. Those rows count against \"Max products per query / URL\" after the search's own results, and against \"Max results in total\" after every search's own results; they have no search position (position, organicPosition and page are empty) and their sourceUrl is the product's offers page. No offer is saved twice: a product shown by several searches is read again only for a search that still has room after an earlier read ran out of it. allegro.cz and allegro.sk searches return their own results only.",
            "default": false
          },
          "maxItems": {
            "title": "Max results in total (optional)",
            "minimum": 1,
            "type": "integer",
            "description": "Stops the run once this many rows are saved across all search queries and URLs: products, reviews or seller profiles, depending on \"What to collect\". Leave empty for no total limit beyond the per-query settings. Your plan and max cost per run still apply."
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Only return offers priced at or above this value, in the site's currency: PLN on allegro.pl, CZK on allegro.cz, EUR on allegro.sk. Maps to Allegro's price_from filter (cena-od on allegro.cz and allegro.sk)."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Only return offers priced at or below this value, in the site's currency: PLN on allegro.pl, CZK on allegro.cz, EUR on allegro.sk. Maps to Allegro's price_to filter (cena-do on allegro.cz and allegro.sk)."
          },
          "condition": {
            "title": "Condition",
            "enum": [
              "all",
              "new",
              "used"
            ],
            "type": "string",
            "description": "Filter by product condition (Allegro's \"stan\" filter, \"stav\" on allegro.cz and allegro.sk).",
            "default": "all"
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "relevance",
              "price-asc",
              "price-desc",
              "newest"
            ],
            "type": "string",
            "description": "Order of the search/category results.",
            "default": "relevance"
          },
          "scrapeProductDetails": {
            "title": "Scrape full product details (deep mode)",
            "type": "boolean",
            "description": "Visit each offer page for the deep dataset: full description, complete parameter table, rating + review count, stock quantity, GTIN/EAN, warranty, return policy, full seller reputation and full-resolution images. Costs one extra request per product (slower; the per-row price is the same). Offer pages read in your runs over the last 7 days are reused instead of read again; see \"Max age of cached offer details\". Leave off for fast, rich listing-level data.",
            "default": false
          },
          "maxDetailAgeHours": {
            "title": "Max age of cached offer details (hours)",
            "minimum": 0,
            "type": "integer",
            "description": "Products mode, with full details or seller lead data on. Offer pages read in your runs over the last 7 days are reused, which makes repeat runs faster. A cached copy older than this many hours has its offer page read again; if that page doesn't load, the older copy is kept. Every row that went through an offer page says when it was read in detailFetchedAt and detailFromCache. Leave empty for 7 days; 0 reads every offer page again (slower, and more pages can fail to load); values above 168 still stop at 7 days. Price, discount, delivery, rating, recent buyers and seller positive % come from the search results of the current run whenever the results show them, whatever this says. Seller lead data (company, NIP, email, phone) is also kept in a separate seller cache for up to 30 days, which this setting doesn't shorten."
          },
          "includeRawData": {
            "title": "Include raw data",
            "type": "boolean",
            "description": "Attach the raw Allegro offer object to each detailed record. Only applies when \"Scrape full product details\" is on. Cached offer pages aren't used while this is on, so every offer page is read again. For debugging / power users.",
            "default": false
          },
          "scrapeSellerContact": {
            "title": "Collect seller lead data (B2B)",
            "type": "boolean",
            "description": "Add a sellerCompany object to each record with the business seller's legal company name, tax ID (NIP / EU-VAT), REGON, KRS, registered address + city, and — when the seller publishes them on their Allegro store — their real email, phone and website. Visits the offer page (one extra request per product, same as full details), so use it with targeted searches, not million-row runs. Private-individual sellers have no company data. The primary email, phone and website are also mirrored to top-level columns (sellerEmail, sellerPhone, sellerWebsite) so they show directly in the table and CSV/Excel exports. Billing: a published email and a published phone are each charged once per unique seller (see pricing).",
            "default": false
          },
          "enrichEmails": {
            "title": "Find seller emails off-platform (enrichment)",
            "type": "boolean",
            "description": "When a Polish business seller has no email on Allegro, look for the company's own website (the site the seller links on its Allegro page, or a domain matching its legal company name), then read that site's contact and terms pages. An email is kept only when the same site shows the seller's NIP (tax id) or exact legal name, and the pages it was found on are returned in emailSources. Requires \"Collect seller lead data\". Paid Apify plans only. Poland-only (allegro.pl rows only); coverage is partial (a seller whose site isn't found this way gets no email), and each unique seller is looked up once. Emails found this way are billed the same per-seller email rate.",
            "default": false
          },
          "barcodeQuickLookup": {
            "title": "Barcode quick-lookup (skip detail page for EAN searches)",
            "type": "boolean",
            "description": "When a search query is a pure EAN/GTIN barcode (8–14 digits) and \"Max products per query / URL\" is 1, skip the product detail page and echo the searched barcode into the record's gtin field. The listing data still returns price, seller, rating, images and parameters — you just skip the extra per-offer fetch, which makes big barcode runs dramatically faster and cheaper. Turn OFF if you need descriptions, stock, warranty or return policy on barcode lookups. Only affects pure-EAN single-item queries; keyword and multi-item searches always fetch full details when \"Scrape full product details\" is on. Default on.",
            "default": true
          },
          "geoCode": {
            "title": "Proxy exit country",
            "type": "string",
            "description": "Exit country for the last-resort unblocking service (Allegro localises prices and availability by IP). Keep the default \"pl\". The residential proxies pick their exits by site (allegro.pl, allegro.cz or allegro.sk) whatever this says.",
            "default": "pl"
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many products/pages to fetch in parallel (1–50). Higher = much faster for large runs (e.g. thousands of barcode/EAN lookups); 30–50 recommended for big detail runs. Default 10.",
            "default": 10
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}