{
  "openapi": "3.0.1",
  "info": {
    "title": "Carrefour Scraper [Just 💰$2] — France Grocery Prices",
    "description": "💰 $2 per 1,000 products. Scrape carrefour.fr — Carrefour France groceries with current prices · availability · GTINs · categories · unit pricing · ratings & product URLs. Incremental mode tracks new and changed products across scheduled runs.",
    "version": "0.1",
    "x-build-id": "hxia4ieB6dBNvRNps"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/blackfalcondata~carrefour-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-blackfalcondata-carrefour-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/blackfalcondata~carrefour-scraper/runs": {
      "post": {
        "operationId": "runs-sync-blackfalcondata-carrefour-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/blackfalcondata~carrefour-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-blackfalcondata-carrefour-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": {
          "productIds": {
            "title": "🛍️ Basket — GTINs / product IDs",
            "type": "array",
            "description": "Track a specific shopping list by GTIN/barcode or Carrefour product ID. Product URLs are also accepted here. Pair with quantities to compute per-line basket totals.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "productUrls": {
            "title": "🔗 Product URLs",
            "type": "array",
            "description": "Carrefour product URLs to scrape directly, equivalent to the 123webdata productUrls input.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "categoryUrls": {
            "title": "📂 Category URLs",
            "type": "array",
            "description": "Carrefour category/search URLs. URLs with q/query/search become keyword searches; URLs with rayonId/filter=rayonId use Carrefour category filtering.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "startUrls": {
            "title": "🔗 Start URLs",
            "type": "array",
            "description": "Paste Carrefour product, search or category URLs. Product URLs are scraped directly; search/category URLs build the matching query and supported Carrefour filters, including multi-select, range, delivery, category-path and boolean facets like filters[facet_promotions][0]=..., filters[facet_price][gte]=... and filters[product.categories...]=...",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "query": {
            "title": "🔍 Search term(s)",
            "type": "string",
            "description": "Product search keywords. Use a single term like \"lait\" or paste a JSON array such as [\"lait\",\"pâtes\"]. Ignored when productIds/productUrls are supplied.",
            "default": ""
          },
          "strictMatch": {
            "title": "🎯 Exact matches only",
            "type": "boolean",
            "description": "Keep only products whose brand or name contains every word of your search term. carrefour.fr's own search also returns loosely related products, so turn this on for brand or product searches like \"Nutella\" or \"Bonne Maman\". Leave it off for broad terms like \"lait\", where matching products often do not carry the word in their name. Has no effect on product, category or start URLs.",
            "default": false
          },
          "categories": {
            "title": "🗂️ Category terms",
            "type": "array",
            "description": "Local category filter after fetch. Use terms such as \"Surgelés\", \"Lait\", or \"Crèmerie\".",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "rayonIds": {
            "title": "🏷️ Carrefour rayon IDs",
            "type": "array",
            "description": "Advanced Carrefour category IDs used as API filters, e.g. 29298 for a specific milk subcategory.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "quantities": {
            "title": "🔢 Basket quantities",
            "description": "Optional per-product quantities. Accepts an object map like {\"3176571983008\": 2} or array pairs like [{\"gtin\":\"3176571983008\",\"qty\":2}].",
            "default": {}
          },
          "maxResults": {
            "title": "💯 Max results",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of product rows to push. Use 0 only when you intentionally want all products for the selected query/category.",
            "default": 100
          },
          "maxResultsPerScrape": {
            "title": "💯 Max results per scrape",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Compatibility alias for 123webdata/carrefour-scraper. If maxResults is not set, this value is used."
          },
          "usePagination": {
            "title": "➡️ Use pagination",
            "type": "boolean",
            "description": "Whether to fetch additional pages after the first page for query/category runs.",
            "default": true
          },
          "pageSize": {
            "title": "📄 Page size",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Kept for compatibility. Carrefour now serves a fixed 30 products per page, so this value has no effect.",
            "default": 30
          },
          "priceMin": {
            "title": "💰 € Min price",
            "minimum": 0,
            "type": "number",
            "description": "Only emit products with price greater than or equal to this value."
          },
          "priceMax": {
            "title": "💰 € Max price",
            "minimum": 0,
            "type": "number",
            "description": "Only emit products with price less than or equal to this value."
          },
          "unitPriceMin": {
            "title": "⚖️ Min unit price",
            "minimum": 0,
            "type": "number",
            "description": "Only emit products with per-unit price greater than or equal to this value."
          },
          "unitPriceMax": {
            "title": "⚖️ Max unit price",
            "minimum": 0,
            "type": "number",
            "description": "Only emit products with per-unit price less than or equal to this value."
          },
          "inStockOnly": {
            "title": "📦 In stock only",
            "type": "boolean",
            "description": "Drop products flagged as unavailable.",
            "default": false
          },
          "ingredientFilter": {
            "title": "🥗 Ingredient filter",
            "type": "string",
            "description": "Case-insensitive substring filter on detailed ingredient text. Use a single term or JSON array of terms that all must match."
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "price-asc",
              "price-desc",
              "unit-price-asc",
              "unit-price-desc",
              "line-asc",
              "line-desc",
              "name-asc",
              "rating-desc"
            ],
            "type": "string",
            "description": "Optional ordering before maxResults is applied."
          },
          "includeDetails": {
            "title": "📋 Include product details",
            "type": "boolean",
            "description": "Fetch detail fields such as description, ingredients, nutrition, allergens, rating, weight and contact attributes. Enabled by default to match product-page scrapers.",
            "default": true
          },
          "compact": {
            "title": "📦 Compact output",
            "type": "boolean",
            "description": "Keep only the core product, price, availability, basket and image fields.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "🧹 Exclude empty fields",
            "type": "boolean",
            "description": "Drop null, empty-string and empty-array fields from each record before push.",
            "default": false
          },
          "descriptionFormat": {
            "title": "📝 Description format",
            "enum": [
              "all",
              "text",
              "html",
              "markdown"
            ],
            "type": "string",
            "description": "Pick a single description representation.",
            "default": "all"
          },
          "descriptionMaxLength": {
            "title": "✂️ Description max length",
            "minimum": 0,
            "type": "integer",
            "description": "Truncate product description text after this many characters. Use 0 for no truncation.",
            "default": 0
          },
          "incrementalMode": {
            "title": "♻️ Incremental mode",
            "type": "boolean",
            "description": "Compare against previous runs for the same scope and emit changeType for new, updated, unchanged or expired products.",
            "default": false
          },
          "stateKey": {
            "title": "🔑 State key",
            "type": "string",
            "description": "Optional stable ID for the tracked search/basket universe. Leave empty to auto-generate from search inputs."
          },
          "emitUnchanged": {
            "title": "📤 Emit unchanged",
            "type": "boolean",
            "description": "Include products with no detected change in incremental output.",
            "default": false
          },
          "skipReposts": {
            "title": "🚫 Skip reposts",
            "type": "boolean",
            "description": "When incremental mode is enabled, skip products whose content matches a prior expired row.",
            "default": false
          },
          "notifyOnlyChanges": {
            "title": "🔄 Notify only new/updated",
            "type": "boolean",
            "description": "When incremental mode is enabled, only send notifications for changed products.",
            "default": false
          },
          "notificationLimit": {
            "title": "📊 Max products per notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of products included in each notification message.",
            "default": 5
          },
          "telegramToken": {
            "title": "🔑 Telegram bot token",
            "type": "string",
            "description": "Telegram bot token from @BotFather."
          },
          "telegramChatId": {
            "title": "💬 Telegram chat ID",
            "type": "string",
            "description": "Telegram chat or channel ID."
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord webhook URL",
            "type": "string",
            "description": "Discord incoming webhook URL."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack webhook URL",
            "type": "string",
            "description": "Slack incoming webhook URL."
          },
          "whatsappAccessToken": {
            "title": "📱 WhatsApp access token",
            "type": "string",
            "description": "WhatsApp Cloud API access token."
          },
          "whatsappPhoneNumberId": {
            "title": "📞 WhatsApp phone number ID",
            "type": "string",
            "description": "WhatsApp Business phone-number ID."
          },
          "whatsappTo": {
            "title": "📲 WhatsApp recipient",
            "type": "string",
            "description": "Recipient phone in E.164 format without +."
          },
          "webhookUrl": {
            "title": "🪝 Generic webhook URL",
            "type": "string",
            "description": "Receives a JSON POST with {metadata, items} after each run."
          },
          "webhookHeaders": {
            "title": "📋 Webhook headers",
            "type": "object",
            "description": "Optional JSON object of custom headers."
          },
          "appConnector": {
            "title": "📤 Send results to Notion (or another connected app)",
            "type": "string",
            "description": "Optional. Pick a connected app under Settings -> API & Integrations to receive your results. Notion is supported today (a run-summary page); other MCP connectors are best-effort as Apify expands its catalog."
          },
          "mcpIssueTeam": {
            "title": "🎫 Issue tracker team",
            "type": "string",
            "description": "Only when the connected app is an issue tracker: the team (name or ID) the summary issue is created under, if that app requires one."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}