{
  "openapi": "3.0.1",
  "info": {
    "title": "Apple Maps Scraper - Phones, Ratings, Hours & Photos",
    "description": "Extract place data from Apple Maps at scale. Get phone numbers, ratings, opening hours, amenities, photos, and full addresses for any business. Search by query + location, paste place URLs, or replay search URLs. 30+ fields per place. Parallel requests. No Apple account needed. $2.99/1,000 places.",
    "version": "0.0",
    "x-build-id": "7PRPegtqpcWSB3NoK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zen-studio~apple-maps-scraper-pro/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zen-studio-apple-maps-scraper-pro",
        "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/zen-studio~apple-maps-scraper-pro/runs": {
      "post": {
        "operationId": "runs-sync-zen-studio-apple-maps-scraper-pro",
        "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/zen-studio~apple-maps-scraper-pro/run-sync": {
      "post": {
        "operationId": "run-sync-zen-studio-apple-maps-scraper-pro",
        "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": "Search for places by query and location. The location is automatically converted to coordinates — use any city, neighborhood, or address.<br><br>Each query searches a ~5 km radius. All queries run in parallel.",
            "items": {
              "type": "object",
              "required": [
                "query",
                "location"
              ],
              "properties": {
                "query": {
                  "title": "Search Query",
                  "type": "string",
                  "description": "What to search for — works like the Apple Maps search bar.<br><br>Examples:<br>• <code>coffee shops</code><br>• <code>dentist</code><br>• <code>Italian restaurant</code><br>• <code>EV charging station</code>",
                  "editor": "textfield"
                },
                "location": {
                  "title": "Location",
                  "type": "string",
                  "description": "Where to search. Gets converted to coordinates automatically.<br><br>Examples:<br>• <code>Brooklyn, New York</code><br>• <code>Shibuya, Tokyo</code><br>• <code>1600 Amphitheatre Parkway, Mountain View, CA</code><br><br>More specific = more accurate. <code>Soho, London</code> is better than <code>London</code>.",
                  "editor": "textfield"
                },
                "maxResults": {
                  "title": "Max Results",
                  "type": "integer",
                  "description": "Override the global <b>Max Results per Query</b> for this specific search. Leave empty to use the global setting.",
                  "minimum": 1,
                  "maximum": 1000,
                  "editor": "number"
                }
              }
            }
          },
          "maxResults": {
            "title": "Max Results per Query",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum places to return <b>per search query or guide</b>. Applies to all search queries, search URLs and guides unless overridden per-query.",
            "default": 50
          },
          "includeNearbyPlaces": {
            "title": "Include Nearby Matches",
            "type": "boolean",
            "description": "Also scrape the matching places Apple shows around your search area, not just the ones in the ranked list.<br><br>Typically <b>around 80% more places per search</b> for dense queries (bars, trailheads, parking), and the same place detail for each. Sparse queries (one named landmark) are unaffected.<br><br>More places means a larger bill, so this is off by default. <b>Max Results per Query</b> still caps the total.",
            "default": false
          },
          "sortBy": {
            "title": "Sort Results By",
            "enum": [
              "relevance",
              "distance",
              "rating"
            ],
            "type": "string",
            "description": "The order Apple Maps ranks places in for each search. Leave empty for Apple's best match.<br><br><b>Distance</b>: nearest to the search point first. Apple returns fewer, closer places.<br><b>Rating</b>: highest rated first, within the search area.<br><br><b>Rank in Search</b> in the output follows the order you pick. Applies to search queries with a location and to search URLs."
          },
          "placeUrls": {
            "title": "Place URLs",
            "type": "array",
            "description": "Direct links to specific Apple Maps places. Fetches full details for each.<br><br>Accepted formats:<br>• <code>https://maps.apple.com/place?auid=12345</code><br>• <code>https://maps.apple.com/place?place-id=I918CB7E77B4C7910</code><br><br>Right-click any place on <a href=\"https://maps.apple.com\" target=\"_blank\">maps.apple.com</a> → Share → Copy Link.",
            "items": {
              "type": "string"
            }
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Apple Maps search URLs with query and coordinates baked in. Useful for replaying a specific search from your browser.<br><br>Format: <code>https://maps.apple.com/search?query=coffee+shops&center=40.71,-74.00&span=0.05,0.05</code><br><br>The <code>span</code> parameter controls search radius — smaller values = tighter area.",
            "items": {
              "type": "string"
            }
          },
          "guideUrls": {
            "title": "Guide URLs",
            "type": "array",
            "description": "Apple Maps guides, the curated lists such as \"Coolest Bars in Chicago\". Every place in the guide is scraped with full details, and each one records the guide it came from and its position in it.<br><br>Format: <code>https://maps.apple.com/guides?curated=1694850223688040849</code><br><br>Open a guide on <a href=\"https://maps.apple.com\" target=\"_blank\">maps.apple.com</a> and copy the link, or use a <code>guideId</code> from any place's <b>Featured In</b> list.",
            "items": {
              "type": "string"
            }
          },
          "openNow": {
            "title": "Open Now",
            "type": "boolean",
            "description": "Keep only places that are open at the moment the run happens, in the place's own local time.<br><br>Places that do not publish opening hours are left out, because there is no way to tell whether they are open."
          },
          "minRating": {
            "title": "Minimum Rating",
            "enum": [
              "3",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Keep only places rated at or above this, on a 0-5 scale.<br><br>Ratings come from different sources on different scales and are converted to 0-5 before comparing, so this threshold means the same thing everywhere. Places with no rating are left out."
          },
          "hasPhone": {
            "title": "Has Phone Number",
            "type": "boolean",
            "description": "Keep only places with a published phone number."
          },
          "hasWebsite": {
            "title": "Has Website",
            "type": "boolean",
            "description": "Keep only places with a published website."
          },
          "countryCode": {
            "title": "Country Code",
            "type": "string",
            "description": "<b>Changes which places are returned — not just formatting.</b><br><br>Apple ranks places differently per country. The same search near the same coordinates gives different results with different country codes.<br><br>Example: <code>café</code> near Paris → <code>US</code> returns Café de Flore, <code>FR</code> returns Le Peloton Café.<br><br>Match this to where your target places are.",
            "default": "US"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "<b>Changes which places are returned — not just translations.</b><br><br>Controls category names (<code>Kaffeehaus</code> vs <code>Coffee Shop</code>), address formatting, and result ranking.<br><br>Example: searching near Berlin with <code>de-DE</code> vs <code>en-US</code> returns different first results.",
            "default": "en-US"
          },
          "feedback": {
            "title": "Feedback to the maintainers",
            "type": "string",
            "description": "For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}