{
  "openapi": "3.0.1",
  "info": {
    "title": "OpenStreetMap Scraper - OSM POI Data, No-Website Leads",
    "description": "Local business leads with no website of their own, from OpenStreetMap: 3932 of 7673 named Austin businesses in one query, 80.5 seconds. Phones normalised to E.164, 2607 chain outlets removed before billing, any city worldwide. Businesses without websites finder, OSM points of interest.",
    "version": "0.1",
    "x-build-id": "myRDPabcj1TFaGrQu"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/snow_leo_data~openstreetmap-business-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-snow_leo_data-openstreetmap-business-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/snow_leo_data~openstreetmap-business-scraper/runs": {
      "post": {
        "operationId": "runs-sync-snow_leo_data-openstreetmap-business-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/snow_leo_data~openstreetmap-business-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-snow_leo_data-openstreetmap-business-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": {
          "location": {
            "title": "City or area",
            "type": "string",
            "description": "Any place on the map: `Austin, Texas`, `Manchester, UK`, `Lyon, France`, `Bali, Indonesia`. The whole administrative area is swept unless you set a radius below.",
            "default": "Austin, Texas, United States"
          },
          "categories": {
            "title": "Business categories",
            "type": "array",
            "description": "Leave empty to sweep every category at once. Each one maps to real OpenStreetMap tags — the mapping is printed in the run report.",
            "items": {
              "type": "string",
              "enum": [
                "food_drink",
                "beauty_wellness",
                "health_medical",
                "home_trades",
                "automotive",
                "professional_services",
                "legal_finance",
                "real_estate",
                "retail_shops",
                "hospitality",
                "fitness_leisure",
                "education",
                "pets",
                "events_photo"
              ],
              "enumTitles": [
                "Restaurants, cafes, bars, bakeries",
                "Hair, beauty, nails, spa, tattoo",
                "Dentists, doctors, clinics, pharmacies, vets",
                "Plumbers, electricians, roofers, builders",
                "Car repair, dealers, wash, driving schools",
                "Offices: agencies, consultants, IT",
                "Lawyers, accountants, insurance, banks",
                "Estate agents and property managers",
                "Every kind of shop",
                "Hotels, motels, guest houses, campsites",
                "Gyms, studios, sports and leisure",
                "Schools, tutors, nurseries, training",
                "Vets, groomers, pet shops",
                "Photographers, florists, event services"
              ]
            }
          },
          "maxResults": {
            "title": "Max leads",
            "minimum": 0,
            "type": "integer",
            "description": "How many leads land in your dataset, counted AFTER the no-website, phone and chain filters — businesses removed by filters never count and are never charged. Leave 0 and you get 200, so a first run stays cheap.",
            "default": 200
          },
          "websiteFilter": {
            "title": "Website",
            "enum": [
              "no_website",
              "has_website",
              "any"
            ],
            "type": "string",
            "description": "`no_website` is the point of this Actor: businesses with nothing in any website tag. `has_website` flips it, `any` turns the filter off.",
            "default": "no_website"
          },
          "requirePhone": {
            "title": "Must have a phone number",
            "type": "boolean",
            "description": "Keep only businesses with a working phone number, normalised to international format. Recommended for cold calling.",
            "default": false
          },
          "requireAddress": {
            "title": "Must have a street address",
            "type": "boolean",
            "description": "Keep only businesses with both a street and a house number — the ones you could post a letter to.",
            "default": false
          },
          "requireOpeningHours": {
            "title": "Must publish opening hours",
            "type": "boolean",
            "description": "A sign the record is actively maintained rather than a stale pin.",
            "default": false
          },
          "excludeChains": {
            "title": "Independents only (drop chains)",
            "type": "boolean",
            "description": "Drops every outlet that carries a brand tag — a Starbucks branch cannot buy a website from you. In Austin this removes 2,607 of 7,673 records.",
            "default": false
          },
          "minLeadScore": {
            "title": "Minimum lead score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "0-100, computed from the record itself: no website, reachable by phone, full street address, independent, opening hours published, edited in the last 24 months. Every point is listed in `lead_reasons`.",
            "default": 0
          },
          "categoryContains": {
            "title": "Category contains",
            "type": "string",
            "description": "Free-text narrowing on the category, e.g. `dent`, `hair`, `plumb`. Case-insensitive.",
            "default": ""
          },
          "nameContains": {
            "title": "Name contains",
            "type": "string",
            "description": "Keep only businesses whose name contains this text.",
            "default": ""
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop a lead if any of these words appears in its name, category, brand or operator.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minOpenDaysPerWeek": {
            "title": "Open at least N days a week",
            "minimum": 0,
            "maximum": 7,
            "type": "integer",
            "description": "Uses the parsed weekly schedule. Businesses that publish no hours at all are kept, not dropped — silence is not the same as closed.",
            "default": 0
          },
          "searchRadiusKm": {
            "title": "Search radius (km)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Distance from the centre of the place. Leave 0 to sweep the whole administrative area instead of a circle.",
            "default": 0
          },
          "searchRadiusMiles": {
            "title": "Search radius (miles)",
            "minimum": 0,
            "maximum": 125,
            "type": "integer",
            "description": "Alternative to kilometres. Used only when the km radius is left at 0.",
            "default": 0
          },
          "boundingBox": {
            "title": "Bounding box",
            "type": "string",
            "description": "`south,west,north,east` in decimal degrees, e.g. `30.15,-97.95,30.45,-97.60`. Overrides both the place name and the radius — use it to sweep an exact territory or to split a big market between runs.",
            "default": ""
          },
          "countryCode": {
            "title": "Country code",
            "type": "string",
            "description": "Two letters, e.g. `us`, `gb`, `de`. Disambiguates place names — many towns share a name — and supplies the dialling code when a phone number is stored without one.",
            "default": ""
          },
          "language": {
            "title": "Preferred name language",
            "type": "string",
            "description": "Two-letter code, e.g. `en`. Fills `name_international` from the `name:<code>` tag when the map has one. The local name is always returned in `name`.",
            "default": ""
          },
          "customTags": {
            "title": "Custom OpenStreetMap tags",
            "type": "array",
            "description": "For anything the category list does not cover: `shop=florist`, `craft=roofer`, `office=architect`, or just `club` for every value of that key. Added on top of the categories you picked.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyNew": {
            "title": "Monitor mode: only new and changed",
            "type": "boolean",
            "description": "Remembers every place returned in earlier runs in a named key-value store. On the next run you are charged only for businesses that are new or whose name, website, phone, address, hours or category changed. Each row carries `change_type`: NEW, UPDATED or UNCHANGED.",
            "default": false
          },
          "emitUnchanged": {
            "title": "Include unchanged records too",
            "type": "boolean",
            "description": "Off by default: paying twice for a record that has not moved is the thing monitor mode exists to prevent.",
            "default": false
          },
          "notifyOnlyChanges": {
            "title": "Notify only about new and changed",
            "type": "boolean",
            "description": "Applies to the channels below. Works together with monitor mode.",
            "default": false
          },
          "notificationLimit": {
            "title": "Leads per notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many leads to list inside one message (1-20). The full set is always in the dataset.",
            "default": 10
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Incoming webhook URL. Leave empty to skip Slack."
          },
          "discordWebhookUrl": {
            "title": "Discord webhook URL",
            "type": "string",
            "description": "Incoming webhook URL. Leave empty to skip Discord."
          },
          "telegramToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "Token from @BotFather. Needs the chat ID below as well."
          },
          "telegramChatId": {
            "title": "Telegram chat ID",
            "type": "string",
            "description": "Chat or channel ID the bot posts into.",
            "default": ""
          },
          "webhookUrl": {
            "title": "Your own webhook URL",
            "type": "string",
            "description": "Receives a JSON POST with the run summary and up to 200 leads — for n8n, Make, Zapier or your own CRM."
          },
          "webhookHeaders": {
            "title": "Webhook headers",
            "type": "object",
            "description": "Extra headers for your webhook, e.g. {\"Authorization\": \"Bearer ...\"}.",
            "default": {}
          },
          "compactOutput": {
            "title": "Compact output (for AI agents)",
            "type": "boolean",
            "description": "Returns 14 core fields plus the required attribution instead of all 59. Smaller payloads for LLM pipelines and MCP tools.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "Drop empty fields",
            "type": "boolean",
            "description": "Removes null, empty-string and empty-list fields from every record. The attribution field is always kept — the licence requires it.",
            "default": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}