{
  "openapi": "3.0.1",
  "info": {
    "title": "Glovo Scraper – Restaurant & Store Data Extractor",
    "description": "Scrape Glovo restaurants and stores by URL, city, or store ID. Extract ratings, delivery fees, opening hours, promotions, addresses, and availability for food-delivery research, lead generation, and market analysis—no login required.",
    "version": "0.0",
    "x-build-id": "uUdzpaMqUb2fy78yQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/epicscrapers~glovo-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-epicscrapers-glovo-store-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/epicscrapers~glovo-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-epicscrapers-glovo-store-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/epicscrapers~glovo-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-epicscrapers-glovo-store-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": {
          "storeUrls": {
            "title": "Glovo store URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Paste one or more Glovo store URLs, one per item, for example https://glovoapp.com/it/it/genova/stores/bowls-e-tartare-gen. Stores from different cities can be mixed; each one is scraped for its own city. A city URL such as https://glovoapp.com/es/es/madrid discovers every store in that city.",
            "items": {
              "type": "string",
              "pattern": "^https?:\\/\\/(?:www\\.)?glovoapp\\.com\\/[a-z]{2}\\/[a-z]{2}\\/[a-z0-9-]+(?:\\/stores\\/[a-z0-9_-]+)?\\/?(?:[?#].*)?$"
            }
          },
          "cities": {
            "title": "Cities",
            "uniqueItems": true,
            "type": "array",
            "description": "Enter one or more cities, one per item, for example Barcelona, Genova or Milan, Italy. Every store Glovo lists in each city is discovered and scraped, city after city. With store IDs, list the one city those stores are in instead.",
            "items": {
              "type": "string",
              "minLength": 2
            }
          },
          "categories": {
            "title": "Categories",
            "uniqueItems": true,
            "type": "array",
            "description": "Only discover stores in these categories. Leave empty for every category. Pharmacy covers Glovo's \"Pharmacy & Beauty\" and \"Parapharmacy & Beauty\"; Other covers any further category a city has, such as Tobacco or Alcohol.",
            "items": {
              "type": "string",
              "enum": [
                "food",
                "groceries",
                "pharmacy",
                "shops",
                "other"
              ],
              "enumTitles": [
                "Food & restaurants",
                "Groceries & supermarkets",
                "Pharmacy & beauty",
                "Shops",
                "Other (tobacco, alcohol, ...)"
              ]
            }
          },
          "discoverMode": {
            "title": "Discover the city of the city code",
            "type": "boolean",
            "description": "Discover every store in the city given by the Glovo city code and coordinates below. Only needed when no city is listed above.",
            "default": false
          },
          "storeIds": {
            "title": "Glovo store IDs",
            "uniqueItems": true,
            "type": "array",
            "description": "Add one numeric store ID per item, for example 534401. All IDs must be in one city: set the Glovo city code below or list that one city under Cities.",
            "items": {
              "type": "string",
              "pattern": "^\\d+$"
            }
          },
          "cityCode": {
            "title": "Glovo city code",
            "pattern": "^[A-Z]{3}$",
            "type": "string",
            "description": "Enter Glovo's three-letter city code, for example BCN, MAD, GEN, or MIL."
          },
          "latitude": {
            "title": "Latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "Enter the delivery latitude. Use it together with longitude only when automatic location resolution is unavailable or incorrect."
          },
          "longitude": {
            "title": "Longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "Enter the delivery longitude. Use it together with latitude only when automatic location resolution is unavailable or incorrect."
          },
          "includeInfoScreen": {
            "title": "Extended store information",
            "type": "boolean",
            "description": "Fetch opening hours, contact details, and legal information for each store. This makes one extra request per store.",
            "default": true
          },
          "maxDiscoveryStores": {
            "title": "Store limit per city",
            "minimum": 0,
            "type": "integer",
            "description": "Stop discovering a city after this many stores. Use 0 to scrape every store in the city (a large city such as Madrid has about 4,000).",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Stores processed at once",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "How many stores and locations are processed in parallel. Requests are spread over twice as many proxy IPs and paced per IP, so Glovo's rate limit is not hit.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Glovo limits requests per IP, so requests go through many Apify Proxy IPs. Datacenter proxies are enough. Without a proxy the run uses one IP and is much slower.",
            "default": {
              "useApifyProxy": true
            }
          },
          "session": {
            "title": "Session identifiers",
            "type": "object",
            "description": "Provide Glovo Perseus session and client identifiers only when needed.",
            "properties": {
              "sessionId": {
                "title": "Session ID",
                "description": "Enter the Glovo Perseus session identifier.",
                "type": "string",
                "editor": "textfield",
                "minLength": 1
              },
              "clientId": {
                "title": "Client ID",
                "description": "Enter the Glovo Perseus client identifier.",
                "type": "string",
                "editor": "textfield",
                "minLength": 1
              }
            },
            "additionalProperties": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}